Autor Thema: Übung: Lotto  (Gelesen 4634 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

HamSTer

  • Gast
Übung: Lotto
« am: Di 21.05.2013, 19:18:52 »
Ich hab mich mal an Lotto versucht (nicht real, da gewinnen eh nur die anderen). Vielleicht mag es ja wer mal probieren?
Für jeden Millionengewinn spenden wir ne halbe Mille dem Forum hier, oder ??

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

#define DEBUG 1

int main(void){
uint16_t maxzahlen=49, maxziehen=6, zusatzzahl=1;
uint16_t i, j, n, schondrin=0;
uint16_t *zahlen=NULL;
system("clear");
printf(" L O T T O Z I E H U N G \n");
printf("- H a m S T e r - a r t - \n\n");
do{
printf("Zahlenmenge? (49?): ");
scanf("%hu",&maxzahlen);
}while(maxzahlen < 1);
do{
printf("Anzahl Zahlen zu ziehen? (6?): ");
scanf("%hu",&maxziehen);
}while((maxziehen > maxzahlen));
zahlen=malloc((maxziehen+1)*(sizeof(uint16_t)));
printf("Zusatzzahl ziehen? (1|0): ");
scanf("%hu",&zusatzzahl);
srand(time(NULL));
for(i=0;i<maxziehen;i++){
do{
n=(rand() % maxzahlen)+1;
schondrin=0;
for(j=0;j!=i;j++){
if(zahlen[j]==n){
schondrin=1;
#if DEBUG
printf("schondrin..");
#endif
}
}
if(!schondrin) zahlen[i]=n;
}while(schondrin);
printf("%hu ",zahlen[i]);
}
if(zusatzzahl){
do{
n=(rand() % maxzahlen)+1;
schondrin=0;
for (j=0;j!=maxziehen;j++){
if(zahlen[j]==n){
schondrin=1;
#if DEBUG
printf("schondrin..");
#endif
}
}
if(!schondrin) zahlen[maxziehen+1]=n;
}while(schondrin);
printf("Zusatzzahl: %hu",zahlen[maxziehen+1]);
}
printf("\n\n");
free(zahlen);
return EXIT_SUCCESS;
}


edit: quelltext korrektur. compilat erneut angehängt.
« Letzte Änderung: So 09.06.2013, 20:19:20 von HamSTer »

HamSTer

  • Gast
Re: Übung: Lotto
« Antwort #1 am: Di 21.05.2013, 19:37:36 »
Anbei noch eine Frage: Wo kann ich nachlesen, welches Format ich benutzen muss bei scanf oder printf für diese uint16_t usw ? Also als Platzhalter.

Offline Arthur

  • Benutzer
  • Beiträge: 10.302
  • Mein Atari erinnert mich an die gute alte Zeit..
Re: Übung: Lotto
« Antwort #2 am: Di 21.05.2013, 20:43:10 »
Hallo HamSTer,

eine gute Idee von Dir... und so nach und nach ein richtiges kleines GEM-Programm daraus entwickeln... und zum Ende hin ein Vergleich wie man sich Arbeit sparen kann bei Verwendung einer GEM-Bibliothek...  träum.

Anbei noch eine Frage: Wo kann ich nachlesen, welches Format ich benutzen muss bei scanf oder printf für diese uint16_t usw ? Also als Platzhalter.

Ich bin kein Programmierer...  aber vielleicht in den Header-Dateien? Ist das eigentlich egal welchen Atari C-Compiler man dafür nimmt?

Offline simonsunnyboy

  • Moderator
  • *****
  • Beiträge: 1.797
  • Rock'n'Roll is the thing - Jerry Lee is the king!
Re: Übung: Lotto
« Antwort #3 am: Di 21.05.2013, 21:49:32 »
Nimm ganz normal %d für Dezimalzahlen und %x für Hexzahlen, da gibt es soweit ich weiss, keine speziellen Platzhalter. Ansonsten lies in einne int ein ein caste auf den nötigen (u)intX_t
Paradize - ST Offline Tournament
Stay cool, stay Atari!
1x2600jr, 1x1040STFm, 1x1040STE 4MB+TOS2.06+SatanDisk, 1xF030 14MB+FPU+NetUS-Bee

HamSTer

  • Gast
Re: Übung: Lotto
« Antwort #4 am: Mi 22.05.2013, 06:13:42 »
Also für %d bekomme ich unter gcc (linux) Warnungen. Nehm ich hingegen m68k-mint-gcc dann wird nicht gemeckert.

Offline m0n0

  • Benutzer
  • Beiträge: 984
Re: Übung: Lotto
« Antwort #5 am: Fr 24.05.2013, 00:17:18 »
Schon mal mit %lu probiert? =)

Offline mfro

  • Benutzer
  • Beiträge: 1.637
Re: Übung: Lotto
« Antwort #6 am: Fr 24.05.2013, 08:08:19 »
Anbei noch eine Frage: Wo kann ich nachlesen, welches Format ich benutzen muss bei scanf oder printf für diese uint16_t usw ? Also als Platzhalter.

Die stdint.h (dort sind die (u)intx_t-Typen definiert) angucken. Daraus kannst Du ableiten was wie auf die C Standardtypen definiert ist.
Wie die Format-Zeichen dazu aussehen, sagt dir die manpage zu printf(). Entweder (auf einer "Fullsize" MiNT-Installation vorhanden oder einfach ergooglen).

Mit der stdint.h und Cross-Compiler muß man aufpassen. Dann muß man dafür sorgen, daß man nur die Datei unter /usr/m68k-atari-mint/include erwischt und nicht die des Hostcompilers unter /usr/include. Die sind völlig unterschiedlich und nur die Atari-Datei kann mit -mshort umgehen.

An den unterschiedlichen Wortlängen für Host- und Crosscompiler liegt auch, daß Du für den selben Code einmal Fehlermeldungen bekommst und einmal nicht: die longs sind unterschiedlich lang.

Gruß,
Markus

And remember: Beethoven wrote his first symphony in C

HamSTer

  • Gast
Re: Übung: Lotto
« Antwort #7 am: Fr 24.05.2013, 16:27:32 »
Ah, danke für den Hinweis. Mit %hu habe ich nun ein Format, welches beide Welten glücklich macht.


HamSTer

  • Gast
Re: Übung: Lotto
« Antwort #8 am: Fr 31.05.2013, 20:05:27 »
Hallo

Mir fällt gerade etwas auf. Mit dem Compilat von PC muss ich bei scanf immer zweimal return drücken bevor die Eingabe akzeptiert wird. Zudem wird dann nicht in die nächste Zeile gesprungen, was natürlich recht blöde aussieht. Was ist da nicht richtig?