Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Zufallszahlen in Liste (Simulationen)

Schreiben Sie ein Programm, das alle Zahlen von 0000 bis 9999 in zufälliger Reihenfolge in eine Liste abfüllt. Die Zahlen müssen alle vierstellig sein - also z.B. 0000,  0007, 0221 bzw. 8344. Jede Zahl darf in der Liste am Schluss nur einmal vorkommen.

3 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (3)

gressly 13. August 2015 08:20   reply report
Ich habe mir erlaubt, die Aufgabe ins Kapitel "Simulationen" zu zügeln. Zwei Gründe: a) Zufallszahlen werden im Buch erst mit der linearen Kongruenzmethode eingeführt und b) gemischte Listen werden häufig im Zusammenhang mit der Computersimulation (Testdaten, Spiele, ...) benutzt.
virgil 25. Juli 2015 05:49   reply report
python
Würde mich interessieren, wie lange Eure Version für die Auflistung der 10000 Zahlen benötigt.

Hängt natürlich immer von deinem System ab. Lade dir doch einfach den jeweiligen Code runter und lass ihn zum Vergleich bei dir laufen.
Das Javascript läuft bei mir gefühlt einen Hauch länger als eine Sekunde, aber wohl nur auch, weil die ersten tausend Stellen ja durch die Prozedur mit führender Null laufen müssen.
Java wird wie immer zeitlich enorm abkacken — schätze ich mal. Zusätzlich gibt's dort ja eine eigene Schlaufe für jede Stellenlänge. Probier's halt einfach aus, wenn du neugierig bist und halte uns über deine Ergebnisse auf dem Laufenden!

python 6. Juni 2015 20:14   reply report
Würde mich interessieren, wie lange Eure Version für die Auflistung der 10000 Zahlen benötigt.

14 Lösung(en)

var randArr = [],
    i = 0;    

function leadZero(num) {
   var lz = num.toString();
   if (num < 1000) while (lz.length < 4) lz = "0" + lz;
   return lz;
}

for (i; i <= 9999; i++) {
   randArr.splice(Math.round(Math.random() * randArr.length), 0, leadZero(i));
}

console.log(randArr.join(", "));                            // lissalanda@gmx.at
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

#Das Programm ist allerdings noch nicht sehr perfomant. 
#Aktuell dauert die Auswertung ca. 16 Sek., da in jedem
#Schleifendurchlauf jede Zufallszahl mit jeder Zahl in der Liste
#verglichen werden muss.

import random
liste = []
while len(liste) < 10000:
    item = "%04i" % (random.randint(0,9999))#fügt jeder Zahl führende Nullen hinzu.
    if item not in liste: liste.append(item)
print(liste)

                

Lösung von: Py Thon ()

#Noch eine Version, die im Vergleich zur ersten nur 1/3 der Zeit benötigt.

import random
liste = []
auswahlliste = []
for item in range(0,10000):
    auswahlliste.append(item)    
while len(auswahlliste) > 0:
    wert = random.choice(auswahlliste)    
    auswahlliste.remove(wert)
    wert = "%04i" %wert
    liste.append(wert)   
    
print(liste)
                

Lösung von: Py Thon ()

package ch.programmieraufgaben.simulation;


/**
 * Programmieraufgaben.ch Web-Code: 82qq-hxu9
 * @version 0.1 (May 19, 2015)
 * @author Philipp Gressly Freimann 
 *         (philipp.gressly@santis.ch)
 */
public class ZufallszahlenInListe {

	public static void main(String[] args) {
		new ZufallszahlenInListe().top();
	}


	void top() {
		int[] zahlen;
		zahlen = erzeugeZahlen();
		mische(zahlen);
		ausgabe(zahlen);
	}

	void ausgabe(int[] zahlen) {
		for(int i = 0; i < zahlen.length; i++) {
			ausgabe(zahlen[i]);
		}
	}
	
	void ausgabe(int zahl) {
		if(zahl < 1000) {
			System.out.print("0");
		}
		if(zahl < 100) {
			System.out.print("0");
		}
		if(zahl < 10) {
			System.out.print("0");	
		}
		System.out.println(zahl);
	}
	
	void mische(int[] zahlen) {
		int last = zahlen.length - 1; // java indexiert ab 0
		for(int i = 0; i < last; i++) {
			int wahlPos = zufall(Math.random(), i, last);
			tausche(zahlen, i, wahlPos);
		}
	}

	void tausche(int[] zahlen, int a, int b) {
		int t = zahlen[a];
		zahlen[a] = zahlen[b];
		zahlen[b] = t;
	}
	int zufall(double nullEinsVerteilt, int min, int max) {
		return (int) (nullEinsVerteilt * (max - min + 1)) + min;
	}

	int[] erzeugeZahlen() {
		int[] zahlen = new int[10000];
		for(int i = 0; i <= zahlen.length-1; i = i + 1) {
			zahlen[i] = i;
		}
		return zahlen;
	}
}
 // end of class ZufallszahlenInListe
                

Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

open System

let max = 9999
let r = Random()
let az c = 
    (string c).PadLeft(4, '0')
let list = Seq.init max (fun _ -> r.Next (1, max)) 
           |> Seq.map az

printfn "%A" list
                

Lösung von: Vural Acar ()

temp_list = []
zufall_list = []

//temporäre Liste mit formatierten Strings von 0000 bis 9999 füllen 
for (i in 0 .. 9999){
	temp_list.add(String.format('%04d',i))
}

//temporäre Liste wird durcheinandergewürfelt 
Collections.shuffle(temp_list, new Random())

/*
Es werden, wie in der Aufgabenstellung gefordert, alle Zahlen von 0000 bis 9999
in zufälliger Reihenfolge in eine Liste eingelesen. ;)
*/
temp_list.each{value ->
	zufall_list.add(value)
}
	
println zufall_list
                

Lösung von: Name nicht veröffentlicht

import random

array = 10000*['0']

for i in range(1,10000):
    rand = random.randint(1,9999)
    while array[rand] != '0':
        rand += 1
        if rand > 9999:
            rand = 0
    array[rand] = "%04d"%(i)

for j in range(len(array)):
    print(j, array[j])
                

Lösung von: Name nicht veröffentlicht

Module Module1

    Sub Main()
        Dim arr As New List(Of String)
        Dim rand As New Random()

        While arr.Count < 10000
            Dim rndNum As Integer = rand.Next(0, 10000)

            If Not arr.Contains(rndNum) Then
                arr.Add(rndNum.ToString().PadLeft(4, "0"))
                Console.WriteLine(rndNum.ToString().PadLeft(4, "0"))
            End If
        End While

        Console.ReadLine()
    End Sub

End Module
                

Lösung von: Elias Zech (Optics Balzers)

// NET Core 3.x

using System;
using System.Linq;

namespace CS_Aufgabe_Zufallszahlen
{
    class Program
    {
        static void Main(string[] args)
        {
            Enumerable.Range(0, 10000).OrderBy(x => Guid.NewGuid()).ToList().ForEach(x => Console.WriteLine($"{x:0000}"));
        }
    }
}
                

Lösung von: Jens Kelm (@JKooP)

import random
print(list(map(lambda x: f"{x:04}", random.sample(range(10000), 10000))))
                

Lösung von: Name nicht veröffentlicht

// Achtung: F#
// NET 6.x |> F# 6.0 |> VS-2022

seq{ 0 .. 9999 } |> Seq.sortBy(fun _ -> System.Random().Next()) |> Seq.iter (printfn "%04i")
                

Lösung von: Jens Kelm (@JKooP)

// C++ 14 | VS-2022

#include <iostream>
#include <vector>
#include <algorithm>
#include <random>

int main() {
	std::vector<int> v{};
	for (auto i{ 0 }; i < 10'000; i++) v.push_back(i);
	std::shuffle(v.begin(), v.end(), std::random_device());
	for (const auto& i : v) printf("%04i\n", i);
}
                

Lösung von: Jens Kelm (@JKooP)

' VBA
' Anpassen des Zahlenbreichs möglich
' Achtung: Debug.Print benötigt viel Zeit bei 9999 Zahlen

Const LOWER_LIMIT% = 1
Const UPPER_LIMIT% = 9999

Sub ShuffleArray(ByRef arr, Optional runs% = 1)
    Randomize
    For k% = 1 To runs
        For i% = LBound(arr) To UBound(arr)
            r% = CInt(((UBound(arr) - i) * Rnd) + 1)
            t% = arr(i)
            arr(i) = arr(r)
            arr(r) = t
        Next
    Next
End Sub

Sub PrintArray(arr)
    l% = WorksheetFunction.Log10(UPPER_LIMIT)
    For k% = LBound(arr) To UBound(arr)
        Debug.Print Right((String(l - 1, "0") & arr(k)), l)
    Next
End Sub

Sub Main()
    Dim arr(1 To UPPER_LIMIT - LOWER_LIMIT + 1)
    k% = LOWER_LIMIT
    For i% = LBound(arr) To UBound(arr)
        arr(i) = k
        k = k + 1
    Next
    ShuffleArray arr, 3
    PrintArray arr
End Sub
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022

#include <iostream>
#include <numeric>
#include <random>
#include <format>

int main() {
    std::vector<int>v(10'000);
    std::iota(v.begin(), v.end(), 0);
    std::shuffle(v.begin(), v.end(), std::random_device());
    for (const auto& e : v)
        std::cout << std::format("{:04}\n", e);
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Liste mit den Zahlen 0-15

['0009', '0012', '0008', '0006', '0003', '0000', '0001', '0010', '0004', '0007', '0011', '0013', '0005', '0015', '0014', '0002']

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.25
Schwierigkeit: Mittel
Webcode: 82qq-hxu9
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen