Gå til innhold

bcc55 evig løkke omgjort til ikke evig :)


Anbefalte innlegg

Vell, hva skal jeg si..Har lagd et program i bcc55 som simulerer sjansen for å få yatzy på et kast. Koden til selve programmet fungerer fint og gjør jobben sin, men.. I starten valgte jeg å kjøre simuleringen i en evig løkke:

while(true){ :kode: }. Nå ønsker jeg å bare kjøre til variabelen runde når 10.000..while(runde<10000){:kode:} Men, da låser programmet seg under kjøring. All kompilering går fint, men når jeg starter selve programmet låser det seg med en xp feilmelding. Selve programkoden er uforandret, eneste er at vilkåret for while løkken er endret.

Noen som har en smart forklaring på dette?

~coil

Lenke til kommentar
Videoannonse
Annonse

Vell..her er koden. Feilmeldingen som kommer er standard win-xp("yatzy.exe has encountered a problem and need to close.." Ved avansert visning av feilmeldingen kommer en minnedump..ikke noe å debugge utifra iaf :)

 

 

#include <iostream.h> //For inn / ut skrivut / skriv inn

#include <cstdlib> //For random funksjonen

#include <ctime>

using namespace std;

 

class Yyatzy //Her blir klassehodet definert!!!

{

public: //Public variabel

//Ser ut som *ALLE* funksjoner i klassen MÅ deklareres her (eller som private)

void start();

float sans;

int skrivUt;

Yyatzy(); //Kaller konstruktøren

~Yyatzy(); //Dekonstruktør

};

 

void Yyatzy::start() //Dette er funksjonen som ble oppkalt fra main metoden

{

srand((unsigned)time(NULL

short kast[4]; //En array til å holde terningene

short kastet;

double runde;

double yy;

yy=0;

while (true)

{

for (short i=0;i<5;i++)

{

kastet = (int) 7 * rand() / (RAND_MAX + 1.0);

if (kastet == 0) {while (kastet == 0){kastet = (int) 7 * rand() / (RAND_MAX + 1.0);}}

kast = kastet;

}

 

short start,teller;

teller=0;

 

for (short l=0;l<4;l++)

{start = kast[0];if (start == kast[l]) {teller++;}}

if (teller==4){yy++;}

 

skrivUt++;

if (skrivUt==1000000)

{

sans = yy/runde;

cout<<"Yatzy:";

cout<<yy;

cout<<":Kast:";

cout<<runde;

cout<<":yy/runde:";

cout<<sans;

sans = runde/yy;

cout<<"runde/yy";

cout<<sans<<endl;

skrivUt=0;

}

 

runde++;

}

}

 

Yyatzy::Yyatzy() {cout << "::starter::\n"<<endl;} //Konstruktør

Yyatzy::~Yyatzy(){cout <<"\n**avslutter**" << endl;} //DeKonstruktør

 

void main() //Dette er metoden som startes først uanz. Alle klasser må ha en main metode

{

Yyatzy en; //Oppretter et objekt av typen Yyatzy

en.start();

}

Lenke til kommentar

Koden kompileres ikke og er flere steder ikke å regne som standard C++. Altså deler av koden er "gått ut på dato".

 

Jeg rettet litt på den og fikk den til å kompilere; men får bare en melding: "::starter::" når jeg kjører den.

 

Hvis du kunne gitt oss en kode som faktisk kompilerte og kjørte hadde det vært en fordel når vi eventuellt skal finne feil. :)

 

Hvis kompileren din begynner å bli gammel, noe jeg kan tenke meg, kan du prøve MinGW som er en gratis og "moderne" kompiler for Windows. Se guiden på www.sourcecode.no for info om hvordan du kommer i gang med den.

Lenke til kommentar

humm..vell, koden kompileres helt fint hos meg, grunnen er vel at jeg bruker bcc55 sammen med Glut libs.

Får prøve å bytte kompilator, men hva er det som *ikke* er standard c++ med det jeg skriver? Har skrevet masse java i min tid, men prøver nå på c, så jeg vil gjerne vite hva som ikke er standard.

Lenke til kommentar

Du bruker iostream.h --> det skal være iostream

 

"srand((unsigned)time(NULL" <-- denne linjen kan umulig kompileres på hverken din eller min kompilator.

 

Variablene i metoden "Yyatzy::start()" kan på ingen måte nåes fra andre metoder; så igjen kan koden ovenfor på ingen måte kompileres på hverken din eller min kompilator.

 

..jeg kan ikke se at du bruker glut heller egentlig .. har du pastet feil kode?

Lenke til kommentar

iostream.h funker fint her..

srand((srand((unsigned)time(NULL et par paranteser har falt ut i cut'n paste prosessen

Yyatzt::start() ..hva mener du egentlig? funker så det griner etter her

Nå har jeg uanz installert minGW, så skal me sjå

Lenke til kommentar

Hehe :) Nei, jeg vet ikke; kanskje bcc55 er gammelt og surrete?

 

Jeg vet ikke hva programmet gjør, men nå kompileres og kjøres det i det minste:

 

#include <iostream> //For inn / ut skrivut / skriv inn
#include <cstdlib> //For random funksjonen
#include <ctime>

using namespace std;


class Yyatzy {
public:  //Public variabel
//Ser ut som *ALLE* funksjoner i klassen MÃ… deklareres her (eller som private)
void start();
float sans;
int skrivUt;
Yyatzy(); //Kaller konstruktøren
~Yyatzy(); //Dekonstruktør
}; // class Yyatzy


void Yyatzy::start() //Dette er funksjonen som ble oppkalt fra main metoden
{
srand((unsigned)time(NULL));
short kast[4]; //En array til å holde terningene
short kastet;
int runde = 0;
int yy;
yy = 0;
skrivUt = 0;

while(runde < 100000) {

 for(short i = 0; i < 5; i++) {
 	kastet = (int) (7 * rand() / (RAND_MAX));
 	
 	/*
 	if(kastet == 0) 
   while(kastet == 0) 
   	kastet = (int) (7 * rand() / (RAND_MAX + 1.0));
 	*/
 	kast[i] = kastet;
 }
 
 short start, teller;
 teller = 0;
 
 for(short l = 0; l < 4; l++) {
 	start = kast[0];
 	if(start == kast[l])
   teller++;  	
 }
 
 if(teller == 4) 
 	yy++;  
 
 skrivUt++;
 if(skrivUt == 10000) {
 	sans = yy / runde;
 	cout << "Yatzy: ";
 	cout << yy;
 	cout << " Kast: ";
 	cout << runde;
 	cout << " :yy/runde: ";
 	cout << sans;
 	sans = runde / yy;
 	cout << " runde/yy ";
 	cout << sans << endl;
 	skrivUt = 0;
 }
 runde++;
} // while(runde..)
} // start()


Yyatzy::Yyatzy() 
{
cout << "::starter::\n" << endl;
} //Konstruktør


Yyatzy::~Yyatzy() 
{
cout << "\n**avslutter**" << endl;
} //DeKonstruktør



int main() //Dette er metoden som startes først uanz. Alle klasser må ha en main metode
{
Yyatzy en; //Oppretter et objekt av typen Yyatzy
en.start();
} // main()

 

ÆØÅ ble litt rart her .. Vel .. Under kjøring:

 

 

::starter::

 

Yatzy: 10000 Kast: 9999 :yy/runde: 1 runde/yy 0

Yatzy: 20000 Kast: 19999 :yy/runde: 1 runde/yy 0

Yatzy: 30000 Kast: 29999 :yy/runde: 1 runde/yy 0

Yatzy: 40000 Kast: 39999 :yy/runde: 1 runde/yy 0

Yatzy: 50000 Kast: 49999 :yy/runde: 1 runde/yy 0

Yatzy: 60000 Kast: 59999 :yy/runde: 1 runde/yy 0

Yatzy: 70000 Kast: 69999 :yy/runde: 1 runde/yy 0

Yatzy: 80000 Kast: 79999 :yy/runde: 1 runde/yy 0

Yatzy: 90000 Kast: 89999 :yy/runde: 1 runde/yy 0

Yatzy: 100000 Kast: 99999 :yy/runde: 1 runde/yy 0

 

**avslutter**

 

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...