butterblume
Goto Top

Zufallszahlen - Zahlenlotto in C

9.Juni 2007 00:30

Ich habe jetzt das Programm fertig:
//Programm wurde von Kristina Stepanova erstellt//
//Zahlenlotto, 6 Zufallszahlen werden ausgegeben//

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>

void zufallszahl(int max);

int main(void)
{	int n;
	printf ("Modul 118: Zahlenlotto\n");  
	printf ("______________________\n\n");  
    printf("Bitte Maximum groesser als 6 eingeben: ");  
	scanf("%d", &n);  

	printf("\nEingabe: %d\n", n);  
        if (n <= 6) {
   	         printf("\nEingabe zu klein.\n");  
  	 	system("pause");  
                return 3;
	}
	zufallszahl(n);
        system("pause");  
	return 0;
} 

void zufallszahl(int max)
{
	int i, zufall, j, found;
	int resultat[6], geworfen[6];
		
	for (i = 0; i < 6; i++)
		resultat[i] = 0;
	for (i = 0; i < 6; i++)
    {
		srand(time(NULL) + i);
		geworfen[i] = zufall = rand() % max+1;
		for(j = 0, found = 0; j < 6; j++)
        {
			if (zufall == geworfen[j])
				found++;
		}
		if (found > 1)
			i--;
		else
			resultat[i] = zufall;
	}
		
	printf("\nZufallszahlen:\n\n");  
	for (i = 0; i < 6; i++) 
		printf("%d ", resultat[i]);  
	printf("\n\n");  
}

Es läuft auch, alles supää...ich habe noch Struktogramm (ich weiss man sollte es vorher und nicht nachher machen) zu diesem Programm geschrieben und bin mir bei einigen Sachen nicht ganz sicher (vorallem wegen der Funktion).
Ich habe 2 Struktogrämme gemacht, weiss eben nicht, ob man in einem das machen kann. Würde mich sehr freuen, wenn mir jemand helfen könnte.

Liebe Grüsse, Kristina

main:
53694aeda4162f59a9425f02ad2e7852-main

zufallszahl:
154039ea0adc1fbca6ed539900f5abc6-zufallszahl



Hallo Miteinander, ich möchte ein Programm schreiben, in dem man die höchste Zahl selber eingeben kann und 6 Zufallszahlen sollen dabei ausgegeben. Die vorgeschlagene Zahl sollte nicht zweites mal vorkommen.
Dies sollte ich mit einer Funktion machen.

Name der Funktion: Zufallszahl
Eingabe: n /*höchste zu "würfelnde Zahl*/
Ausgabe Resultat /*Array für 6 Zahlen*/

Die Zufallszahl sollte mit:

srand(time(0));
z=rand();

erzeugt werden.

Ich habe nicht wirklich eine Ahnung, wie ich das genau programmieren soll. Ich habe aber einfach ein Programm wie eine Skizze geschrieben, das nicht läuft.
Ich hoffe sehr, dass mir jemand helfen könnte.

Liebe Grüsse, Kristina

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int n; Resultat [7];

int main() {

printf ("\nModul 118: Zahlenlotto");  
printf ("\n\nBitte hoechste zu wuerfelnde Zahl n eingeben: ");  
scanf ("%i", &n);  
printf ("\n\nEingegeben: %i", n);  
Zahlenlotto(&Resultat);
printf ("6 Zufallszahlen: %u", Resultat);  

system ("PAUSE");  
return 0;

}

int Zufahlszahl(int n, int Resultat) {
    
    srand((unsigned)time(0)); 
                              for (int x=1, x<=6; x++) {
                                      int z=rand()%n;  
                                      printf ("%u", z);  
                                      }
}

EDIT

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

int n, zufallszahl;
int resultat[6];


printf ("\nModul 118: Zahlenlotto");  
printf ("\n\nBitte hoechste zu wuerfelnde Zahl n eingeben: ");  
scanf ("%i", &n);  

zufallszahl(resultat);
resultat[x]=z;

printf ("6 Zufallszahlen: %u", resultat);  

system ("PAUSE");  
return 0;

}

void zufallszahl(int* n, int* resultat) {
    
    srand((unsigned)time(0)); 
                              do {
                                 int z=rand()*n;  
                                 printf ("%u", z);  
                                 }
                              while (x<6);
}

Content-Key: 60863

Url: https://administrator.de/contentid/60863

Printed on: April 23, 2024 at 08:04 o'clock

Member: filippg
filippg Jun 08, 2007 at 10:21:43 (UTC)
Goto Top
Hallo,

nur so ein paar Anmerkungen dazu:

1. Resultat[7] scheint mir für 6 Zahlen zuviel zu sein...
2. in deiner Methode/Funktion Zufallszahl: die soll einen int returnen. Ich sehe aber keine return-Anweisung. Warum nicht void als Rückgabetyp?
3. Geschmacksfrage: die for-Schleife läuft von 1 bis 6. Üblich ist eigentlich von 0 bis x < 6 (also bis 5), da eigentlich immer ab 0 gezählt wird (z.B. auch beim Array)
4. Eine for-Schleife ist eher ungeeignet. Du solltest innerhalb der Schleife noch überprüfen, ob die Zahl schonmal getippt wurde, dann kann es sein, dass du mehr als 6 Durchläufe für 6 Zahlen brauchst. Natürlich könntest du, wenn eine bereits getippte Zahl nochmal hast einfach x dekrementieren, aber das ist unsauber. Besser: eine do-while-Schleife, mit while(x < 6), x wird vor Eintritt in die Schleife auf 0 gesetzt und innerhalb der Schleife bei jeder akzeptierten Zahl inkrementiert.
5. du gibst in der for-Schleife jede gefundene Zahl sofort aus. Andererseits hast du in Main auch noch eine Ausgabe "printf ("6 Zufallszahlen: %u", Resultat);". Soll das die Ausgabe sein? Dann solltest du die Werte auch in dem Array Resutat ablegen, also "Resultat[x] = z".
6. Du hast in main() einen Funktionsaufruf "Zahlenlotto(&Resultat);". Soll das die Methode "Zufahlszahl" sein (btw: Zufall schreibt man anders)? Zufahlszahl hat nicht nur einen anderen Namen, sondern eine andere Signatur, erwartet nämlich zwei Parameter. Daneben soll "Resultat" ein int sein, ist aber ja eigentlich ein int*. Ob ein C++-Compiler das schluckt weiß ich nicht mehr, ein int* ist ja formal gesehen auch nur ein int. Ebenso bin ich mir nicht sicher, ob du bei der Übergabe &Resultat oder nur Resultat angeben musst.
7. Daneben sollest du nochmal in der Doku schauen, in welchem Bereich die von rand() gelieferten Zahlen liegen. Meist sind das Zahlen im Bereich von 0 bis 1, damit nützt dir dein %n natürlich nicht viel (besser wäre ein *n).
8. Warum sind n und Resultat eigentlich globale Variablen? Die kannst du doch auch lokal in main() halten. Und warum wird Resultat groß geschrieben, alle anderen Variablen aber klein?

Filipp
Member: Butterblume
Butterblume Jun 08, 2007 at 12:04:54 (UTC)
Goto Top
Danke für deine grosse Hilfe, ich weiss zwar nicht, wie man die Fuktion genau benutzt oder besser gesagt einbinden kann. Das würde ich sehr gern wissen.
LG, Kristy