Gå til innhold

Programmet klikker....


Anbefalte innlegg

Hei igjen alle sammen...

Har nok et lite problem på gang her :p

//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
Videoannonse
Annonse

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 av GNUfan
Lenke til kommentar

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
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 av zirener
Lenke til kommentar

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 :thumbup: (gjesp, begynner å bli seint...)

Endret av zirener
Lenke til kommentar

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 av Duronator
Lenke til kommentar
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 :p;):thumbup:

Endret av zirener
Lenke til kommentar

Hei igjen, har fortsatt litt problemer, mulig jeg ikke skjønte atl av hva dere andre der sa... :no::thumbdown::(

#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
#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
#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 :thumbup:

 

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
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

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 av <BøNilzen>
Lenke til kommentar
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... :blush:

Endret av <BøNilzen>
Lenke til kommentar
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
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
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... :blush:

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å :thumbup::p

Endret av zirener
Lenke til kommentar

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
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 :thumbup:

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...