Hi,
kennt sich einer von euch ganz zufällig mit C++ Programmierung aus.
Bin grad am programmieren und habe immer den gleichen Problem.
Gruß TheRacer
Druckbare Version
Hi,
kennt sich einer von euch ganz zufällig mit C++ Programmierung aus.
Bin grad am programmieren und habe immer den gleichen Problem.
Gruß TheRacer
Ist nicht gerade meine Stärke, aber versuch's mal... ;)
also.
Ich muss ich "Lottospiel" generieren.
Also 7 Zufallszahlen ziehen. (Superzahl).
Dann darf der Benutzer 7 Zahlen eingeben.
Danach müssen die Zahlen verglichen werden.
Natürlich mir so wenig Aufwand wie möglich.
sonst bräuchte ich 36 "if-schleifen".
Das ganz geht über Arrays. Bin grad am versuchen ob ich gleich die beiden Arrays mit einander vergleichen kann.
Das ist der Code bisher:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int Zufall[6];
int i;
int Tipp[6];
int e;
for(i=0; i<=6; i++)
{
Zufall[i]=rand()%49;
//cout << Zufall[i] << endl;
}
for (e=1; e<=7; e++)
{
cout << "Bitte geben die ihre " << e << ".e Zahl ein:\t";
cin >> Tipp[e-1];
}
fflush(stdin);
getchar();
return 0;
}
Wäre nett wenn du da helfen könntest wie ich die vergleichen kann und dann aufgeben kann das der Benutzer 3 Richtiger oder so hat.
Gruß TheRacer
Hab mal bissl im inet gesucht und bin auf das hier gestoßen:
# include <iostream.h>
# include <math.h>
# include <conio.h>
# include <stdlib.h>
# include <time.h>
//------------------------------------------------------------------------------
//Dekleration
void main (void)
{
int zahl [7];
randomize();
int CountArray [49];
int stat[50];
int ziehungen=0;
for (int i=0; i<50; i++) stat[i]=0;
int max;
int min;
do
{
ziehungen++ ;
for(int i = 0; i<7; i++)
{zahl[i]= rand()I+1;
for ( int j=0;j<i;j++)
{
if(zahl[i]==zahl[j])
{//gleich Zahl
i--;
}
}
}
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<"*********Super Lotto*******"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<"----------------------------"<<endl;
cout<<"-------- ZIEHUNG: "<<ziehungen<<"---------"<<endl;
ziehungen+1;
cout<<"----------------------------"<<endl;
for(int i = 0;i<6;i++){ CountArray[zahl[i]-1]++;
stat [zahl[i]]++;
cout<<(i+1)<<" Zufalszahl ist: "<<zahl[i]<<" "<<endl;}
cout<<"----------------------------"<<endl;
cout<<"Zusatzzahl= "<<zahl[6]<<endl;
cout<<"----------------------------"<<endl;
cout<<"Programm wiederholen?"<<endl<<endl;
cout<<""<<endl;
cout<<endl;
cout<<endl;
} while (getch()!= 'n');
for (int i=1;i<50;i++)
{cout <<i<<"=>" << stat[i]<<endl;
getch();
}
getch();
}
weiss aber nicht obs geht... wie gesagt ist nicht von mir^^
Als erstes: Deine Arrays sind zu klein! Die Zahl in der eckigen Klammer bei der Deklaration muß 7 sein und nicht 6. Läuft Dein Code? Wahrscheinlich nicht, oder? Ich würde einen Programmabbruch beim Füllen des Zufallszahlen-Arrays erwarten.
Ich schreibe Dir jetzt mal nur den Weg auf, ohne den kompletten Code:
Wenn Du das Array mit den Zufallszahlen hast und das Array mit den Zahlen des Users, dann könnte man mit zwei FOR-Schleifen durch die Arrays gehen:
Eigentlich müßte man während der Eingabe aber noch sicher stellen, daß der User nicht zweimal die selbe Zahl eingibt (nach jeder eingegben Zahl das Tipp-Array durchsuchen) und die Zufallszahlengenerator darf natürlich auch nicht (zufällig) zweimal die selbe Zahl genieren und ins Array schreiben. ;)Code:int Richtige = 0;
int i = 0;
int e = 0;
for(i=0; i<7; i++)
{
for(e=0; e<7; e++)
{
if( Zufall[i] == Tipp[e] )
{
Richtige++;
}
}
}
cout << "Sie haben " << Richtige << " Richtige!" << endl;
@Mard994: Dein Code simmuliert nur die Ziehung an sich.
Danke für die Mard.
Das Problem ist das ich morgen eine Arbeit schreibe, wo wir gesagt bekommen haben das Lotto dran kommt und wir das mit Array machen müssen. Mittlerweile hbae ich auch gemerkt das man einen Umweg gehen muss um Arrays mit einander zu vergleichen. Das geht eigentlich garnicht.
Ich muss den Quellcode halt auch verstehen. Sonst kann ich es morgen sowieso nicht umsetzen.
Bin jetzt soweit:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int Zufall[6];
int i;
int Tipp[6];
int e;
int w;
for(i=0; i<=6; i++)
{
Zufall[i]=rand()%49;
cout << Zufall[i] << endl;
}
for (e=1; e<=7; e++)
{
cout << "Bitte geben die ihre " << e << ". Zahl ein:\t";
cin >> Tipp[e-1];
}
fflush(stdin);
getchar();
return 0;
}
Jetzt fehlt nur noch das Vergleichen. Das bekomme ich aber nicht hin. Habe einem Programmierer aus der Firma wo mein Dad schafft das Ding auch mal gemailt. Vielleicht bekommt der was verständliches raus.
Wobei ich es bezweifle.
Das versteht man normal nicht was die programmieren, wo schon 10Jahre dabei sind.
Gruß TheRacer
Edit sagt: Erleuchtung. Vielen danke Oldzitterhand. So verstehe ich das.
Edit hat noch was zu sagen: Das Array mit [6] reicht. Ich brauche ja nur 7 Zahlen. Da das Array ja bei 0 anfängt passt das.
Hab das jetzt alles eingebunden. Den Treffer muss ich auch noch deklarieren und mit 0 initialisieren.
Grad getestet. Geht NICHT.
Es kommt eine Fehlermeldung beim Vergleichen der Arrays:
"if( Zufall[i] == Tipp[e] )"
Da kommt es nicht weider.
Diese Fehlermeldung kommt:
Unbehandelte Ausnahme bei 0x0041435d in Lottoaufgabe_2.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00133000.
Hast du eine Idee was da falsch ist zitterhand???
brauche ich noch eine zusätzliche include Datei ?
Ähm... siehe einen Post über Deinem ;)
*edit*
Achja, noch was... ich glaube Du generierst die Zufallszahlen nicht richtig... das müßte eher
heißen, anstattCode:Zufall[i] = 1+(int) (10.0*rand()/(49+1.0));
Sonst generierst Du Zahlen zwischen 0 und 48.Code:Zufall[i]=rand()%49;
Quelle: In Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 1992 (2nd ed., p. 277))
Das Problem ist trotzdem nicht weg:
Grad getestet. Geht NICHT.
Es kommt eine Fehlermeldung beim Vergleichen der Arrays:
"if( Zufall[i] == Tipp[e] )"
Da kommt es nicht weider.
Diese Fehlermeldung kommt:
Unbehandelte Ausnahme bei 0x0041435d in Lottoaufgabe_2.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00133000.
Eben nicht. Du verwechselst da was. Die Indexierung des Array (also der Zugriff) fängt bei 0 an und endet bei Arraygröße-1. Um dem Array am Anfang aber zu sagen wie große es sein soll, mußt Du es schon mit der wirklichen Größe, die Du haben möchtest, anlegen.Zitat:
Zitat von TheRacer
Ich vermute daher kommt auch
Bitte auch meine Anmerkungen im vorherigen Post beachten. ;)Zitat:
Zitat von TheRacer
habe das jetzt geändert.
Quellcode:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int Richtige = 0;
int Zufall[7];
int Tipp[7];
int e;
int w = 0;
int i;
int h = 0;
for(i=0; i<7; i++)
{
Zufall[i]=rand()%50;
cout << Zufall[i] << endl;
}
for (e=1; e<=7; e++)
{
cout << "Bitte geben die ihre " << e << ". Zahl ein:\t";
cin >> Tipp[e-1];
}
for(w=0; w<7; i++)
{
for(h=0; h<7; h++)
{
if( Zufall[i] == Tipp[e] )
{
Richtige++;
}
}
}
cout << "Sie haben " << Richtige << " Richtige!" << endl;
fflush(stdin);
getchar();
return 0;
}
Ich habe inm den Schleifen immer "<=" genommen. Deshalb hätte es doch auch mit 6 funktionieren können.
Egal. Jetzt habe ich 7.
Das hat mit der Schleife nichts zu tun. Ob jetzt "<=6" oder "<7" ist relativ egal.
Aber das mußt Du dann auch eine Variante durchziehen... das hier ist jetzt falsch:
Du mußte bei 0 anfange und entweder bei '<=6' oder bei '<7' aufhören, aber nicht bei 1 anfangen und bei '<=7' aufhören!Zitat:
Zitat von TheRacer
*edit*
Sorry, habe gerade gesehen, daß Du das beim Einlesen durch dein e-1 wieder 'reparierst'. Aber schön ist anders. ;)
Das liefert Dir 0 bis 49 zurück, das willst Du auch nicht wirklich:
Zitat:
Zitat von TheRacer
den Post habe ich jetzt nicht verstanden.
Oder zumindest nicht so das ich die Fehlermeldung durch das Vergleichen der Arrays weg bekomme.
Was muss ich mit derjetzt machen ?Zitat:
Zitat von TheRacer
for (e=1; e<=7; e++)
Das mit dem "<7" geht jetzt.
Jetzt habe ich in der Schleife:
Zitat:
for (e=0; e<7; e++)
{
cout << "Bitte geben die ihre " << e << ". Zahl ein:\t";
cin >> Tipp[e];
}
Mit dem rand()%50 geht. Der soll mir ja 7 Zahlen in dem Bereich von 0 - 49 generieren. Das funzt auch ohne Probleme
Bekommst Du den Fehler immer noch beim vergleichen des Arrays? :shock:
Hm... ich schau nochmal.
Ja. Bekomme ich immernoch.
Hab mir die Werte wenn ich debug auch mal angeschaut wenn die Fehlermeldung kommt. Bei beiden Arrays steht irgentein Hexcode drin. In den Variablen einmal 3121 und einmal 7.
Das mit dem "e-1" war dafür das nachher in der Ausgabe bei der 1. Zahl zum eingeben:
"Bitte geben sie die 1. Zahl ein:" steht und nicht wie jetzt:
"Bitte geben sie ihre 0. Zahl ein:".
Das ist mir jetzt aber auch egal. Da mache ich einfach in der Ausgabe "e+1" und dann passt das wieder.
Das ist das kleinste Problem.
Das Vergleichen ist viel wichtiger.
Mittlerweile kann ich mir garnicht vorstellen das ich das morgen als Arbeit schreiben muss, da wir so eine komplizierte Aufgabe noch nie gemacht haben.
MAch sie jetzt aber trotzdem fertig.
Wenn wir das morgen doch schreiben hbae ich es.
Du machst mich fertig... nicht böse gemeint. ;)
Falsch:
Zitat:
Zitat von TheRacer
Richtig:
Schau Dir mal Deine IF-Abfrage an und dann schau Dir mein IF an.Code:for(w=0; w<7; i++)
{
for(h=0; h<7; h++)
{
if( Zufall[w] == Tipp[h] )
{
Richtige++;
}
}
}
Die Aufgabe ist zwar schon "etwas" anspruchsvoller, aber nicht vom Programmieren her.
Wie Du siehst braucht man nur IFs und FOR-Schleifen.
bleibe hängen.
Wie soll das gehen. Ich hülle am anfange die Arrays mit der Variablem i und e.
Nachher setzte ich w und h ein.
w und h habe ich ganz oben mit 0 initialisiert.
Dann ist doch klar das alles richtig st.
Es geht trotzdem nicht.
Wenn ich die 7 Zahlen eigegeben habe geht es nicht mehr weiter.
Fehlermeldung kommt jetzt nicht mehr.
Sorry wenn du grad an der Decke hängt wegen mir.
Zitat:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int Richtige = 0;
int Zufall[7];
int Tipp[7];
int e;
int w = 0;
int i;
int h = 0;
for(i=0; i<7; i++)
{
Zufall[i]=rand()%50;
cout << Zufall[i] << endl;
}
for (e=0; e<7; e++)
{
cout << "Bitte geben die ihre " << e << ". Zahl ein:\t";
cin >> Tipp[e];
}
for(w=0; w<7; i++)
{
for(h=0; h<7; h++)
{
if( Zufall[w] == Tipp[h] )
{
Richtige++;
}
}
}
cout << "Sie haben " << Richtige << " Richtige!" << endl;
fflush(stdin);
getchar();
return 0;
}
Da ist noch ein Fehler drinne:
Falsch:
Code:for(w=0; w<7; i++)
Richtig:
Code:for(w=0; w<7; w++)
Mit der falschen Variante hast Du eine schöne Endlosschleife produziert. ;)
Ich würde ich jetzt zu gerne Umarmen.
Es geht :D:D:D:D:D:D:D:D:D:D:D:D
Vielen, vielen Dank.
Morgen gehts ab.
Cool :D
Sag mir bescheid, was bei der Arbeit rausgekommen ist. Viel Glück! :smt023
Gute Nacht....
So. Ich melde mich wieder.
Arbeit ist bombe gelaufen. Wir hatten 60min Zeit. Nach 15min war ich fertig.
Kam genau die Aufgabe dran. Die kann ich mittlerweile auswendig.
Musst dann nur noch die Variablen umschreiben in den Namen der in der Arbeit vorgegeben war und dann das Tipp Array statt mit 7 Zahlen mit 6 füllen.
Die Zufallszahlen blieben bei [7].
Also musst ich nur die Arraygröße umschreiben und die Schleife ein bisschen ändern.
Na, das hört sich ja schon mal gut an... ich will dann die Note wissen. :smt003
Wann gibt's denn Sommerferien? Bei uns in Hessen fangen die heute an.
klar schreib ich dir die Note normal habe ich jetzt meine 2 im Zeugniss sicher. Irgentwas mit 1,... muss da schon kommen sonst bin ich beleidigt.
Wir haben noch bis zum 23.07.08 Schule.
Ferien sind dieses Jahr in BW extrem spät. Ist mir aber relativ. Notoabgabe ist sowieso am 8.07.08 glaub ich und dann geh ich erstmal nur noch jeden 2. Tag in die Schule.
Hab sowieso noch ein paar Fehltage "frei". Die kann ich ja nicht "verfallen" lassen.
Hehehe... so hab ich das auch immer gehalten. :DZitat:
Zitat von TheRacer
gestern Arbeit rausbekommen.
Glatte 1,0.
Fett! :smt003
Herzlichen Glückwunsch! :smt023
Dann kannste ja gechillt in die Sommerferien gehen.
genau es mach ich das.
Theorieprüfung (Auto) gestern auch bestanden. Also die Woche ist echt super gelaufen.