En noob i nød

Tags:    c++

<< < 12 > >>
Hey allesammen.
Jeg startede for ikke så lang tid siden med C++, og jeg valgte det hurtigt som favorit, så jeg ville lave et program, hvor man skulle gætte et random tal.

Jeg har "fremtryllet" det her program delvis ved at kigge efter ex. Jackpot i Dev-Cpp, og ved at læse nybegynder artiklerne.

#include <iostream>
using namespace std;

int max1, max2, max3, svar, tal;

void Spm1();
void Spm2();
void Spm3();

void Spm1() {
max1 = 10;
tal = rand() % max1;
cout << "Første spørgsmål. Tal fra 0-10: ";
cin >> svar;
if ((svar>max1) || (svar<0)) {
cout << "I mellem 0 og 10\\n\\n";
Spm1();
}
if (svar==tal) {
cout << "Bravo. Nu til level 2.\\n\\n";
Spm2();
}
else if (svar>tal) {
cout << "For stort\\n\\n";
Spm1();
}
else if (svar<tal) {
cout << "For lille\\n\\n";
Spm1();
}
}

void Spm2() {
max2 = 20;
tal = rand() % max2;
cout << "Andet spørgsmål. Tal fra 0-20: ";
cin >> svar;
if ((svar>max2) || (svar<0)) {
cout << "I mellem 0 og 20\\n\\n";
Spm2();
}
if (svar==tal) {
cout << "Bravo. Nu til level 3.\\n\\n";
Spm3();
}
else if (svar>tal) {
cout << "For stort\\n\\n";
Spm2();
}
else if (svar<tal) {
cout << "For lille\\n\\n";
Spm2();
}
}

void Spm3() {
max3 = 30;
tal = rand() % max3;
cout << "Tredje spørgsmål. Tal fra 0-30: ";
cin >> svar;
if ((svar>max3) || (svar<0)) {
cout << "I mellem 0 og 30\\n\\n";
Spm3();
}
if (svar==tal) {
cout << "Bravo. Nu er du færdig.\\n";
system("PAUSE");
}
else if (svar>tal) {
cout << "For stort\\n\\n";
Spm3();
}
else if (svar<tal) {
cout << "For lille\\n\\n";
Spm3();
}
}

int main() {
cout << "V. 1.0" << endl;
cout << "Du skal gætte hvilket tal computeren tænker på." << endl;
cout << "Først vil det være fra 0-10, så 0-20 og til sidst 0-30." << endl;
cout << "Programmet vil fortælle om tallet er for højt eller lavt" << endl;
cout << "Good luck. SpliT\\n\\n";
Spm1();
return 0;
}

Som sagt. Ved at kigge efter og ved at læse artkikler.

Problemet er at hvis man gætter forkert skal man have den samme sværhedsgrad, men tallet skal være det samme!
Det må da være muligt!

Og fandt ud af at man ikke kan have æøå med, så er der ikke ligesom i HTML noget man kan skrive i stedet?

Please lad vær at grin, og please skriv noget JEG kan forstå :P

SpliT

PS: Første nye emne på udvikleren.dk så bær over med mig!



Du skal sætte 'max2' inden du kalder Spm1().
Det der sker her (i starten af Spm1()):
tal = rand() % max2;
...er at du dividerer med 'max2' som ikke er blevet initialiseret og derfor 0. Altså en division med 0 og den går ikke.
Det du ville gøre var sikkert:
tal = rand() % max1;


- Fejl fra min side :S


Et andet problem er tilfældighed. Tilfældighedsgeneratoren er en tilstandsmaskine som ud fra sin tilstand genererer en ny tilstand og et tilfældigt tal. Men hver gang du starter programmet er tilstanden den samme og det vil derfor være den samme sekvens af tilfældige tal, som bliver genereret. Tilføj følgende i starten af filen:
#include <ctime>
#include <cstdlib>

...og følgende i starten af main():
srand(time(NULL));

Så bliver tallene tilfældige.
Og så er der selvfølgelig din brug af rekursion (funktioner som kalder sig selv) i stedet for at bruge loops, men det lærer du nok når du når så langt.


- :D


Ja, men jeg synes ikke det løser mit problem? Eller hva?
Hvis man gætter forkert skal det være det samme tal!
Eller er det mig der er forkert på den?

- Jep. Min fejl igen. Tak alle sammen!


[Redigeret d. 20/08-04 17:07:39 af Daniel Cramer]




if(!max1)
er det samme som at skrive
if(max1==0)


Nej.
if(!max1)
er det samme som at skrive
if(max1 != 0)

Nej prøv følgende program:
Fold kodeboks ind/udKode 

Hos mig bliver der ihvertfald skrevet:
!a
a==0
Jeg ved ikke hvilken kompiler du bruger, men i Visual C++ og Dev-cpp får jeg ihvertfald !a og a==0 til det samme og a og a!=0 til det samme.



Nej.
if(!max1)
er det samme som at skrive
if(max1 != 0)

Aaarghh....skal vi ikke bare sige at jeg bøjer mig i skam og holder min kæft. Selvfølgelig tager jeg da grusomt meget fejl. :-(
Men det beviser en anden pointe. Det er dårlig skik at skrive if(something) og if(!something) og if(!(!(!something != somethingelse) != FALSE)!)
...fordi der er fjolser som mig der ikke kan læse kode. Så er det meget bedre at skrive:
if ( something == 0 )
if( something != NULL)
osv.
Nu skal jeg nok tie stille resten af dagen.



Hej,
jeg har lavet dette program mindst 100 gange til ti83 (hver gang jeg havde formatert den) og det var lige sjovt at lave hver gang. Jeg er også lige begyndt at lære C++ og kom lige forbi denne side og tænkte at det kunne være meget sjovt at lave som mit første rigtige C++ program. Så følgende er mit forslag til hvordan det kunne se ud. Det ser ud til at virke og duer velkommen til at bruge løs af det hvis du synes at der er noget du kan bruge:

Fold kodeboks ind/udKode 


[Redigeret d. 25/08-04 22:28:30 af Christian]



Det forrige program tog kun ca 10 min at lave, men så kom jeg i tanke om at jeg også plejede at lave en "AI" til ti83 udgaven af talspillet som man kunne spille imod. Det er så hermed gjort, og det tog en smule længere end 10min, men det var smadder sjovt:

Fold kodeboks ind/udKode 


Det er meget sjovt at sidde og se hvor god computeren er til at gætte tallet når den henholdsvis regner og gætter


[Redigeret d. 25/08-04 22:29:27 af Christian]



:) vil såmen bare lige sige hej daniel, og velkommen til udvikleren ;)

:P ser du kom igang med c++, troed ellers du havde givet op.

Men GL hf med det da :D Jeg er selv til delphi.

Mvh
Lasse (Din brors ven ;))

-----------------------------------------------
Sex er som Quake, Singleplayer er godt. Men multiplayer er bare bedre.
-----------------------------------------------



Christian - Ehm.. Ok!

Lasse - Heey.. :]
1. Gi' på? Aldrig!
2. Delphi? Det kigger jeg på bagefter :D

c u around!!

;D Daniel!



<< < 12 > >>
t