Lotto-Quicktipp mit Array

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Lotto-Quicktipp mit Array

Beitrag von DerSamu » Sa Dez 23, 2017 10:38 pm

Hey und zwar habe ich von der Schule aus folgende Aufgabe bekommen:

Realisieren Sie mit Hilfe des Zufallsgenerators ein Programm, das Quicktipps für das österreichische Lotto 6 aus 45 erzeugt. Dabei sind sechs Zahlen zwischen 1 und 45 zu erzeugen.
Die Übung ist so zu realisieren, dass für die gezogenen Lottoziffern ein Array (int[] lottoNumbers = new int[6]) zu verwenden ist.
Es muss natürlich auch verhindert werden, dass Zahlen mehrfach in einem Quicktipp vorkommen. Hinweis: Initialisieren Sie den Zufallszahlengenerator mit 0 (Random random = new Random(0)). Dabei kommt es auf jeden Fall zu doppelten Lottozahlen.
Falsch: 33 37 35 26 10 26
Richtig: 33 37 35 26 10 41


Zuallererst: Mein Lehrer hat gesagt, die äußerste Schleife soll eine For-Schleife sein.
Mein Problem ist jetzt, herauszufinden, wann eine Zahl doppelt ist. Weiß jemand wie ich das machen kann(am besten mit einer While/Do-While und einem oder mehr if-Abfragen)

mfG Samu :)
lernender Programmierer, hauptsächlich C# und Java

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Lotto-Quicktipp mit Array

Beitrag von Xin » So Dez 24, 2017 12:24 am

DerSamu hat geschrieben:Zuallererst: Mein Lehrer hat gesagt, die äußerste Schleife soll eine For-Schleife sein.
Mein Problem ist jetzt, herauszufinden, wann eine Zahl doppelt ist. Weiß jemand wie ich das machen kann(am besten mit einer While/Do-While und einem oder mehr if-Abfragen)
Du kannst ja sicher schon Unterprogramme schreiben, oder?
Also Funktionen, denen Du Parameter übergibst und dir dann Fragen beantworten.

Ich würde eine Methode schreiben, die die Frage beantwortet, ob eine Zahl bereits in der Liste ist und dann ein true oder false zurückliefert. Wenn Du also eine neue Zahl in die Liste einfügen willst, holst Du Dir eine Zufallszahl im gewünschten Bereich und fragst die Methode, ob diese Zahl schon in der Liste ist. Ist die Zahl schon vorhanden, fügst Du sie nicht ein.

Du kannst auch eine GetTip()-Methode schreiben, die eine Zahl zurück liefert, die noch nicht in der Tip-Liste ist.
Die kannst Du dann 6x aufrufen und fertig ist der Tipp.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Re: Lotto-Quicktipp mit Array

Beitrag von DerSamu » So Dez 24, 2017 11:28 am

Du kannst ja sicher schon Unterprogramme schreiben, oder?
Nein, Unterprogramme haben wir noch nicht gelernt und dürfen wir auch noch nicht verwenden. Mein Lehrer hat gesagt dass wir wahrscheinlich zwischen 2 und 4 Schleifen benötigen werden. Und hier ist das Problem. Denn meine Lösung wäre folgende:

Code: Alles auswählen

int[] draggedNumbers = new int[6];
            int subNumber=0;
            
            int count;
            Random random = new Random(0);
            Console.Write("Quicktipp: ");


            for (int i = 0; i < draggedNumbers.Length; i++)
            {
                subNumber = random.Next(1, 46);
                count = 0;
                while (count < i && subNumber == draggedNumbers[i])
                {
                    subNumber = random.Next(1, 46);
                    count++;
                }
                draggedNumbers[i] = subNumber;
                Console.Write($" {draggedNumbers[i]}");
            }

            Console.WriteLine();
            Console.Write("Zum Beenden bitte Eingabetaste drücken...");
            Console.ReadLine();
Dabei kommt aber in der Ausgabe zweimal die Zahl 26, also die Überprüfung ob die Zahl doppelt ist hat nicht funktioniert. Wisst ihr/du vielleicht wie ich meinen Lösungsversuch besser/richtig machen könnte?
lernender Programmierer, hauptsächlich C# und Java

MGFCF
Beiträge: 1
Registriert: So Dez 24, 2017 11:33 am

Re: Lotto-Quicktipp mit Array

Beitrag von MGFCF » So Dez 24, 2017 11:50 am

Ich habe deinen Code mal etwas umgeräumt.

Mit dem äußersten for-Loop gehen wir durch jeden freien Platz in unserem draggedNumbers-Array.
Wie lassen also für jedes i eine neue zufällige Zahl generieren und möchten dann überprüfen, ob die Nummer bereits gezogen wurde.

Dafür lassen wir einen weiteren for-Loop durch alle bisherigen Zahlen laufen. Also von 0 bis i, denn bei i sind wir ja gerade.
Mithilfe iner if-Bedingung prüfen wir dann bei jeder Zahl, ob diese mit der neuen übereinstimmt.

Wenn das der Fall ist, dann setzen wir die vorher initialisierte Variable alreadyTaken auf true und beenden mithilfe des break-Befehls die innere for-Schleife.
Dann kommt das Ende unseres do-while-Loops, welcher ggf. wieder von vorne startet, wenn alreadyTaken den Wert true hat.

Wenn alreadyTaken nicht true ist, also false, dann fügen wir die Nummer in das draggedNumbers-Array ein und geben diese in der Konsole aus.

Code: Alles auswählen

int[] draggedNumbers = new int[6];
Random random = new Random(0);
bool alreadyTaken;
int subNumber;

Console.Write("Quicktipp:");

for (int i = 0; i < draggedNumbers.Length; i++) {
	do {
		subNumber = random.Next(1, 46);

		alreadyTaken = false;
		for(int x = 0; x < i; x++)
			if(draggedNumbers[x] == subNumber) {
				alreadyTaken = true;
				break;
			}
	} while (alreadyTaken);

	draggedNumbers[i] = subNumber;
	Console.Write(" {0}", subNumber);
}

Console.Write("\nZum Beenden bitte Eingabetaste drücken...");
Console.ReadLine();
Habe den Code bei mir getestet und funktioniert.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Lotto-Quicktipp mit Array

Beitrag von Xin » So Dez 24, 2017 11:54 am

Wenn Du eine Nummer bei i neu belegst, musst Du doch auch neu gucken, ob diese Nummer bei i=0, i=1... bis i = i_ausgetauscht -1 nicht nochmal vorkommt.
Falls ja... muss Du subnumber erneut ändern.

Du musst eine Schleife aufbauen, die besagte Frage beantwortet: Ist im vorhandenen Array diese Zahl schon drin: Ja oder Nein. Darum bastelst Du eine Schleife: Solange die Zufallszahl schon drin ist, nehme eine neue.
Fällst Du aus dieser Schleife raus, hast Du eine Zahl, die noch nicht im Array ist. Und die kannst Du hinzufügen.

Ist es nicht 6 aus 49? ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Lotto-Quicktipp mit Array

Beitrag von Xin » So Dez 24, 2017 11:58 am

@DerSamu: Ich empfehle Dir Dein Programm erstmal selbst ans laufen zu bekommen.
MGFCF hat geschrieben:Ich habe deinen Code mal etwas umgeräumt.
Habe den Code bei mir getestet und funktioniert.
Danke für Deinen Beitrag :-)

Ich poste aber keinen fertigen Code aus zwei Gründen:
Erstens: Er lernt nicht dabei seinen Code zu korrigieren, wenn er Dein Beispiel jetzt kopiert.
Zweitens: Es holt in der Leute her, die fertigen Code haben wollen und nur selten Leute, die fertigen Code posten wollen. ;)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Re: Lotto-Quicktipp mit Array

Beitrag von DerSamu » So Dez 24, 2017 1:45 pm

Okay danke für den Code, aber ich habe es jetzt ein bisschen anders gestaltet. Statt der zweiten for Schleife habe ich einfach eine while genommen und einen counter eingebaut, welchen ich vor der while(bzw bei dir for) Schleife auf 0 resette. So brauche ich dann auch keinen break, weil mein Lehrer das(warum auch immer) nicht so gerne sieht. Danke nochmal für alles, endlich habe ich es verstanden! :)
lernender Programmierer, hauptsächlich C# und Java

Antworten