Dead_Rabbit Skrevet 13. mars 2004 Del Skrevet 13. mars 2004 Hei igjen alle sammen... Har nok et lite problem på gang her //Programmet skal ta for seg terning kast, verdiene blir tilordnet ved hjelp av //random() funksjonen, så skal antall ganger 1,2,3 osv... forekommer lagres i //Ktab[6], dette burde da ikke være så vanskelig :dontgetit: :no: #include <iostream.h> #include <stdlib.h> int main() { int I, K=1, L, Svar, Ktab[6], Kast; cout << "Hvor mange ganger skal det kastes?"; cin >> Svar; for (I=0;I<Svar;I++) { Kast = random(6)+1; while (K == Kast) Ktab[I]++; } for (L=0;L<6;I++) cout << L++ << " forekommer " << Ktab[L] << " ganger i tabellen" << endl; return 0; } Programmet stopper opp i en while løkke (programmet klikker ihverfall ikke hvis jeg dropper while løkka da.) Så, er det noen som kan hjelpe meg? Hva er galt? Lenke til kommentar
GNUfan Skrevet 13. mars 2004 Del Skrevet 13. mars 2004 (endret) Den while-løkka vil bli gående i all evighet(evt.segfaulte), og for hver runde øke verdien av Ktab med 1, med mindre Kast er lik 1, noe som ikke er sannsynlig. Ktab[Kast]++; burde fungere(uten while-løkka selfølgelig) gjør vel nytten? eller har jeg misforstått? En annen ting, den nederste for-løkka. Hvorfor øker du I med en hver løkke? EDIT: Ja, jeg hadde misforstått Endret 13. mars 2004 av GNUfan Lenke til kommentar
Duronator Skrevet 13. mars 2004 Del Skrevet 13. mars 2004 Her har du en som funker //Programmet skal ta for seg terning kast, verdiene blir tilordnet ved hjelp av //random() funksjonen, så skal antall ganger 1,2,3 osv... forekommer lagres i //Ktab[6], dette burde da ikke være så vanskelig :dontgetit: :no: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { int kast, ktab[6] = {0,0,0,0,0,0}, Svar; srand(time(0)); cout << "Hvor mange ganger skal det kastes?"; cin >> Svar; for (int i = 0; i < Svar; i++ ) { kast = rand()%6; ktab[kast]++; } for( int i = 0; i < 6; i++ ) cout << i+1 << " forekommer " << ktab[i] << " ganger\n"; return 0; } Lenke til kommentar
Dead_Rabbit Skrevet 13. mars 2004 Forfatter Del Skrevet 13. mars 2004 (endret) Her har du en som funker //Programmet skal ta for seg terning kast, verdiene blir tilordnet ved hjelp av //random() funksjonen, så skal antall ganger 1,2,3 osv... forekommer lagres i //Ktab[6], dette burde da ikke være så vanskelig :dontgetit: :no: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { int kast, ktab[6] = {0,0,0,0,0,0}, Svar; srand(time(0)); cout << "Hvor mange ganger skal det kastes?"; cin >> Svar; for (int i = 0; i < Svar; i++ ) { kast = rand()%6; ktab[kast]++; } for( int i = 0; i < 6; i++ ) cout << i+1 << " forekommer " << ktab[i] << " ganger\n"; return 0; } Jo takk, men det er et lite poeng at jeg skal skjønne nøyaktig hva som foregår... Endret 13. mars 2004 av zirener Lenke til kommentar
Dead_Rabbit Skrevet 13. mars 2004 Forfatter Del Skrevet 13. mars 2004 (endret) En annen ting, den nederste for-løkka. Hvorfor øker du I med en hver løkke? EDIT: Ja, jeg hadde misforstått Ja... det lurer jeg på også, det vil jo bli feil... er vel bedre å ta den sånn da: for (L=1;L<6;L++) cout << "et eller annet"; EDIT: nei det er det ikke, da printer den bare ut 5 sånn greier da...*sukk* takker for tips/tilbakemelding, et eller annet ihvertfall (gjesp, begynner å bli seint...) Endret 13. mars 2004 av zirener Lenke til kommentar
Duronator Skrevet 14. mars 2004 Del Skrevet 14. mars 2004 (endret) For det første: bruk #include <iostream.h> er gammel måte, #include <iostream> er "riktig" måte å gjøre det på nå om dagen. Dessuten har du at alle C libraryes (stdio.h, stdlib.h) skal inkluderes slik: #include <cstdio> Så til programmet: using namespace std legger du til for at du skal slippe( noe du egentlig skal gjøre etter nyere standarer) å bruke std::cout og std::cin deklarasjon av variablene skjønner du sikkert, men løkka foregår slik: løkka kjøres antall ganger som svaret spesifiserer. For hver runde får du et tall mellom 0 og seks (egentlig 0 og 5), og deretter øker den tellern til det spesifikke tallet i ktab[kast]. Eks: Hvis jeg får 3 av rand() funksjonen, så øker den ktab[3] med 1; Så loopes det til man har kasta alle kastene. Deretter printer den ut antall på hvert kast i den siste for-loopen. Der må jeg legge til 1 på i for ellers så printer den "0 forekommer X ganger", og det blir feil. Endret 14. mars 2004 av Duronator Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 (endret) For det første: bruk #include <iostream.h> er gammel måte, #include <iostream> er "riktig" måte å gjøre det på nå om dagen. Dessuten har du at alle C libraryes (stdio.h, stdlib.h) skal inkluderes slik: #include <cstdio> Så til programmet: CODE using namespace std legger du til for at du skal slippe( noe du egentlig skal gjøre etter nyere standarer) å bruke std::cout og std::cin deklarasjon av variablene skjønner du sikkert, men løkka foregår slik: løkka kjøres antall ganger som svaret spesifiserer. For hver runde får du et tall mellom 0 og seks (egentlig 0 og 5), og deretter øker den tellern til det spesifikke tallet i ktab[kast]. Eks: Hvis jeg får 3 av rand() funksjonen, så øker den ktab[3] med 1; Så loopes det til man har kasta alle kastene. Deretter printer den ut antall på hvert kast i den siste for-loopen. Der må jeg legge til 1 på i for ellers så printer den "0 forekommer X ganger", og det blir feil. For hver runde får du et tall mellom 0 og seks (egentlig 0 og 5), og deretter øker den tellern til det spesifikke tallet i ktab[kast]. Eks:Hvis jeg får 3 av rand() funksjonen, så øker den ktab[3] med 1; Er det her du mener at man får et tall mellom 0 og 5? Kast = random(6)+1 I boka sto det at her ville vi få et tall mellom 1 og 6. using namespace std legger du til for at du skal slippe( noe du egentlig skal gjøre etter nyere standarer) å bruke std::cout og std::cin Boka er litt for gammel til det der( og kompilatoren som jeg bruker til de oppgavene her følger boka)(kompilatoren kjenner igjen ordet namescpace men det funker alikevel ikke) Dessuten har du at alle C libraryes (stdio.h, stdlib.h) skal inkluderes slik:#include <cstdio> Som sagt er kompilatoren litt gammel... Har Dev C++ også men når jeg gjør oppgaver fra boka bruker jeg den andre kompilatoren Men sist men ikke mins TAKK for hjelpa, skjønte ikke alt men, litt ihvertfall Endret 14. mars 2004 av zirener Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 Hei igjen, har fortsatt litt problemer, mulig jeg ikke skjønte atl av hva dere andre der sa... #include <iostream> #include <stdlib.h> int main() { int I, K=1, L, Svar, Ktab[6], Kast; cout << "Hvor mange ganger skal det kastes?"; cin >> Svar; for (I=0;I<Svar;I++) { Kast = random(6)+1; if (Kast == 1) Ktab[I]++; } for (I=0;I<6;I++) cout << I << " forekommer " << Ktab[I] << " ganger i tabellen" << endl; return 0; } Burde ikke dette funke da?? Lenke til kommentar
<BøNilzen> Skrevet 14. mars 2004 Del Skrevet 14. mars 2004 #include <iostream> #include <stdlib.h> int main() { int I, K=1, L, Svar, Ktab[6], Kast; cout << "Hvor mange ganger skal det kastes?"; cin >> Svar; for (I=0;I<Svar;I++) { Kast = random(6)+1; if (Kast == 1) // Hvorfor har du med dette? Ktab[I]++; // Her bør du vel endre til Ktab[Kast]++ } for (I=0;I<6;I++) cout << I << " forekommer " << Ktab[I] << " ganger i tabellen" << endl; return 0; } Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 #include <iostream> #include <stdlib.h> int main() { int I, K=1, L, Svar, Ktab[6], Kast; cout << "Hvor mange ganger skal det kastes?"; cin >> Svar; for (I=0;I<Svar;I++) { Kast = random(6)+1; if (Kast == 1) // Hvorfor har du med dette? Ktab[I]++; // Her bør du vel endre til Ktab[Kast]++ } for (I=0;I<6;I++) cout << I << " forekommer " << Ktab[I] << " ganger i tabellen" << endl; return 0; } if (Kast == 1) // Hvorfor har du med dette? Der skulle det stå Kast == I, takk for retting Ktab skal telle opp hvor mange ganger 1, 2, 3 osv forekommer etter "kastene". Derfor if (Kast == I) Da blir Ktab eller Ktab[0] økt med 1 hvis den inneholder I som er 1 her... Så blir det da at I == 2 osv, osv Litt dårlig forklart men Lenke til kommentar
<BøNilzen> Skrevet 14. mars 2004 Del Skrevet 14. mars 2004 Skjønner ikke helt hva du mener.. Mener du at du skal kaste en terning x antall ganger og telle hvor mange ganger du får 1,2,3,4,5 og 6? Isåfall, skal du bytte ut if (Kast == 1) Ktab[I]++; med Ktab[Kast]++; Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 Skjønner ikke helt hva du mener..Mener du at du skal kaste en terning x antall ganger og telle hvor mange ganger du får 1,2,3,4,5 og 6? Isåfall, skal du bytte ut if (Kast == 1) Ktab[I]++; med Ktab[Kast]++; Det er riktig det, men hvorfor blir det slik da? Ktab[Kast]++; Her hvis jeg får 6 når den random() funksjonen blir kjørt så får jo den verdien 7 istede og det blir jo feil, blir det ikke? Mulig jeg er litt treg azz... Lenke til kommentar
<BøNilzen> Skrevet 14. mars 2004 Del Skrevet 14. mars 2004 (endret) for(i=0;i<Svar;i++)//Kast terningen i antall ganger { Kast = random(6)+1; // integeren kast får en random verdi mellom 0 og 6 Ktab[Kast]++; // Hvis Kast er f.eks. 4, så økes Ktab[4] med 1. } Edit: Kast får en random verdi mellom 1 og 6 mener jeg:blush: Endret 14. mars 2004 av <BøNilzen> Lenke til kommentar
<BøNilzen> Skrevet 14. mars 2004 Del Skrevet 14. mars 2004 (endret) Her hvis jeg får 6 når den random() funksjonen blir kjørt så får jo den verdien 7 istede og det blir jo feil, blir det ikke?Mulig jeg er litt treg azz... Nei, det er det den ikke gjør. random(6) gir et tall mellom 0 og 5. (0,1,2,3,4,5 altså 6 tall) random(6)+1 gir et tall mellom 1 og 6. Neida, du er ikke treg Edit: Skriveleif... Endret 14. mars 2004 av <BøNilzen> Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 for(i=0;i<Svar;i++)//Kast terningen i antall ganger { Kast = random(6)+1; // integeren kast får en random verdi mellom 0 og 6 Ktab[Kast]++; // Hvis Kast er f.eks. 4, så økes Ktab[4] med 1. } Edit: Kast får en random verdi mellom 1 og 6 mener jeg:blush: Ja det gjør den jo... tusen takk, nå forstår jeg det, men verdiene blir fortsatt feil når jeg skriver dem ut, jeg får verdier som 5823 og sånt, og så mange gjenomganger er ikke gjort Er det noen som kan forklare meg det? Lenke til kommentar
<BøNilzen> Skrevet 14. mars 2004 Del Skrevet 14. mars 2004 for(i=0;i<Svar;i++)//Kast terningen i antall ganger { Kast = random(6)+1; // integeren kast får en random verdi mellom 0 og 6 Ktab[Kast]++; // Hvis Kast er f.eks. 4, så økes Ktab[4] med 1. } Edit: Kast får en random verdi mellom 1 og 6 mener jeg:blush: Ja det gjør den jo... tusen takk, nå forstår jeg det, men verdiene blir fortsatt feil når jeg skriver dem ut, jeg får verdier som 5823 og sånt, og så mange gjenomganger er ikke gjort Er det noen som kan forklare meg det? Det er vel fordi du ikke har initialisert (skriveleif?) Ktab. Prøv int Ktab[6] = {0}; Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 (endret) Her hvis jeg får 6 når den random() funksjonen blir kjørt så får jo den verdien 7 istede og det blir jo feil, blir det ikke?Mulig jeg er litt treg azz... Nei, det er det den ikke gjør. random(6) gir et tall mellom 0 og 5. (0,1,2,3,4,5 altså 6 tall) random(6)+1 gir et tall mellom 1 og 6. Neida, du er ikke treg Edit: Skriveleif... Skjønner at bedre nå men det blir fortsatt feil når jeg skar skrive verdiene ut. Kan poste koden som den er nå, kansje det er lettere da... #include <iostream> #include <stdlib.h> using namespace std; //Så blir vel alle fornøyde, eller, dere klarer sikker å finne enda litt;) int main() { int I, K=1, L, Svar, Ktab[6], Kast; cout << "Hvor mange ganger skal det kastes?"; cin >> Svar; for (I=1;I<Svar;I++) { Kast = random(6+1); if (Kast == I) Ktab[Kast]++; } for (I=1;I<7;I++) cout << I << " forekommer " << Ktab[I] << " ganger i tabellen" << endl; return 0; } Edit: Har sikker noen skriveleif jeg også Endret 14. mars 2004 av zirener Lenke til kommentar
<BøNilzen> Skrevet 14. mars 2004 Del Skrevet 14. mars 2004 Har du prøvd å initialisere Ktab? Hvis ikke kan de få ganske høye verdier. Endre int I, K=1, L, Svar, Ktab[6], Kast; til int I; int Svar; int Ktab[6] = {0}; int Kast; //trenger vel ikke ha med K, du bruker den ikke til noe. //du bruker ikke L heller //mer oversiktlig å initialisere en variabel per linje Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 Har du prøvd å initialisere Ktab?Hvis ikke kan de få ganske høye verdier. Endre int I, K=1, L, Svar, Ktab[6], Kast; til int I; int Svar; int Ktab[6] = {0}; int Kast; //trenger vel ikke ha med K, du bruker den ikke til noe. //du bruker ikke L heller //mer oversiktlig å initialisere en variabel per linje Nei, de bruket jeg før men har glemt å fjerne dem... Skal se om det nye funker Lenke til kommentar
Dead_Rabbit Skrevet 14. mars 2004 Forfatter Del Skrevet 14. mars 2004 (endret) Nå begynner ting å bli bedre her, takket være deg BøNilsen Tusen takk azz Edit:Programmet funker, JIPPIII!!! Utrolig hvor teit det går ann å bli hvis man bare prøver godt nok Men nok en gang, tusen takk alle sammen Endret 14. mars 2004 av zirener 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å