Bruno Mars Skrevet 12. november 2009 Del Skrevet 12. november 2009 (endret) #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int rekker, i, h; int lottotable[7]; printf("Welcome. Enter how many rows would you'd like: "); scanf("%d", &rekker); for(i=1; i<=rekker; i++) { for(h=1; h<=7; h++) { lottotable[i] = rand() % 33+1; } printf("%d\n", &lottotable[i]); } system("PAUSE"); return 0; } Skal liksom trekke 7 forskjellige tall mellom 1 og 34. Men det jeg får ut er 2686740 og så legger den til 4 for hver rekke. Hva er problemet? Endret 12. november 2009 av mx1000 Lenke til kommentar
SjonkelSID Skrevet 12. november 2009 Del Skrevet 12. november 2009 (endret) printf("%d\n", &lottotable); er feil, & tar adressen. Moduloen din er også litt feil, du vil bare få tall fra og med 1 til og med 33. edit: dessuten har du ikke logikk som sikrer at ikke det samme tallet blir valgt flere ganger, jeg vet ikke om du føler du trenger det. Endret 12. november 2009 av SjonkelSID Lenke til kommentar
Bruno Mars Skrevet 12. november 2009 Forfatter Del Skrevet 12. november 2009 Takker. Fikk det til nå. Riktig kode: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int rekker, i, h; int lottotable[7]; printf("Welcome. Enter how many rows would you'd like: "); scanf("%d", &rekker); for(i=1; i<=rekker; i++) { for(h=1; h<=7; h++) { lottotable[i] = rand() % 33+1; printf("%d ", lottotable[i]); int lottotable = {0}; } printf("\n"); } system("PAUSE"); return 0; } Modulo blir foresten korrekt. For egentlig så går den fra 0 til 33. Men så legger jeg til 1, og da blir det 1 til 34. Men det du nevner til slutt der. Dette skal tilsvare lotto, så den skal ikke få lov til å gjenta like tall i samme rekke. Må jeg da legge til noe kode? Lenke til kommentar
Giddion Skrevet 12. november 2009 Del Skrevet 12. november 2009 <snip>Men det du nevner til slutt der. Dette skal tilsvare lotto, så den skal ikke få lov til å gjenta like tall i samme rekke. Må jeg da legge til noe kode? Ja du må legge til noe ekstra kode. Bare trekk om igjen hvis den ligger i lista. Lenke til kommentar
Bruno Mars Skrevet 12. november 2009 Forfatter Del Skrevet 12. november 2009 How? Prøvde å legge til denne før printf: if(lottotable[0,1,2,3,4,5,6] == lottotable[i]) { lottotable[i] = rand() % 33+1; } ________ Foresten hadde det vært fint om noen kan hjelpe meg å tolke oppgaveen litt. - Dessuten deklarerer vi en tabell x med 7 helltalls-elementer. Tabellen x skal deklareres i main, dvs. ikke global. - Funksjonen int LesInn() som spør brukeren hvor mange lottorader som skal lages og returnerer dette tallet. - Funksjonen void Trekk() som skal fylle tabellen x med 7 ulike tall mellom 1 og 34. - Funksjonen SkrivUt() som skriver ut tabellen x på en linje med tre plasser pr. tall og skifter linje etter det siste tall. - Main() som først initialiserer randomgeneratoren. Deretter kalles LesInn(). Vi går så i løkke like mange ganger som vi skal ha ut LOTTO-rader. Skjønner ikke helt hva som skal hvor. Har begynt slik: #include <stdio.h> #include <stdlib.h> int LesInn() { int rekker; printf("Welcome. Enter how many rows would you'd like: "); scanf("%d", &rekker); return rekker; } void Trekk() { } void Sorter() { } int SkrivUt() { } int main() { int lottotable[7], i, h, innlest = LesInn(); for(i=1; i<=innlest; i++) { for(h=1; h<=7; h++) { lottotable[i] = rand() % 33+1; if(lottotable[0,1,2,3,4,5,6] == lottotable[i]) { lottotable[i] = rand() % 33+1; } printf("%d ", lottotable[i]); int lottotable = {0}; } printf("\n"); } system("PAUSE"); return 0; } Lenke til kommentar
Ueland Skrevet 12. november 2009 Del Skrevet 12. november 2009 Husker jeg feil hvis rand() vil returnere de samme tallene hver gang programmet kjøres når rand() ikke er seedet?(som i dette tilfellet) Lenke til kommentar
Giddion Skrevet 13. november 2009 Del Skrevet 13. november 2009 Husker jeg feil hvis rand() vil returnere de samme tallene hver gang programmet kjøres når rand() ikke er seedet?(som i dette tilfellet) Jeg vet ikke om det er garantert at man får de samme verdiene, men man burde seede som du sier. Bare legg til: srand( time(NULL) ); Lenke til kommentar
Bruno Mars Skrevet 13. november 2009 Forfatter Del Skrevet 13. november 2009 Okey... prøvde å legge til det etter "lottotable = rand() % 33+1;" og da ble ting bare værre. Enda fler tall som gjentok seg per rekke. Lenke til kommentar
Bruno Mars Skrevet 13. november 2009 Forfatter Del Skrevet 13. november 2009 C'mon, you guys. Lenke til kommentar
SjonkelSID Skrevet 13. november 2009 Del Skrevet 13. november 2009 (endret) Du skal bare seede en gang, så gjør det helt først i programmet(som oppgaven sier). Dersom en ikke kaller srand selv er det garantert at en får samme sekvens som om en hadde kalt srand(1). Og moduloen er nok fremdeles litt feil, rand() % 33 vil bare gi tall fra og med 0 til og med 32. Edit: kanskje det blir enklere om du fokuserer mer på å skrive hver enkelt funksjon, f.eks. Trekk(), så kan du konsentrere deg om mindre av gangen. "if(lottotable[0,1,2,3,4,5,6] == lottotable)" f.eks., er ikke riktig. Endret 13. november 2009 av SjonkelSID Lenke til kommentar
Bruno Mars Skrevet 13. november 2009 Forfatter Del Skrevet 13. november 2009 (endret) Da er det spesielt at jeg greier å få 33 og ingen 0'ere. Har dog ikke sett noe 34. Men nå funket iallefall seedingen. Men noen som har en ide om oppgaven som jeg skulle løse, som jeg beskrev over her? Endret 13. november 2009 av mx1000 Lenke til kommentar
Bruno Mars Skrevet 13. november 2009 Forfatter Del Skrevet 13. november 2009 Når jeg skrev 34+1 så ble det rett. Så jeg tok visst feil. Men seesingen funket ikke likevel. Det hender jeg får to like på samme rekke. Skrev srand etter int lottotable[7], i, h, innlest = LesInn();. Lenke til kommentar
SjonkelSID Skrevet 13. november 2009 Del Skrevet 13. november 2009 Det høres ut som en fin plass å sette srand(time(NULL)) på. Men det at du får samme tall flere ganger er et annet problem - den greieste måten å fikse det på er at for hver gang du trekker et tall, sjekke de tallene du har trukket og trekke på nytt dersom du har trukket tallet tidligere(som Giddion foreslo). Lenke til kommentar
Bruno Mars Skrevet 13. november 2009 Forfatter Del Skrevet 13. november 2009 (endret) Jeg prøvde dette uten suksess: if(lottotable[0,1,2,3,4,5,6] = lottotable[i]) { lottotable[i] = rand() % 34+1; } Denne koden kom etter lottotable = rand() % 34+1;, før printf. Endret 13. november 2009 av mx1000 Lenke til kommentar
SjonkelSID Skrevet 13. november 2009 Del Skrevet 13. november 2009 (endret) Ja, jeg så den - prøv for eksempel noe sånt i stedet(pseudokode): for i = 0 til og med 6 do tall = rand()%34 + 1 while( tall finnes fra før i rekka lottotall[0]-lottotall[i-1] ) lottotall[i] = tall endfor edit: la til "for eksempel" fordi det er mange veier til Rom her. Endret 13. november 2009 av SjonkelSID Lenke til kommentar
Bruno Mars Skrevet 13. november 2009 Forfatter Del Skrevet 13. november 2009 (endret) int lottotable[7], i, h, innlest = LesInn(), tall; srand(time(NULL)); for(i=1; i<=innlest; i++) { for(h=1; h<=7; h++) { lottotable[i] = rand() % 34+1; do { tall = rand()%34 + 1; continue; } while( lottotable[0,1,2,3,4,5,6] == lottotable[i]); lottotable[i] = tall; printf("%3d ", lottotable[i]); } printf("\n"); } Har nå denne koden men den henger seg konstant etter 5 rekker. Og får fortsatt like tall. Endret 13. november 2009 av mx1000 Lenke til kommentar
SjonkelSID Skrevet 13. november 2009 Del Skrevet 13. november 2009 Eh, dette uttrykket: lottotable[0,1,2,3,4,5,6] == lottotable); fører ikke til Rom, det fører mer ut på bærtur for å si det sånn. Du kan f.eks. bruke std::find i stedet, eller skrive en liten funksjon som gjør denne testen for deg. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå