clock

Status
Niet open voor verdere reacties.

BreVDD

Gebruiker
Lid geworden
9 apr 2009
Berichten
104
Hoe stel je in vanafwaar hij de tijd moet beginnen te tellen?
Code:
# include <ctime> 
  # include <iostream> 
#include <stdlib.h>
#include <windows.h>
#include <Winbase.h>
 using namespace std; 

  int main () 
  {
	  Sleep(5000);

	 
      cout << "Klok teken:" <<clock ()<<" seconden: "<<clock () / CLOCKS_PER_SEC; 
 Sleep (5550); // ik wil vanaf hier opnieuw tellen zodat hieronder opnieuw 5 sec komt te staan. 
       cout << "Klok teken:" <<clock ()<<" seconden: "<<clock () / CLOCKS_PER_SEC; 

  }
En als je dat dan kan instellen. Hoe stel je dan in dat de sec niet worden afgrond naar gehelen maar nog met comma's zijn?
Groetjes

Brecht
 
Laatst bewerkt:
clock() geeft een waarde ALTIJD sinds het programma gestart is, opnieuw instellen gaat dus helaas niet. Je zult de vorige waarden steeds moeten onthouden en later aftrekken van de nieuwe clock() waarde.

Een komma getal kan met een cast naar een float of double:

float tijd = ((float)clock()) / CLOCKS_PER_SEC;

printf("tijd: %f", tijd);
 
clock() geeft een waarde ALTIJD sinds het programma gestart is, opnieuw instellen gaat dus helaas niet. Je zult de vorige waarden steeds moeten onthouden en later aftrekken van de nieuwe clock() waarde.

Een komma getal kan met een cast naar een float of double:

float tijd = ((float)clock()) / CLOCKS_PER_SEC;

printf("tijd: %f", tijd);

Ok bedankt;

Die printf is dat het zelfde als cout << "...." ? of niet

(als je het woord 'tijd' kan je vervangen door een ander woord he? dat is toch een variabele ?)
 
Ja, ik ben de C library gewend dus vandaar dat ik die gebruik :p

Code:
count << "Tijd: " << tijd;
 
Ja, ik ben de C library gewend dus vandaar dat ik die gebruik :p

Code:
count << "Tijd: " << tijd;

ok supperbedankt

ps: kan je het mss met een andere functie ervoor zorgen dat je de tijd berekent tussen 2 dingen zonder dat je ze moet van elkaar aftrekken? Ik wil een spel maken waarbij je reactiesnelheid wordt getest :p;) maar ik weet nog niet of het gaat lukken.
 
ok supperbedankt

ps: kan je het mss met een andere functie ervoor zorgen dat je de tijd berekent tussen 2 dingen zonder dat je ze moet van elkaar aftrekken? Ik wil een spel maken waarbij je reactiesnelheid wordt getest :p;) maar ik weet nog niet of het gaat lukken.

hehe die kan ik zo voor je maken ^^:

Code:
clock_t clock2() {
    static clock_t lt = 0;
    clock_t tmp = clock(), t;
    t = tmp - lt;
    lt = tmp;
    return t;
}

Iedere keer als je clock2() aanroept krijg je de tijd sinds vorige aanroep, of tijd sinds het programma gestart is bij de eerste aanroep.
 
Code:
clock_t clock2() {
    static clock_t lt = 0;
    clock_t tmp = clock(), t;
    t = tmp - lt;
    lt = tmp;
    return t;
}

Iedere keer als je clock2() aanroept krijg je de tijd sinds vorige aanroep, of tijd sinds het programma gestart is bij de eerste aanroep.

Zou je dat kunnen uitleggen want versta er nix van :s

De 't' staat als variabele of naam van klok (klopt?)
tmp?
return t?
 
Laatst bewerkt:
clock_t is een datatype, net als int of float. static wil zeggen dat de variabele altijd zijn waarde behoudt.

De functie houdt dus drie variabelen bij: t, lt en tmp. Allemaal van het type clock_t (het type die de functie clock() teruggeeft). tmp wordt bij iedere aanroep ingestelt met de huidige clock(). t is de tijd die de functie teruggeeft en wordt berekend met de huidige clock (tmp) en de statische variabele lt. lt wordt ingestelt op de huidige clock (tmp) en de functie returnt.

Waarschijnlijk is clock_t een beetje verwarrend... Je zou in principe ook gewoon een int kunnen nemen maar het is altijd verstandig de waarden en normen van C over te nemen.

Is het een beetje duidelijk nu? :)
 
clock_t is een datatype, net als int of float. static wil zeggen dat de variabele altijd zijn waarde behoudt.

De functie houdt dus drie variabelen bij: t, lt en tmp. Allemaal van het type clock_t (het type die de functie clock() teruggeeft). tmp wordt bij iedere aanroep ingestelt met de huidige clock(). t is de tijd die de functie teruggeeft en wordt berekend met de huidige clock (tmp) en de statische variabele lt. lt wordt ingestelt op de huidige clock (tmp) en de functie returnt.

Waarschijnlijk is clock_t een beetje verwarrend... Je zou in principe ook gewoon een int kunnen nemen maar het is altijd verstandig de waarden en normen van C over te nemen.

Is het een beetje duidelijk nu? :)

Een beetje ;

Alvast bedankt

Ik ben nu zelf iets aan het maken ga het dan posten. Je moet maar ene keer kijken of het goed is.
 
Code:
#include <ctime> 
#include <iostream> 
#include <stdlib.h>
#include <windows.h>
#include <Winbase.h>

 using namespace std; 

  int main () 
  {
	  
	  int wachten;
	  int max_Number = 11;
	  cout << "Doel van het spel:\nTyp zo rap mogelijk op enter wanneer er op het scherm verschijnt:\n '!!!Typ Enter!!!'";
	  Sleep (2000);
	  while (true)
	  {
	  srand( (unsigned)time( NULL ) );
	  wachten = (int) (max_Number * rand() / (RAND_MAX + 100.0));
	  int wacht = (wachten*1012);
	  cout << "\nTyp 1 om te spelen; Typ 2 om te stoppen.\nIk kies voor ";
	  int keuze = 0;
	  cin >> keuze;
	  if (keuze == 1)
	  {
	  Sleep(1000);
	  system("cls");
	  Sleep(2000);
	  cout << "\n\nKlaar?!";
	  Sleep(1000);
	  cout << "\nStart!";
	  Sleep(2000);
	  system("cls"); <==1
	  Sleep(1000); //Zeker 1 seconde wachten
	 Sleep(wacht); <== 1
	 float tijdspel =((float)clock ()) / CLOCKS_PER_SEC; 
	 cout << "!!!Typ Enter!!!";
	  cin.get(); <==2
	 cin.get();
		 float reactie = ((float)clock ()) / CLOCKS_PER_SEC; 
	cout << "Je reageerde in " << reactie - tijdspel << " seconden."; 
	Sleep(1000);
	cout << wacht; //controlle !!! <==3
	cout << "\nTyp enter om verder te gaan";
	cin.get();
	continue;
	  }
	  if (keuze == 2) 
	  {
		  cout << "Daaaaaaaaaaaaaaaaaaag";
		  Sleep (5000);
	   break;
	  }
	  if (keuze >2)
	  {
cout << "\nHet getal"<< keuze << " is niet geldig.";
continue;
	  }
 }
  }

3 vragen:
<==1 : Hoe kan ik er voor zorgen als er daar enter wordt gedrukt dat dat niet gebeurt? of dat er een foutmelding komt?
<==2 : Als ik maar 1 cin.get() zet dan laat hij het over? hoekomt dat?
<==3 : De random is de hele tijd het zelfde als ik het opnieuw doe?! Het werkt toch met 'time'?

Weet er iemand de oplossing?
 
Laatst bewerkt:
Ik snap je rand constructie niet helemaal, om een random getal tussen 1 en 10 seconden te krijgen zou ik zoiets doen:

Code:
srand(time(NULL));
tijd = (rand() % 9000) + 1000;

Om te kijken of de gebruiker al op enter gedrukt heeft voordat het mag, zou je cin.peek() kunnen gebruiken direct achter de Sleep(). Deze functie checkt of er data in de invoer buffer staat maar gaat er niet op zitten wachten zoals cin.get()

Dat één van de cin.get() 's wordt overgeslagen kan er mee te maken hebben dat de vorige cin.get() alleen een carriage return karakter leest en de newline nog in de buffer laat. Je kan dus beter cin.getline() gebruiken, die doet dat niet.

success :thumb:
 
Code:
#include <ctime> 
#include <iostream> 
#include <stdlib.h>
#include <windows.h>
#include <Winbase.h>

 using namespace std; 

  int main () 
  {
	  int wachten;
	  int wacht;
	  int max_Number = 11;
	  cout << "Doel van het spel:\nTyp zo rap mogelijk op enter wanneer er op het scherm verschijnt:\n '!!!Typ Enter!!!'";
	  Sleep (3000);
	  while (true)
	  {
	  srand( (unsigned)time( NULL ) );
	  wachten = (int) (rand() % 9)+ 1; // ik gebruik hier van 0-10 omdat hij anders ook 9236 kan kiezen en dat is eigenlijk 9 sec. Dus er is veel kans dat     //  het de hele tijd het zelfde is;)
	  wacht = wachten*1000;
	  cout << "\nTyp 1 om te spelen; Typ 2 om te stoppen.\nIk kies voor ";
	  int keuze = 0;
	  cin >> keuze;
	  if (keuze == 1)
	  {
	  Sleep(1000);
	  system("cls");
	  Sleep(1000);
	  cout << "\n\nKlaar?!";
	  Sleep(1000);
	  cout << "\nStart!";
	  cin.peek();
	  Sleep(1000);
	  cin.peek();
	  system("cls");
	  cin.peek();
	  Sleep(1000); //Zeker 1 seconde wachten
	  cin.peek();
	 Sleep(wacht);
	 cin.peek();
	 system("cls");
	 cin.peek();
	 	 float tijdspel =((float)clock ()) / CLOCKS_PER_SEC; 
cin.peek();
	 cout << "!!!Typ Enter!!!";
	  cin.get(); <== dit laat hij over
	 cin.get(); <=== dit laat hij over
		 float reactie = ((float)clock ()) / CLOCKS_PER_SEC; <== gaat derikt naar hier
	cout << "Je reageerde in " << reactie - tijdspel << " seconden."; 
	Sleep(1000);
	cout << wacht;
	cout << "\nTyp enter om verder te gaan";
	cin.get();
	continue;
	  }
	  if (keuze == 2) 
	  {
		  cout << "Daaaaaaaaaaaaaaaaaaag";
		  Sleep (5000);
	   break;
	  }
	  if (keuze >2)
	  {
cout << "\nHet getal"<< keuze << " is niet geldig.";
continue;
	  }
 }
  }

Nu heb ik dat maar het werkt niet met die cin.peek() ==> als ik anter vooraf typ dan gaat hij derikt naar de stap waar er een (<== staat).
 
Laatst bewerkt:
Ik heb dat gedaan met peek. ik heb het overal gezet maar het helpt niet:

Code:
#include <ctime> 
#include <iostream> 
#include <stdlib.h>
#include <windows.h>
#include <Winbase.h>
#include <string>

 using namespace std; 

  int main () 
  {
	  string voornaam;
	  string achternaam;
	  cout <<"Wat is uw naam?: ";
	  cin >> voornaam;
	
	  cout << "Wat is uw achternaam?: ";
	  cin >> achternaam;
	  int wachten;
	  int wacht;
	  int max_Number = 11;
	  system("cls");
	  cout << "Dag " << voornaam <<".\n";
	  Sleep(500);
	cout << "Doel van het spel:\a\nTyp zo rap mogelijk op enter wanneer er op het scherm verschijnt:\n '!!!Typ Enter!!!'";
	  Sleep (3000);
	  while (true)
	  {
	  srand( (unsigned)time( NULL ) );
	  wachten = (int) (rand() % 9)+ 1;
	  wacht = wachten*1000;
	  cout << "\nTyp 1 om te spelen; Typ 2 om te stoppen.\nIk kies voor ";
	  int keuze = 0;
	  cin >> keuze;
	  if (keuze == 1)
	  {
	  Sleep(1000);
	  system("cls");
	  Sleep(1000);
	  cout << "\n\nKlaar?!\a";
	  Sleep(1000);
	  cout << "\nStart!\a";
	  cin.peek();
	  Sleep(1000);
	  cin.peek();
	  system("cls");
	  cin.peek();
	  Sleep(1000); //Zeker 1 seconde wachten
	  cin.peek();
	 Sleep(wacht);
	 cin.peek();
	 system("cls");
	 cin.peek();
	 	 float tijdspel =((float)clock ()) / CLOCKS_PER_SEC; 
cin.peek();
	 cout << "!!!Typ Enter!!!";
	 cin.get();
	 cin.get();
	 float reactie = ((float)clock ()) / CLOCKS_PER_SEC; 
	cout << "\aJe reageerde in " << reactie - tijdspel << " seconden.\a"; 
	Sleep(1000);
	cout << wacht;
	cout << "\nTyp enter om verder te gaan";
	cin.get();
	continue;
	  }
	  if (keuze == 2) 
	  {
		  system("cls");
		  cout << "Dag " << voornaam << " "<< achternaam <<".";
		  Sleep (2000);
		  cout << "\nTot de volgende keer.";
		  Sleep (2000);
		  system("cls");
		  cout << "\b\tCopyricht by BreVDD company";
		  Sleep (2000);
	   break;
	  }
	  if (keuze >2)
	  {
cout << "\nHet getal"<< keuze << " is niet geldig.";
continue;
	  }
 }
  }
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan