Gæt et tal (Begynderens Guide til C++), side 3

Tags:    c++

Hej

Total grøn, be gentle :O

Opgaven: (link: http://www.udvikleren.dk/C/Article.aspx/286/Page3/)
Et lille spil
Programmet skal vælge et tal som brugeren skal gætte.
Det skal fungere ved at brugeren skriver et tal, så skal programmet skrive om det er mindre eller større
end det tal der skal gættes og brugeren skal skrive et nyt tal,
hvis det er det rigtige tal skal programmet skrive at det var det rigtige tal,
og hvor mange gæt brugeren brugte til at gætte tallet.

Min kode:
Fold kodeboks ind/udKode 


Mine spørgsmål:

1) Programmet fungerer (nogenlunde), men det stopper nogle gange, selvom jeg ikke har fundet vinder tallet.
2) Jeg kan bare ikke hitte ud af, hvordan jeg tæller antal gæt, det må være noget med:
Fold kodeboks ind/udKode 

Altså g(gæt) sættes til 0 og tæller 1 op, når X IKKE er lig med w (eller hur?)

Flame away og på forhånd tak ;)



1. det stopper hvis du først laver et gæt over vinder tallet og så et under vindertallet. Opgaven kan løses med kun 1 løkke.

2. antallet af gæt svare til antallet af iterationer i dine løkker+1 så det er bare at lave en tæller der starter på 1 og ligger 1 til i hver iteration.



Tak..

Jeg kæmper en hård kamp, men jeg kan bare ikke se løsningen for mig.

1)
Jeg bliver med med at rode rundt i

Fold kodeboks ind/udKode 


Nogen hints?

2)
Jeg afventer gætteriet indtil punkt 1 er på plads.






while(x!=w){

}



Bingo, så var den der.

Fold kodeboks ind/udKode 


Så skal jegt i gang med punkt 2, og jeg vender nok tilbage :D

Tak for hjælpen, Nørden



I don't get it.

Hvorfor virker følgene kode ikke?

Fold kodeboks ind/udKode 


Som jeg ser det så: for (g = 1; (x!=w); g++);
g bliver sat til 1
Hver gang brugeren svare forkert, bliver der lagt 1 til g.

Men jeg for altid returneret "1 gaet" tilbage?

På forhånd tak.



Synes da lige jeg vil citere mig selv :)

2. antallet af gæt svare til antallet af iterationer i dine løkker+1 så det er bare at lave en tæller der starter på 1 og ligger 1 til i hver iteration.



Det burde i øvrigt være rimelig klart hvorfor din for løkke aldrig kører:

while(x!=w){}

for(...;x!=w;...);

Burde være klart at hvis du nogensinde kom igennem while løkken må x være lig med w, medmindre du havde brugt break i while løkken. Når du så kommer til for løkken tester den om x er forskellig fra w, det er det ikke så den kører aldrig, at du så får en må vel være fordi din compiler sætter g før den tester x!=w.

Helt generelt bør en forløkkes condition altid være baseret på dens tæller som minimum, hvis f.eks man var kommet til din for løkke uden at x var lig med w havde det været en evig løkke da løkken i sig selv ikke retter på værdien af hverken x eller w.

En forløkke der ikke har nogen krop:
for(...;...;...);
Kan jeg ikke lige se at du nogensinde ville skulle skrive. Med den undtagelse at skulle rykke iteratorer, der ikke kan rykkes med *.

Hvis du har en variable med kun 2 mutual exclusive tilstande skal du kun teste for den ene tilstand og hvis variablen ikke er i denne tilstand må den være i den anden. I dit tilfælde er x enten størrer end eller mindre end w, derfor skal du kun teste på en af de 2 muligheder større eller mindre end. Helt generelt skal du ved mutual exclusive kun teste på andre tilstande såfremt den ikke er i den eller de tilstande du allerede har testet og aldrig teste for den sidste da variable må være i den tilstand.


Indrykninger der ikke er korrekte gør koden mere ulæslig, dette kan dog godt være det ikke er din skyld.






Indlæg senest redigeret d. 02.07.2008 13:48 af Bruger #5620
Synes da også lige jeg vil citere mig selv :D

Total grøn, be gentle

Tak for svaret. Desværre forstår jeg intet af det.

Jeg aner ikke hvad:

* iterationer
* mutual exclusive

betyder, i forbindelse med C++

Jeg har ryddet lidt op i koden

Fold kodeboks ind/udKode 


Hvis du er rigtig rar, vil du så vise mig hvordan jeg implementere "tælle funktionen"(samt selve koden) og især hvorhenne den skal sættes i i ovenstående kode.

På forhånd tak for hjælpen og din tålmodighed.



En iteration er når koden i en løkkes krop bliver udført.

Mutual Exclusive betyder bare at to eller flere ting ikke kan gælde samtidig, f.eks kan x ikke være både mindre og størrer end w på samme tid.
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 02.07.2008 14:53 af Bruger #5620
Takker, jeg fik det selv løst således:

Fold kodeboks ind/udKode 

Tak for hjælpen.



Indlæg senest redigeret d. 02.07.2008 14:53 af Bruger #13955
t