coil Skrevet 1. desember 2003 Del Skrevet 1. desember 2003 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
Orjanp Skrevet 1. desember 2003 Del Skrevet 1. desember 2003 Trenger både feilmelding og kode for å kunne si noe om hva problemet kan være. Lenke til kommentar
coil Skrevet 1. desember 2003 Forfatter Del Skrevet 1. desember 2003 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
daysleper Skrevet 1. desember 2003 Del Skrevet 1. desember 2003 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
coil Skrevet 1. desember 2003 Forfatter Del Skrevet 1. desember 2003 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
daysleper Skrevet 1. desember 2003 Del Skrevet 1. desember 2003 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
coil Skrevet 1. desember 2003 Forfatter Del Skrevet 1. desember 2003 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
coil Skrevet 1. desember 2003 Forfatter Del Skrevet 1. desember 2003 oppdatering: Kjørte programmet gjennom minGW..ikke pent =) Jobber med å gjøre om nå, merkelig at bcc kompilerte og kjørte det. Lenke til kommentar
daysleper Skrevet 1. desember 2003 Del Skrevet 1. desember 2003 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
daysleper Skrevet 1. desember 2003 Del Skrevet 1. desember 2003 Forbasket dette forumet altså .. Det fjerner alt for mye space/tab i koden; blir seende så stygt ut. *syte å klage* .. Får ta meg noe kveldsmat; kanskje det hjelper. Lenke til kommentar
kattemat Skrevet 1. desember 2003 Del Skrevet 1. desember 2003 Du deklarerer et array kast med 4 elementer. Så prøver du å aksessere elementet med indeks 4 som er element 5... Lenke til kommentar
coil Skrevet 1. desember 2003 Forfatter Del Skrevet 1. desember 2003 bcc55 er nok gammel og tullete ja..får rette litt på koden slik at den funker..takk for titten daysleeper minGW virker iaf som en veldig grei sak ~coil 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å