Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Lottosimulation

Diskussion: Lottosimulation im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige japp ich weiß ich könnte editieren und nicht noch ma antworten. Aber ich habe verflucht lange gebraucht um diesen ...

Antwort
Alt 07.11.10, 03:56   #31 (permalink)
 
Benutzerbild von EgoBolle
 
Registriert seit: 31.10.10
EgoBolle Leistung: Facit NTK
Likes: 0
Exclamation verbesserung

Anzeige

japp ich weiß ich könnte editieren und nicht noch ma antworten.

Aber ich habe verflucht lange gebraucht um diesen Fehler zu finden und vllt gibt es ja noch einen blutigen Anfänger der das liest, und der soll sich diese Zeit sparen
Eentschuldigt meine vollgerümpelte Main, ist spät, ich hab kein bock mehr!
Und mein riesen Problem was eigentlich gar nicht schwer zu lösen war, war in der verschachtelten forschleife und ist gelöst hier ab Zeile 30.


In meinem vorherigen Post gehts net, weil trotzdem, dass eine doppelte zahl erkannt wird wurde sie ausgegeben und danach 1 Lottozahl zu viel gezogen (weil ja i-- und nochmal der schleifendurchlauf)...

Code:
import java.io.*;



public class LottoSimulation
{
	public static void main (String[] args)
	{
		System.out.println("Willkommen bei Lotto Simulation >>6 aus 49<<");

		int tipp[] = new int [6];
		int richtig = 0;             // wird für Übereinstimmung benötigt

		for (int i=0; i<6; i++)
		{
			tipp[i] = gettipp(i);
			for(int j=0; j<i; j++)
			{
				if(tipp[i]==tipp[j]){
				System.out.println("Sie haben diese Zahl bereits getippt!");
				i--;
				break;
				}
			}
		}
		
		int ergebnis[] = new int [6];
		int abbruch=0;
// AB HIER ***************************************************************	
		System.out.println("Die Lottoziehung ergab folgendes Ergebnis: ");
		for (int i=0; i<6; i++)
		{
			ergebnis[i] = ziehung();
			if (ergebnis[i]==0)
			{
			i--;
			continue;
			}
			for (int j=0; j<i; j++)
			{
				if (ergebnis[i]==ergebnis[j] || ergebnis[i]==0)
				{
				i--;
				abbruch=1;
				break;
				}
			}
			if (abbruch==1)
			{
			abbruch=0;
			continue;
			}
			else
			{
			System.out.println(ergebnis[i]);
			}
		}

		// Lottotipp wird auf Übereinstimmung getestet:

		for(int i=0; i<6; i++)
		{
			for(int j=0; j<6; j++)
			{
				if (tipp[i]==ergebnis[j]){
				richtig = richtig + 1;
				}
			}
		}
		
		System.out.println("   Sie haben "+richtig+" richtige!");
		if(richtig >= 3){
		System.out.println("Herzlichen Glückwunsch, Sie hätten gewonnen");
		}else{
		System.out.println("Mein Beileid, Sie hätten nichts gewonnen");
		}

	}

	public static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

	public static int gettipp(int i)
	{
		int a = 0;
		int b = 0;
		double Tipp = 0;
		double tipp = 0;
		while (a==0)
		{
		Tipp = 0;
		System.out.println("Bitte tippen Sie Ihre "+ (i+1) +". Lottozahl: ");
		String number = new String();
		try{
		number = in.readLine();
     		}
      		catch(IOException e)
        	{
        	System.out.println("Fehler");
        	}
		try{
		tipp = Double.valueOf(number).doubleValue();
        	Tipp = tipp;
        	}
        	catch(Exception e)
        	{
        	System.out.println("Fehler! Sie haben keine akzeptable oder eine Komma-Zahl eingegeben");
		continue;
        	}
		
		if (!(1 <= Tipp && Tipp <= 49)) {          // ! heißt nicht
 		System.out.println("Ihre "+ i +". Lottozahl war nicht im Bereich 1-49");
		}
		else{
		a=1;
		}

		
		}
		return (int)tipp;

	}

	public static int ziehung()
	{
		double zufall = 0;
		int x = 0;
		zufall = Math.random()*49;
		zufall = Math.round( zufall );
		x = (int)zufall;
		return x;
	}
	


}
Ach keine Ahnung ich glaube jetzt funktioniert es, ich hoffe mich halbwegs verständlich ausgedrückt zu haben und statt zu spammen vllt jemandem weiter helfen konnte!
__________________
bin neu, unwissend und trampel rum
EgoBolle ist offline   Mit Zitat antworten
Alt 10.11.10, 14:31   #32 (permalink)
 
Registriert seit: 10.11.10
DMRMcK Leistung: Z3
Likes: 0
Standard in VB

hätte man bestimmt auch schöner lösen können (array z.b.) aber es funktiniert und ich hatte keine lust am ende alles nochmal um zu ändern.

VB   
Code:
Module Module1
    Dim z1, z2, z3, z4, z5, z6 As Integer
    Dim l1, l2, l3, l4, l5, l6 As Integer
    Dim versuche As Integer = 0
    Dim getroffen As Integer

    Sub Main()
        Randomize()

        Do
            Console.WriteLine("Zahl 1 eingeben: ")
            z1 = Console.ReadLine
            ZahlZulaessig(z1)
        Loop While z1 < 1 Or z1 > 49

        Do
            Console.WriteLine("Zahl 2 eingeben: ")
            z2 = Console.ReadLine
            ZahlZulaessig(z2)
            If z2 = z1 Then
                Console.WriteLine("Doppelte Zahlen sind nicht erlaubt!")
                Console.WriteLine()
            End If
        Loop While z2 < 1 Or z2 > 49 Or z2 = z1

        Do
            Console.WriteLine("Zahl 3 eingeben: ")
            z3 = Console.ReadLine
            ZahlZulaessig(z3)
            If z3 = z2 Or z3 = z1 Then
                Console.WriteLine("Doppelte Zahlen sind nicht erlaubt!")
                Console.WriteLine()
            End If
        Loop While z3 < 1 Or z3 > 49 Or z3 = z2 Or z3 = z1

        Do
            Console.WriteLine("Zahl 4 eingeben: ")
            z4 = Console.ReadLine
            ZahlZulaessig(z4)
            If z4 = z3 Or z4 = z2 Or z4 = z1 Then
                Console.WriteLine("Doppelte Zahlen sind nicht erlaubt!")
                Console.WriteLine()
            End If
        Loop While z4 < 1 Or z4 > 49 Or z4 = z3 Or z4 = z2 Or z4 = z1

        Do
            Console.WriteLine("Zahl 5 eingeben: ")
            z5 = Console.ReadLine
            ZahlZulaessig(z5)
            If z5 = z4 Or z5 = z3 Or z5 = z2 Or z5 = z1 Then
                Console.WriteLine("Doppelte Zahlen sind nicht erlaubt!")
                Console.WriteLine()
            End If
        Loop While z5 < 1 Or z5 > 49 Or z5 = z4 Or z5 = z3 Or z5 = z2 Or z5 = z1

        Do
            Console.WriteLine("Zahl 6 eingeben: ")
            z6 = Console.ReadLine
            ZahlZulaessig(z6)
            If z6 = z5 Or z6 = z4 Or z6 = z3 Or z6 = z2 Or z6 = z1 Then
                Console.WriteLine("Doppelte Zahlen sind nicht erlaubt!")
                Console.WriteLine()
            End If
        Loop While z6 < 1 Or z6 > 49 Or z6 = z5 Or z6 = z4 Or z6 = z3 Or z6 = z2 Or z6 = z1

        LottoZiehen()

        Console.WriteLine("Ihre Zahlen lauten: " & z1 & " " & z2 & " " & z3 & " " & z4 & " " & z5 & " " & z6)
        Console.WriteLine("Die gezogenen Zahlen lauten: " & l1 & " " & l2 & " " & l3 & " " & l4 & " " & l5 & " " & l6)
        Console.WriteLine()

        If Treffer(z1) Then
            Console.WriteLine("Zahl 1 war richtig getippt: " & z1)
            getroffen += 1
        End If

        If Treffer(z2) Then
            Console.WriteLine("Zahl 2 war richtig getippt: " & z2)
            getroffen += 1
        End If

        If Treffer(z3) Then
            Console.WriteLine("Zahl 3 war richtig getippt: " & z3)
            getroffen += 1
        End If

        If Treffer(z4) Then
            Console.WriteLine("Zahl 4 war richtig getippt: " & z4)
            getroffen += 1
        End If

        If Treffer(z5) Then
            Console.WriteLine("Zahl 5 war richtig getippt: " & z5)
            getroffen += 1
        End If

        If Treffer(z6) Then
            Console.WriteLine("Zahl 6 war richtig getippt: " & z6)
            getroffen += 1
        End If

        Console.WriteLine("Sie hatten " & getroffen & " Richtige.")

        versuche = 1
        Do Until Treffer(z1) And Treffer(z2) And Treffer(z3) And Treffer(z4) And Treffer(z5) And Treffer(z6)
            LottoZiehen()
            versuche += 1
        Loop

        Console.WriteLine("Beim " & versuche & ". Versuch wären es sechs richtige.")
        Console.WriteLine("Das entspricht einer Wahrscheinlichkeit von " & (1.0 / versuche * 100) & "%.")

        Console.ReadLine()

    End Sub

    Public Sub ZahlZulaessig(ByVal zahl As Integer)
        If zahl < 1 Or zahl > 49 Then
            Console.WriteLine("Nur Zahlen zwischen 1 und 49 eingeben!")
            Console.WriteLine()
        End If
    End Sub

    Public Sub LottoZiehen()
        l1 = CInt(Int((49 * Rnd()) + 1))

        Do
            l2 = CInt(Int((49 * Rnd()) + 1))
        Loop While l2 = l1

        Do
            l3 = CInt(Int((49 * Rnd()) + 1))
        Loop While l3 = l2 Or l3 = l1

        Do
            l4 = CInt(Int((49 * Rnd()) + 1))
        Loop While l4 = l3 Or l4 = l2 Or l4 = l1

        Do
            l5 = CInt(Int((49 * Rnd()) + 1))
        Loop While l5 = l4 Or l5 = l3 Or l5 = l2 Or l5 = l1

        Do
            l6 = CInt(Int((49 * Rnd()) + 1))
        Loop While l6 = l5 Or l6 = l4 Or l6 = l3 Or l6 = l2 Or l6 = l1
    End Sub

    Public Function Treffer(ByVal zahl As Integer) As Boolean
        If zahl = l1 Or zahl = l2 Or zahl = l3 Or zahl = l4 Or zahl = l5 Or zahl = l6 Then
            Treffer = True
        Else
            Treffer = False
        End If
    End Function

End Module


edit: entweder doch i-wo ein fehler oder die lotto-gewinn-wahrscheinlichkeit ist noch niedriger als erwartet... nach ca. 50 Mio. durchläufen keine sechs richtigen...

Geändert von DMRMcK (10.11.10 um 15:08 Uhr)
DMRMcK ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Lottosimulation
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61