a-beck Skrevet 2. november 2006 Del Skrevet 2. november 2006 (endret) Hei. Sitter å sliter litt med en oppgave jeg har blitt gitt. Oppgaven går ut på å trekke ut , sortere og skrive ut x antall lottorekker.. Har fått 90 % av programmet til å fungere. Dvs den Spør etter hvor mange rekker den skal skrive ut , trekker tallene , og skriver de ut i stigende rekkefølge.. MEN! Tallene går igjen i samme rekke, dvs at tallet 23 kan komme mer en en gang.. Hvordan ungår jeg dette ? trekk-funksjonen går som følger: void trekk() /*trekker 7 tall og legger inn i tabell*/ { int i; for(i=0;i<7;i++) { tall=random(34)+1; x=tall; } } Håper på noen gode tips - Aleksander Endret 3. november 2006 av a-beck Lenke til kommentar
handsape Skrevet 2. november 2006 Del Skrevet 2. november 2006 (endret) Hei. Sitter å sliter litt med en oppgave jeg har blitt gitt. Oppgaven går ut på å trekke ut , sortere og skrive ut x antall lottorekker.. Har fått 90 % av programmet til å fungere. Dvs den Spør etter hvor mange rekker den skal skrive ut , trekker tallene , og skriver de ut i stigende rekkefølge.. MEN! Tallene går igjen i samme rekke, dvs at tallet 23 kan komme mer en en gang.. Hvordan ungår jeg dette ? trekk-funksjonen går som følger: void trekk() /*trekker 7 tall og legger inn i tabell*/ { int i; for(i=0;i<7;i++) { tall=random(34)+1; x=tall; } } Håper på noen gode tips - Aleksander 7203527[/snapback] gjør det enkelt; iterer igjennom arrayet `x' og sjekk om `tall' er der fra før - før du eventuelt legger det til eller forsøker å generere et nytt tilfeldig tall (som er mer unikt) poster gjerne et ex. om du vil, men det er kanskje greit om du forsøker selv? :} Endret 2. november 2006 av handsape Lenke til kommentar
a-beck Skrevet 3. november 2006 Forfatter Del Skrevet 3. november 2006 hadde vært veldig fint om du postet et eksempel så jeg forstod litt mere hva du mente.. hehe. Har kun drevet med dette i 2 mnd tid. Lenke til kommentar
Giddion Skrevet 3. november 2006 Del Skrevet 3. november 2006 hadde vært veldig fint om du postet et eksempel så jeg forstod litt mere hva du mente.. hehe. Har kun drevet med dette i 2 mnd tid. 7209054[/snapback] Mulige handsape forklarte det med litt vanskelige ord. Det du skal er å se om du har tallet fra før av. Så du må loopet gjennom alle tallene du har generert fra før av. Før du ser på koden vil jeg ambefalle deg å prøve selv. Etter det jeg ser fra koden din så har du alle den kunnskapen du trenger, det er bare en loop og en sammenligning og en metode for å starte på nytt. Klikk for å se/fjerne innholdet nedenfor void trekk() /*trekker 7 tall og legger inn i tabell*/ { int i; for(i=0;i<7;i++) { randomtall: tall=random(34)+1; for(int gi=0;gi<7;gi++) { if (tall == x[gi]) //Hmmm har vi dette tallet fra før av? { //ja det hadde vi... vi må laget da et nytt random tall og prøve igjen goto randomtall; } } x[i] = tall; } } lykke til med oppgaven Offtopic. He hey jeg fant et sted der jeg syntes det passet med bruk av goto, skal jeg ta det som bra eller dårlig mon tro Lenke til kommentar
handsape Skrevet 3. november 2006 Del Skrevet 3. november 2006 (endret) Offtopic.He hey jeg fant et sted der jeg syntes det passet med bruk av goto, skal jeg ta det som bra eller dårlig mon tro 7210098[/snapback] `goto' er helt ok så lenge det er lokale hopp IMHO, men her er uansett en versjon uten `goto': http://nostdal.org/~lars/programming/c/lotto.c (bruker litt C99 her forresten) Endret 3. november 2006 av handsape Lenke til kommentar
Øystein T. Skrevet 3. november 2006 Del Skrevet 3. november 2006 (endret) Hei. Sitter å sliter litt med en oppgave jeg har blitt gitt. Oppgaven går ut på å trekke ut , sortere og skrive ut x antall lottorekker.. Har fått 90 % av programmet til å fungere. Dvs den Spør etter hvor mange rekker den skal skrive ut , trekker tallene , og skriver de ut i stigende rekkefølge.. MEN! Tallene går igjen i samme rekke, dvs at tallet 23 kan komme mer en en gang.. Hvordan ungår jeg dette ? trekk-funksjonen går som følger: void trekk() /*trekker 7 tall og legger inn i tabell*/ { int i; for(i=0;i<7;i++) { tall=random(34)+1; x=tall; } } Håper på noen gode tips - Aleksander 7203527[/snapback] Det er mange måter å gjere dette på. Ein måte er vist under: void trekk() /*trekker 7 tall og legger inn i tabell*/ { int i,j; int antallTall = 0; int tallFunnet = 0; for(i=0;i<7;i++) { tall=random(34)+1; for( j = 0; j < i; j++ ) { if( x[j] == tall ) { tallFunnet = 1; } } if( tallFunnet == 1 ) { tallFunnet = 0; i--; } else { x[i]=tall; } } } Problemet er at den teoretisk kan gå uendeleg, då den kan trekke det same tallet evig. Ein bør derfor lage ein tabell med tal frå 1-34 (om det er det høgaste lotto-talet) og etterkvart som ein trekker eit tall, vert det fjerna frå tabellen. Endret 3. november 2006 av rec0n Lenke til kommentar
Manfred Skrevet 7. november 2006 Del Skrevet 7. november 2006 Virkelig hårreisende at noen i det hele tatt bruker goto :| *sjokkert* Lenke til kommentar
handsape Skrevet 7. november 2006 Del Skrevet 7. november 2006 (endret) tja, noen ganger _er_ `goto' det klareste.. når kontroll-konseptene som er tilgjengelige i C ikke er gode nok (og det hender altså noen ganger!) er `goto' - som i grunn kan regnes som en byggekloss bak andre kontroll-konsepter, det eneste alternativet i et språk som ikke kan "programmeres om" v.h.a. ting som makroer der en på det viset ville kunne lagt til nye kontroll-konsepter i en "sikker" forpakning når konstruksjoner som funksjoner og prosedyrer ble vanlige erstattet disse `goto' som brukt til å dele opp koden i "klosser" og navigere i mellom disse; men det betyr ikke at `goto' kun ble brukt i disse sammenhengene ta C og C++ -- der eksisterer det ingen mulighet til å hoppe ut av loop-konstruksjoner dypere enn 1 uten å måtte sjekke flere ganger "på vei ut"; dermed er `goto' et fullstendig gyldig alternativ der ta også en titt på grep -R "goto" * i /usr/src/linux ; der ser man `goto' brukt i en annen sammenheng som også er fullstendig gyldig; unntakshåndtering Endret 7. november 2006 av handsape Lenke til kommentar
mongojarle Skrevet 11. november 2006 Del Skrevet 11. november 2006 (endret) går du på hive? hvis du gjør... du har enda frem til den 14. å bli ferdig! spør helge i timen, han skriver det du sliter med for deg... hvis du vil kan jeg sende deg koden. jeg legger ved programmet, folk uten borland c++ builder kan sikkert ikke kjøre denne da... lotto.zip Endret 11. november 2006 av jalejale Lenke til kommentar
mongojarle Skrevet 13. november 2006 Del Skrevet 13. november 2006 du har sikkert fått det til nå, men til alle andre, så kommer koden slik jeg gjorde det her, for hele programmet: #pragma hdrstop #include <stdio.h> #include <stdlib.h> //--------------------------------------------------------------------------- #pragma argsused int LesInn(void) //spør hvor mange rader som skal skrives ut { int tall; printf("Hvor mange rekker skal du ha? "); scanf(" %d", &tall); printf("\n"); return tall; } void Trekk(int x[]) //trekker tilfelidge tall, og ser om noen er like { int i,j; for(i=0;i<=6;i++) { x[i] = 1 + rand() % 34; for(j=0;j<=i-1;j++) { if(x[i]==x[j]) { i--; break; } } } } void Sorter(int x[]) //sorterer tallene, lavest først (bubble-sort) { int pass,i,temp; for (pass=1;pass<=6;pass++) for (i=0;i<=5;i++) if (x[i]>x[i+1]) { temp =x[i]; x[i] =x[i+1]; x[i+1]=temp; } } void SkrivUt(int x[], int nr) //skriver ut alle rekkene { int i; printf("Rekke nr. %5d: ", nr); for(i=0;i<=6;i++) printf(" %3d",x[i]); printf("\n"); } int main(int argc, char* argv[]) //hovedprogram { int rader,i,x[7]; srand(time(NULL)); rader=LesInn(); for(i=1;i<=rader;i++) { Trekk(x); Sorter(x); SkrivUt(x,i); } getchar(); getchar(); return 0; } Lenke til kommentar
Shell Skrevet 14. november 2006 Del Skrevet 14. november 2006 Annen måte å sjekke om tallet er trukket før. void trekk( int *tall ) { int i; bool numTaken[35]; memset( &numTaken[1], 0, sizeof(bool)*34 ); i = 7; while ( i-- > 0 ) { while ( numTaken[tall[i] = rand()%34+1] ); numTaken[tall[i]] = true; } Lenke til kommentar
mongojarle Skrevet 15. november 2006 Del Skrevet 15. november 2006 fristen er i dag, klokken 23.59 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å