View Single Post
De kunne sikkert blitt løst mer effektivt, men her er min løsning i C++.


Sitat av Pjukern Vis innlegg
-1-
Lag et program som tar et tall mellom 0 og 100.
Programmet skal så la deg gjette på hvilket tall den "tenker" på. Den skal så gi tilbakemelding til deg om du må gjette høyere eller lavere.
Vis hele sitatet...

Kode

#include <iostream>
#include <ctime> 
#include <cstdlib>

using namespace std;


// Funksjon som genererer of returnerer et tilfeldig tall
int random()
{	
	int a;
	srand ( time(NULL) );			
	a = rand() % 100 + 1;
	return a;
}

// Hovedfunksjon
int main(){
	int guessthis;
	guessthis = random();
	int temp;
										// Henter inn tall fra bruker
	cout << "Gjett hvilket tall jeg tenker på(0-100): "; cin >> temp;

	while(temp != guessthis)			// Er tallet riktig?
	{
		if(temp < guessthis)			// Tallet er for lavt
			cout << "Det var for lite, prov igjen: ";
		else							// Ellers er det for høyt
			cout << "Det var for høyt, prov igjen: ";
		cin >> temp;					// Leser inn på nytt
	}
	cout << "Du traff riktig tall!! :D\n\n";
	system("PAUSE");
	return 0;
}
Sitat av Pjukern Vis innlegg
-2-
Veldig lik oppgaven over, men her er det du som skal tenke på et tall, og programmet skal gjette. Du gir tilbakemelding til programmet om det skal gjette høyere eller lavere. Her vil jeg også ha med at den teller antall forsøk, så da er det om å gjøre å finne ut hvordan du kan få den til å gjette tallet på færrest mulig forsøk.
Vis hele sitatet...

Kode

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cctype>

using namespace std;

//Deklarerer funksjoner
char les_kommando();
int randomize(int const MIN, int const MAX);

//Hovedfunksjon
int main(){					
	char svar = 0;						//Initsialiserer div variabler
	int tempmin = 1;
	int tempmax = 100;
	int first = randomize(tempmin, tempmax);
	int teller = 0;

	cout << "Tenk pa et tall mellom 1 og 100 så skal jeg prove a gjette.\n";
	cout << "Er det: " << first;

	while(svar != 'R'){					//Kjører så lenge ikke riktig
	teller++;
	svar = les_kommando();
	if (svar == 'R')					//Riktig med en gang
		break;

		switch (svar){
			case 'L':					//Tallet er for lavt
						tempmin = first;
						first = randomize(tempmin, tempmax);// Genererer nytt tall
						cout << "Hm... Er det " << first;
						break;
				
			case 'H':					//Tallet er for høyt
						tempmax = first;
						first = randomize(tempmin, tempmax);// Genererer nytt tall
						cout << "Hm... Er det " << first;
						break;
	
			default:   cout << "\nFeil!  Ukjent kommando gitt\n"; 
						break;                              // Ulovlig kommando:  
		}
	}

	cout << "Jippi!!!! Klarte det pa " << teller << " forsok\n";
	system("PAUSE");
	return 0;
}


char les_kommando()  {       //  Henter ett ikke-blankt upcaset tegn:
  char ch;
  cout << "\n\nSkriv R for riktig, H for for hoyt, L for for lavt: ";
  cin >> ch;   cin.ignore();
  return toupper(ch);
}

int randomize(int const MIN, int const MAX)			 //  Henter ett tilfeldig tall mindre enn b
{	
	int tall;
	int range;
	srand ( time(NULL) );
	range = (MAX-MIN)+1;
	tall = MIN + int(range*rand()/(RAND_MAX + 1.0));
	return tall;
}


Edit: Sorry, la ikke merke til at jeg dro opp en gammel tråd. jaja...
Sist endret av trond89; 9. desember 2008 kl. 18:05.