Lottosimulation

Hier meine Lösung:


Code:
#include <iostream>

using namespace std;

unsigned int leseInteger(void);
void eingabe(unsigned int *);
void generate(unsigned int *);
bool vergleich(unsigned int *, unsigned int *);

int main(void) {
    srand(time(NULL));
    unsigned int zahlen[6], lotto_zahlen[6];
    long int durchlaeufe = 0;
    bool volltreffer;
    cout << "Lotto Simulation v1.0" << endl << endl;
    eingabe(zahlen);
    do {
        generate(lotto_zahlen);
        volltreffer = vergleich(zahlen, lotto_zahlen);
        durchlaeufe++;
        if(durchlaeufe % 1000000 == 0) {
            cout << endl << "Nach " << durchlaeufe/1000000 << " Millionen Durchlaeufen keine Uebereinstimmung" << endl
                 << "aktuelle Zahlen: " << lotto_zahlen[0] << "  " << lotto_zahlen[1] << "  " << lotto_zahlen[2] << "  " << lotto_zahlen[3] << "  " << lotto_zahlen[4] << "  " << lotto_zahlen[5];
        }
    } while(!volltreffer);
    cout << endl << endl << "Nach " << durchlaeufe << " Durchlaeufen gab es einen Sechser" << endl << "aktuelle Zahlen: " << lotto_zahlen[0] << "  " << lotto_zahlen[1] << "  " << lotto_zahlen[2] << "  " << lotto_zahlen[3] << "  " << lotto_zahlen[4] << "  " << lotto_zahlen[5]
         << endl << "Erfolgschancen:   " <<  (1.0f/durchlaeufe * 100.0) << " %" << endl << endl;
    system("pause");
    return 0;
}

bool vergleich(unsigned int *zahlen, unsigned int *lotto_zahlen) {
    unsigned int treffer = 0;
    for(int i=0; i<6; i++) {
        for(int j=0; j<6; j++) {
            if(*(zahlen+i) == *(lotto_zahlen+j)) {
                treffer++;
                break;
            }
        }
    }
    if(treffer == 6) {
        return true;
    }
    return false;
}

void generate(unsigned int *lotto_zahlen) {
    for(int b=0; b<6;b++) {
        *(lotto_zahlen+b) = 0;
    }
    unsigned int gen_zahl;
    bool gen_ok;
    for(int i=0; i<6; i++) {
        do {
            gen_ok = true;
            gen_zahl = (1+rand()%49);
            for(int j=0; j<i; j++) {
                if(*(lotto_zahlen+j) == gen_zahl) {
                    gen_ok = false;
                }
            }
        } while(!gen_ok);
        *(lotto_zahlen+i) = gen_zahl;
    }
}

void eingabe(unsigned int *zahlen) {
    unsigned int zahl_eingabe;
    bool eingabe_ok;
    for(int i=0; i<6; i++) {
        do {
            eingabe_ok = true;
            cout << i+1 << "te Zahl: ";
            zahl_eingabe = leseInteger();
            if((zahl_eingabe >= 50) || (zahl_eingabe <= 0)) {
                eingabe_ok = false;
                cout << "Die Zahl muss zwischen 0 und 50 sein\n";
            }
            for(int j=0; j<i; j++) {
                if(*(zahlen+j) == zahl_eingabe) {
                    eingabe_ok = false;
                    cout << "Diese Zahl gab es bereits\n";
                }
            }
        } while(!eingabe_ok);
        *(zahlen+i) = zahl_eingabe;
    }
}

unsigned int leseInteger(void) {
     unsigned int wert;
     cin >> wert;
     while(cin.fail()) {
          cout << "Fehler bei der Eingabe, bitte nochmal: ";
          cin.clear();
          cin.sync();
          cin >> wert;
    }
    cin.clear();
    cin.sync();
    return wert;
}
 
Hier meine Lösung in Ruby:

//edit Gerade in bearbeitung wegen nachfolgenden Posts

//edit 2

hier die berichtigte Lösung:
Code:
puts "\n\nGeben Sie nacheinander 6 Zahlen zwischen 1 und 49 ein:\n\n"
a = []; i = 1; k = 0
while i <= 6
	k = 0
	puts "#{i}. Zahl:"; b = gets.to_i
	a.each { |part|
		if b == part
			k = 1
		end
	}
	if k == 1
		puts "Diese Zahl wurde schon einmal genannt"
	elsif b > 1 && b < 49
		a.push(b); i+= 1
	else
		puts "Diese Zahl liegt nicht im vorgegebenen Zahlenraum"
	end
end
i = 0; j = 1; c = 0; b = []
while a != b
	b = []; j = 1
	while j <= 6
		k = 0; c = (rand(49)+1)
		b.each { |part|
			if part == c
				k = 1
			end
		}
		if k != 1
			b.push(c); j += 1
		end
	end
	puts b.join("\n"); puts "------------"; i += 1
end
puts "Nach #{i} Versuchen hat es geklappt! Gewinnchance: 1/#{i}*100=#{(1/i.to_f)*100}"
Dauert lange, bis 6 richtige herauskommen. Die Zahlenkolonne, die angezeigt wird, sagt nur, dass das Programm läuft, ansonsten würde nichts passieren bis die Lösung gefunden ist, und da weiß man nie, obs noch arbeitet.
 
Ich kenn mich jetzt zwar nicht so mit Ruby aus, aber es sieht aus als ob bei der zufälligen Generierung der Lottozahlen eine Zahl mehrmals vorkommen kann.
Also das zB 1,1,1,4,4,5 eine gültige zufällig generierte Lottozahl ist. Weil es gibt ja keine Überprüfung auf doppelte Zahlen bei der zufälligen Generierung, wie oben wo die Zahlen vom Benutzer eingegeben werde,
 
Hi MrSpider,

du hast natürlich recht, da ist mir wohl ein Fehler unterlaufen. Liegt warscheinlich daran, dass ich das Programm kurz vor dem Aufbruch auf eine spontane LAN-Party geschrieben habe *ausrede*. Ich werde es demnächst mal beheben.
 
Code:
import random

def get_num():
    a = random.randrange(1,49,1)
    if a in zahlen:
        return get_num()
    return a
def fill():
    global zahlen
    for i in range(6):
        zahlen[i] = get_num()

def richtige():
    count = 0
    global uz
    for i in range(6):
        if uz[i] in zahlen:
            count += 1
    return count

zahlen = [0]*6
uz = [0]*6
fill()

for j in range(6):
    n= int(raw_input("Geben sie eine Zahl ein"))
    while n in uz or n < 0 or n > 49:
        n = int(raw_input("Zahl ungueltig"))
    uz[j] = n

print "Die Lottozahlen von heute:"
for l in range(6):
    print zahlen[l]
print "ihr Tipp:"
for m in range(6):
    print uz[m]
print "Sie haben " + str(richtige())  + " Richtige"
raw_input("Es wird berechnet wieviele Versuche sie fuer einen 6er gebraucht haetten. Enter fuer go")
counter = 1
while richtige() <> 6:
    counter += 1
    print counter
    fill()
 
Ich habe mich auch mal dran gesetzt und was erstellt.
Muss dazu sagen das ich noch ziemlicher Anfänger bin und deswegen vielleicht das eine oder andere zu komplizier gemacht habe. (Über Tipps würde ich mich freuen)

Ich frage mich jedoch ob das alles so richtig ist. Bei den Ergebnis wie lange man für 6 Richtige bräuchte kommt bei mir meist irgend was so um die 100000-500000 ich dachte eigentlich man bräuchte mehr Ziehungen bis zu 6 Richtigen ;)

Code:
#pragma once
#include <vector>

class lotto
{
	int wahl[6], ziehung[6], richtige, ben_ziehungen;
	std::vector<int> zahlen;
public:
	lotto();
	int ziehen();
	void simulation();
};

Code:
#include "lotto.h"
#include <iostream>
#include <time.h>

lotto::lotto()
{
	srand( time( NULL ) );

	for( int i = 1; i <= 49; i++)
	{
		zahlen.push_back(i);
	}

	for( int i = 0; i < 6; i++ )
	{
		std::cout << "Bitte " << i+1 << ". Zahl eingeben!" << std::endl;
		std::cin >> wahl[i];
		if( wahl[i] <= 0 || wahl[i] > 49 )
		{
			std::cout << "Ungültige Zahl! Die Eingabe muss zwischen 1 und 49 liegen." << std::endl;
			i--;
			continue;
		}
		for( int j = 0; j < i; j++ )
		{
			if( wahl[i] == wahl[j] )
			{
				std::cout << "Eingegebene Zahl wurde bereits eingegeben!" << std::endl;
				i--;
				break;
			}
		}
	}
}

int lotto::ziehen()
{
	for( int i = 0; i < 6; i++ )
	{
		ziehung[i] = rand() % 49 + 1;
	}

	richtige = 0;
	for( int i = 0; i < 6; i++ )
	{
		
		for( int j = 0; j < 6; j++ )
		{
			if( wahl[i] == ziehung[j] )
			{
				richtige++;
			}
		}
	}
	return(richtige);
}

void lotto::simulation()
{
	ben_ziehungen = 0;
	do
	{
		ziehen();
		ben_ziehungen++;
	}
	while( richtige != 6 );
	std::cout << "Nach " << ben_ziehungen << " Ziehungen hätten sie gewonnen. ;)" << std::endl;
}

Code:
#include <iostream>
#include "lotto.h"

using namespace std;

int main()
{
	lotto test = lotto();
	std::cout << "Sie haben " << test.ziehen() << " Richtige!" << std::endl;
	test.simulation();
	system("Pause");
}
 
Hm, etwas unschön, aber es sollte funktionieren:
Code:
# -*- coding: utf-8 -*-
import random
i=0
zae=0
lz=[]
lze=[]
while i<6:
  z=raw_input("Bitte Zahl eingeben:")
  try:
    z=int(z)
    if int(z) and z not in lz and 0<z<50:
      lz+=[z,]
      i+=1
    elif not int(z):
      print "Bitte eine Zahl eingeben!"
    elif z>1 and z>49:
      print "Zahl nicht im Bereich von 1-49!"
    elif z in lze:
      print "Zahl ist schon vorhanden"
    else:
      print "Du hast einen Fehler provoziert!"
  except:
    print "EINE ZAHL!!!!!!"
lzg=random.sample(xrange(1,49),6)
lz.sort()
lzg.sort()
#print lz
#print lzg
for u in lz:
  if u in lzg:
    lze+=[u,]
print str(len(lze)) + " Zahl(en) stimmen überein"
print "Folgende Zahl(en) stimmen überein:", 
for i in lze:
  print i,
while lz != lzg:
  lzg=random.sample(xrange(1,49),6)
  lzg.sort()
  zae+=1
print "Anzahl der Versuche bis zu den sechs Richtigen:", zae
 
Ada. :)

Ich habe versucht, es einigermaßen schön hinzubekommen. Ich denke, es ist nicht ganz misslungen.

Die Zufallszahlen bei Ada sucken aber auch. Ich habe extra eine kleine Ausgabe am Ende eingebaut. Nach 140 Milliarden Versuchen habe ich auch abgebrochen, ich denke, da kommt nichts mehr.
Für 5 Richtige geht aber noch was: (252624, 94748, 54495, 252521, 15794 <= Sieht nach guten Zahlen aus)
Deshalb habe ich die Kalkulation der Chance auch gelassen, weil es dazu sowieso nie kommt.

Code:
with Ada.Text_IO, Ada.Integer_Text_IO;
with Ada.Numerics.Discrete_Random;

procedure Lotto is

   type Lottoarray is array (1 .. 6) of Positive;
   type Gewinnarray is array (1 .. 6) of Boolean;

   Tipps : Lottoarray;
   Ziehung : Lottoarray;
   Richtige : Gewinnarray;
   Anzahl_Richtige : Natural := 0;
   Neue_Ziehungen : Lottoarray;
   Counter : Natural := 0;

   subtype Rand_Range is Integer range 1 .. 49;
   package RDM is new Ada.Numerics.Discrete_Random (Rand_Range);
   Rdmgen : RDM.Generator;

   function Suche_Richtige
     (Tipps : Lottoarray;
      Ziehung : Lottoarray)
   return Gewinnarray;

   function Suche_Richtige
     (Tipps : Lottoarray; Ziehung : Lottoarray) return Gewinnarray
   is
      Richtige : Gewinnarray := (others => False);
   begin
      for Zaehler1 in Lottoarray'Range loop
         for Zaehler2 in Lottoarray'Range loop
            if Tipps (Zaehler1) = Ziehung (Zaehler2) then
               Richtige (Zaehler2) := True;
            end if;
         end loop;
      end loop;
      return Richtige;
   end Suche_Richtige;

begin

   for Zaehler in Tipps'Range loop
      Ada.Text_IO.Put ("Gib die Zahl Nr. " & Integer'Image (Zaehler) &
        " ein: ");
      Ada.Integer_Text_IO.Get (Tipps (Zaehler));
   end loop;
   Ada.Text_IO.New_Line;
   RDM.Reset (Rdmgen);
   Ziehung := (others => RDM.Random (Rdmgen));

   for Zaehler in Ziehung'Range loop
      Ada.Text_IO.Put ("Ziehung Zahl Nummer" & Integer'Image (Zaehler) &
       ": " & Integer'Image (Ziehung (Zaehler)));
      Ada.Text_IO.New_Line;
   end loop;
   Ada.Text_IO.New_Line;

   Richtige := Suche_Richtige (Tipps, Ziehung);

   for Zaehler in Richtige'Range loop
      if Richtige (Zaehler) then
         Anzahl_Richtige := Anzahl_Richtige + 1;
         Ada.Text_IO.Put ("Richtiger Tipp: " &
           Integer'Image (Ziehung (Zaehler)));
      end if;
   end loop;
   Ada.Text_IO.New_Line;

   Ada.Text_IO.Put ("Du hast" & Integer'Image (Anzahl_Richtige) &
     " Richtige");
   Ada.Text_IO.New_Line;

   while Anzahl_Richtige <= 6 loop
      Neue_Ziehungen := (others => RDM.Random (Rdmgen));
      Anzahl_Richtige := 0;
      Richtige := Suche_Richtige (Tipps, Neue_Ziehungen);
      for Zaehler in Richtige'Range loop
         if Richtige (Zaehler) then
            Anzahl_Richtige := Anzahl_Richtige + 1;
         end if;
      end loop;

      Counter := Counter + 1;
      if Counter mod 10000000 = 0 then
         Ada.Text_IO.Put_Line ("Schon" & Integer'Image (Counter/1000000) &
           " Milliarden Versuche");
      end if;
   end loop;

   Ada.Text_IO.New_Line;
   Ada.Text_IO.Put ("Du hast" & Integer'Image (Counter) &
     " Versuche gebraucht, um 6 Richtige zu bekommen!");
end Lotto;
 
Habe das ganze mal in Perl geschrieben...

time perl random.pl 42 24 5 18 37 9
Run 2, new Max: 1
Run 7, new Max: 3
Run 1965, new Max: 4
Run 39841, new Max: 5
Run 30886889, new Max: 6

Finished after 30886889 Runs

real 7m18.662s
user 6m51.560s
sys 0m2.970s

time perl random.pl 42 24 5 18 37 9
Run 1, new Max: 1
Run 4, new Max: 2
Run 130, new Max: 3
Run 3085, new Max: 4
Run 61583, new Max: 5
Run 13636092, new Max: 6

Finished after 13636092 Runs

real 3m13.131s
user 3m1.370s
sys 0m1.250s


Code:
use strict;

my @zahlen = @ARGV;
if (scalar @zahlen ne 6) { die "Usage $0 1 2 3 4 5 6\n"; }

foreach (@zahlen) {
    if (($_ > 49) || ($_ < 1)) { die "[ $_ ]Zahl muss zwischen 0 - 49 liegen\n"; }
}

my $max_hits = 0;
my $runs = 0;
my $numbers;
while ($max_hits < 6) {
    $runs++;

    $numbers = &create_rnd(); 
#    foreach (keys %$numbers) { print $_."\t"; }
    my $hits = &match($numbers, @zahlen);

    if ($hits > $max_hits) { 
    $max_hits  = $hits;
    print "Run $runs, new Max: $max_hits\n";
    }
}

print "\nFinished after $runs Runs \n";
exit;


sub create_rnd()
{
        my $numbers; 
    my $range = 49;

    my $c_nr = 0;
    while ($c_nr <=  5) {
            my $n = int(rand($range));
        if (defined $numbers->{$n}) { 
#            print "$n Oops gibts schon\n";
            next; 
        } else {
                  $numbers->{$n} = $c_nr;
            $c_nr++;
        }
    }

    return $numbers;
}


sub match()
{
    my $numbers = shift;
    my @mine    = @_;

    my $hits    = 0;

    foreach (@mine) {
    if (defined $numbers->{$_}) { $hits++; }
    }
    return $hits;
}

exit;
 
Java-Versuch

Hey Leute ich bin ganz neu hier und lerne auch erst seit kurzem Programmieren...
Also ich bringe mir Java selbst bei, brauch ich für die Schule und das seit 2 Monaten, wobei ich selten lerne

Also hier mein Versuch das ganze mit Java zu machen, sicherlich ncoh zu umständlich und auch nicht komplett aber ich bin froh das ich es geschafft habe mein 1. Programm in java zu schreiben
:)

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];
		
		System.out.println("Die Lottoziehung ergab folgendes Ergebnis: ");
		for (int i=0; i<6; i++)
		{
			ergebnis[i] = ziehung();
			for (int j=0; j<i; j++)
			{
				if (ergebnis[i]==ergebnis[j] || ergebnis[i]==0)
				{
				i--;
				break;
				}
			}


			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;
	}
	


}

edit: das ist jetzt der entgültige Java-code der denke ich mal so ziemlich alles berücksichtigt was eigentlich aufgabe war
Bin mir nicht sicher ob ich was an der Wahrscheinlichkeit gepfuscht habe?! Ich glaube 1 und 49 sind unwahrscheinlicher als 2-48 kann das sein? (wegen der rundung bekommen sie ja weniger chance )
Kritik Ist SEHR erwünscht;)
PS: hab 5 Stunden gebraucht :P wie gesagt erstes Programm
 
Zuletzt bearbeitet:
verbesserung

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!
 
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.

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... :(
 
Zuletzt bearbeitet:
Zurück
Oben