Probleempje met while functie

Status
Niet open voor verdere reacties.

bengoet

Gebruiker
Lid geworden
17 okt 2008
Berichten
10
hey,
Ik zit al een tijdje vast met het volgende probleem. Hieronder mijn code.

Om een of andere reden voert het programma de laatste if en else niet uit.
Indien het maximaal aantal pogingen bereikt is moet er een bericht komen dat dit gebeurt is.
Indien het getal geraden is moet er ook een bericht van komen.

Ook zegt het programma indien max pogingen bereikt of getal geraden nog altijd het bericht het getal is groter, probeer opnieuw of het getal is kleiner probeer opnieuw

ik kan er niet meer aan uit :S

ps. code ziet er hier vrij ongestructureerd uit, ik weet ook niet hoe ik het kan paste zodat het is als in mijn editor


/* Voorbeeldprogramma zoek een willekeurig getal tussen 0 en 100 */
#include <iostream> /* cout, cin */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
using namespace std;

void main(void)
{
int getal, poging, gevonden = 0, ondergrens, bovengrens, aantal_pogingen, count_down;

srand( (unsigned)time( NULL ) ); /* geef de tijd als beginwaarde voor de random getallen generator */
getal = rand() % 100; /* geef een willekeurige waarde tussen 0 en 100 aan getal ( % modulo geeft rest bij deling door) */
ondergrens = 0;
bovengrens = 100;
aantal_pogingen = 1;
count_down = 7;

while ((!gevonden)&&(count_down>0)) /* zolang we getal niet gevonden hebben , en countdown niet = 0*/
{ cout << "\nGeef een getal tussen " << ondergrens << " en " << bovengrens << " : ";
cin >> poging;

if ( getal>poging )
{
if ( poging<ondergrens )
{
cout << "\nOpgepast!! Het getal moet binnen de opgegeven grenzen liggen.";
aantal_pogingen = aantal_pogingen+1;
count_down = count_down -1;
}

else if ( poging>ondergrens )
{
cout << "\nHet gezochte getal is groter. Probeer opnieuw.";
ondergrens = poging;
aantal_pogingen = aantal_pogingen+1;
count_down = count_down -1;
}
}

else if ( getal<poging )
{
if ( poging>bovengrens )
{
cout << "\nOpgepast!! Het getal moet binnen de opgegeven grenzen liggen.";
aantal_pogingen = aantal_pogingen+1;
count_down = count_down -1;
}
else if ( poging<bovengrens )
{
cout << "\nHet gezochte getal is kleiner. Probeer opnieuw.";
bovengrens= poging;
aantal_pogingen = aantal_pogingen+1;
count_down = count_down -1;
}
}

else
{
gevonden=1;
}
}

if (count_down=0)
cout << "\nHet maximaal aantal pogingen is bereikt!";
else if (gevonden=1)
{
cout << "\nProficiat! Het getal was inderdaad " << getal << ".
cout << "\nU had er " << aantal_pogingen << " pogingen voor nodig.
}
}
 
je kunt er code tags omheen zetten "["CODE][/CODE"]", zonder quotes, kan met knopje als je bericht plaatst

Code:
dit krijg je dan.

kwa programmatuur probeer methodes te gebruiken.
 
Laatst bewerkt:
ok, heb eens geprobeerd om de code in te voegen zoals het hoort, dit zal het wel wat duidelijker maken.

Code:
/* Voorbeeldprogramma zoek een willekeurig getal tussen 0 en 100 */
#include <iostream>  /* cout, cin */
#include <stdlib.h> /* srand, rand */
#include <time.h>   /* time */
using namespace std;

void main(void)
{
	int getal, poging, gevonden = 0, ondergrens, bovengrens, aantal_pogingen, count_down;
	
	srand( (unsigned)time( NULL ) ); /* geef de tijd als beginwaarde voor de random getallen generator */
	getal = rand() % 100; /* geef een willekeurige waarde tussen 0 en 100 aan getal ( % modulo geeft rest bij deling door) */
    ondergrens = 0;
    bovengrens = 100;
	aantal_pogingen = 1;
	count_down = 7;

	while ((!gevonden)&&(count_down>0))  /* zolang we getal niet gevonden hebben , en countdown niet = 0*/
	{	cout << "\nGeef een getal tussen " << ondergrens << " en " << bovengrens << " : ";
		cin >> poging;

		if ( getal>poging )
		{
			if ( poging<ondergrens )
				{
					cout << "\nOpgepast!! Het getal moet binnen de opgegeven grenzen liggen.";
					aantal_pogingen = aantal_pogingen+1;
					count_down = count_down -1;
				}

			else if ( poging>ondergrens )
				{
					cout << "\nHet gezochte getal is groter. Probeer opnieuw.";
					ondergrens = poging;
					aantal_pogingen = aantal_pogingen+1;
					count_down = count_down -1;
				}
		}
	   
		else if ( getal<poging )
		{
			if ( poging>bovengrens )
				{
					cout << "\nOpgepast!! Het getal moet binnen de opgegeven grenzen liggen.";
					aantal_pogingen = aantal_pogingen+1;
					count_down = count_down -1;
				}
			else if ( poging<bovengrens )
				{
					cout << "\nHet gezochte getal is kleiner. Probeer opnieuw.";
					bovengrens= poging;
					aantal_pogingen = aantal_pogingen+1;
					count_down = count_down -1;
				}
		}
		
		else
		{
			gevonden=1;
		}
	}

   if (count_down=0)
	   cout << "\nHet maximaal aantal pogingen is bereikt!";
   else if (gevonden=1)
   {	 
		cout << "\nProficiat! Het getal was inderdaad " << getal << ".";
		cout << "\nU had er " << aantal_pogingen << " pogingen voor nodig.";
   }
}

en wat bedoel je juist met methodes? We hebben een basisvoorbeeld gezien waar we dan elke keer iets moesten aant toevoegen wat allemaal lukte tot de laatste opdracht en die was om een maximaal aantal pogingen toe te voegen. Dit is me denk ik ongeveer gelukt met de int countdown maar ik zit vast bij mijn text die erop zou moeten komen.
 
Laatst bewerkt:
Code:
int main(int argc, char* argv[])
{
	unsigned int n, in,
				 min(0), max(100), c(0);

	srand(GetTickCount());
	n = rand()%100;

	while(c < 7)
	{
		std::cout << "Geef een getal tussen " << min << " en " << max << ": ";
		std::cin >> in;

		if(in < min | in > max)
		{
			std::cout << "Het ingevoerde getal valt niet binnen het juiste bereik.\n";
			c++;
			continue;
		}

		if(in == n)
		{
			std::cout << "Het was inderdaad het getal " << n << ".\n"
					  << "U had er " << (c+1) << " poging(en) voor nodig.\n";
			break;
		}
		else
		{
			std::cout << "haha... probeer het nog een keertje!\n";
			c++;
		}
	}

	return 0;
}

De bovenstaande code zou volgens mij aan je eisen moeten voldoen.
 
hey, bedankt voor de reactie maar ik krijg 13 errors als ik ze ingeef in microsoft visual studio

Ik ken niet veel van c++ omdat ik nog maar een paar lessen bezig ben. Moest ik jouw meer geavanceerde oplossing geven voor het probleem dan zouden ze dat niet goed rekenen.

De oplossing zou in de stijl moeten zijn van mijn code. Volgens mij zou mijn code toch ongeveer moeten kloppen maar toch zit er ergens een fout in waardoor hij de foute dingen zegt. Bv: wanneer max aantal pogingen is bereikt zegt die :

-het getal is groter, probeer opnieuw
u heeft het max aantal pogingen bereikt
proficiat het getal was inderdaad x. U had er y pogingen voor nodig

terwijl ik alleen de melding van het max aantal pogingen zou moeten krijgen :confused:

srry voor het moeilijk doen :p
 
nvm die methodes als je daar nog niet bent. let wel even op je format en op concistentie, de ene keer doe je zo
Code:
whoop
{
en even later doe je weer
Code:
whoop
    {
 
hey, bedankt voor de reactie maar ik krijg 13 errors als ik ze ingeef in microsoft visual studio

Waarschijnlijk omdat ik de functie GetTickCount() gebruik ik m'n code, en je daarvoor de header windows.h nodig heb. Maar je kunt hem gerust vervangen met je originele code, maakt verder weinig uit in dit voorbeeld.

bengoet;2475288 Ik ken niet veel van c++ omdat ik nog maar een paar lessen bezig ben. Moest ik jouw meer geavanceerde oplossing geven voor het probleem dan zouden ze dat niet goed rekenen.[/quote zei:
Als je net begint dan lijken sommige dingen misschien geavanceerder, maar het hoort nog steeds bij de basis. Je kunt ze dus ook gewoon vervangen door je eigen style -> int min(0) is hetzelfde als int min = 0; en variabele++ is hetzelfde als variabele = variabele + 1;

Verder heb je wat code dubbel staan, terwijl dat niet nodig is als je de juiste stappen volgt.

1. vraag om invoer
2. controleer of waarde binnen het juiste bereik valt
3. controleer of ingevoerde waarde gelijk is aan het getal dat we zoeken

Als de ingevoerde waarde niet binnen het juiste bereik valt, hoeven we immers ook niet te controleren of de ingevoerde waarde lager of hoger is dan het getal dat we zoeken om daar dan op te reageren.

Verder maak je ook wat kleine foutjes in je code. Je gebruikt bijvoorbeeld in je code:

Code:
if(count_down=0)
  // doe iets

In plaats van een vergelijking doe je hier een toekenning. Om een vergelijking te doen schrijf je:

Code:
if(count_down == 0)
  // doe iets

Verder is een else-if niet nodig als je twee verschillende variabelen vergelijkt:
Code:
if(count_down == 0)
  // ...
if(gevonden == 1)
  // ...

Met het bovenstaande zou het volgens mij al moeten lukken. Ik had gisteren alleen even snel je code gelezen om een idee te krijgen wat de bedoeling was.
 
Verder is een else-if niet nodig als je twee verschillende variabelen vergelijkt:
Code:
if(count_down == 0)
  // ...
if(gevonden == 1)
  // ...

ik heb de code niet gelezen dus weet niet of het hier ook geldt maar soms kan het wel nodig zijn hoor, als je iets van een boompje maakt ofzo
 
ik heb de code niet gelezen dus weet niet of het hier ook geldt maar soms kan het wel nodig zijn hoor, als je iets van een boompje maakt ofzo

Je hebt gelijk. Ik was teveel op zijn voorbeeld gericht. :o
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan