Würfelprogramm 6 aus 45

blaa

Grünschnabel
Also wir sollen in der Schule ein Programm machen das 6 Zahlen von 45 ausgibt, wobei der Benutzer nur die anzahl an Würfen angeben muss (zb.: 6 dann werden 6 mal 6 Zahlen gewürfelt und ausgegeben)
das wäre an und fürsich nicht schwer, wenn wir nicht noch dazuprogramieren müssten, das das Programm nie eine Zahl doppelt pro 6er Reihe ausgibt....

Wir sollen dabei nur 1 dimensionale Arrays, if-else, do-while, for und evtl switch verwenden.....
ich habe schon etliche Versuche gewagt, jedoch alle mit misserfolg... hier ein Beispiel:
Code:
#pragma hdrstop
#include <condefs.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>

int i,j,durchg, x, a,weiter;
int z[5];


//---------------------------------------------------------------------------
int compare()
{
if(x=2)
 {
  if(z[1]!=z[0]) weiter=1;
 }
if(x=3)
 {
  if(z[2]!=z[1]) weiter=1;
 }
if(x=4)
 {
  if(z[3]!=z[2]) weiter=1;
 }
if(x=5)
 {
  if(z[4]!=z[3]) weiter=1;
 }
if(x=6)
 {
  if(z[5]!=z[4]) weiter=1;
 }
}


#pragma argsused
int main(int argc, char **argv)
{x=0;
 a=0;
 cout<<"Bla eingebn"<<endl;
 cin>>durchg;
 cout<<endl;
 for(i=1;i<=durchg;i++)
  {

   for(j=0;j<=5;j++)
    {
     for(;;)
      {
       x++;
       a=rand() %45+1;
       z[j]=a;
       weiter=0;
       compare();
       if(weiter=1) break;
       }
      cout<<z[j]<<"  ";
      }

      cout<<endl;
   }
     cout<<weiter;
     getch();
        return 0;
}

Danke für die Antworten schon im Vorraus
 
Also ich hab mir den Code mal angesehen und festgestellt:

Du benutzt die if - Anweisung nicht ganz richtig if(x=3) weist x den Wert 3 zu und die Auswertung ist dann immer wahr, also wird die Anweisung immer ausgeführt.

Dann hab ich mal noch srand() initialisiert, weil du ja sicher nicht immer die gleichen Zahlen haben willst.

Mit condefs.h konnte ich jetzt nichts anfangen:-)

Das Array z[5] war eins zu klein, weil du ja 6 Zahlen speichern willst und das Array nur von 0-4 geht.


Code:
for(;;)
{
x++;
a=rand() %45+1;
z[j]=a;
weiter=0;
compare();
if(weiter=1) break;
}


Ich glaub in dem Code Stück ist auch nen logischer Fehler.
x wird ja erhöht auf 1 und z[0] wird initialisiert. Aber da weiter ==0 wird x nochmal erhöht auf 2 also und z[0] bekommt nen neuen Wert und dann trifft der if vergleich
if (x==2) aus compare zu und vergleicht das uninitialisierte z[1] mit z[0].

Ich glaub das war alles kann sein das ich was vergessen habe zu schreiben.

Hab mal den etwas geänderten Code ich glaub das geht so.

Code:
//#pragma hdrstop
//#include <condefs.h>
#include <conio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;


int i,j,durchg, x, a,weiter;
int z[6];


//---------------------------------------------------------------------------
void compare()
{

	if(x==2)
		if(z[1]!=z[0]) weiter=1;
	


	if(x==3)
		if(z[2]!=z[1]) weiter=1;


	if(x==4)
		if(z[3]!=z[2]) weiter=1;


	if(x==5)
		if(z[4]!=z[3]) weiter=1;


	if(x==6)
		if(z[5]!=z[4]) weiter=1;

}


//#pragma argsused
int main()
{
	srand(time(NULL));
	x=0;
	a=0;

	cout<<"Bla eingebn"<<endl;
	cin>>durchg;
	cout<<endl;


	for(i=1;i<=durchg;i++)
	{

		for(j=0;j<=5;j++)
		{
			x++;
				for(;;)
				{

				a=rand() %45+1;
				z[j]=a;

				compare();
				if (x==1) weiter =1;
				if(weiter==1) break;
				}
			weiter=0;
			cout<<z[j]<<" ";
		}
	x=0;
	cout<<endl;
	}

getch();
return 0;
}
 
Also danke für die ausgibige analyse ;)
Ich habe es getestet und es funktioniert nur noch n´ paar fragen:

1) also eines meiner vorprogramme hat nach eingabe von bla ( = durchgänge) nix mehr ausgegeben, könnte es darin gelegen haben, dass beim randomize immer die selben werte gekommen wären

2)Wozu dient das time(NULL) in deinem Programm Ich habe diesen Befehl noch nie gehört ^^

Ich würde zwar gern den alten Code posten nur ist der PC auf dem dieser abgespeichert war kaputt..... wird wohl noch ne woche dauern bis ich den posten kann, würd mich trotzdem interessieren ob dieser "richtig" war....

trotzdem nochmal vielen dank
 
Das time(NULL) dient dazu, dass du auch immer unterschiedliche Zufallszahlen bekommst.
Und da der Computer ja keine 'richtigen' Zufallszahlen berechnen kann musst du nen Startwert setzen. Und hier wird das eben mit time(NULL) gemacht.
Die Funktion gibt so weit ich weiss die vergangenen Sekunden seit 1.1 1970
zurück.
 

Neue Beiträge

Zurück