• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Zegar źle zlicza czas CPP

Object Storage Arubacloud
–1 głos
236 wizyt
pytanie zadane 12 lutego 2018 w C i C++ przez Pabiak Gaduła (4,450 p.)
zamknięte 13 lutego 2018 przez Pabiak

Witam, jakiś czas temu napisałem quiz ze stolic i państw ameryki. Zmieniłem system, uzywam teraz linuxa mint 18.3. Chciałem rozszerzyć mój program i dodać kilka innych kontynentów. Wziąłem stary kod i przerobiłem go tak, żeby działał na linuxie. Teraz mam problem z klasą zegar, która nie działa tak jak powinna, nie chce zliczać czasu. Jakoś specjalnie jej przerabiać nie musiałem, a może powinienem? Sprawdziłem jak działa na windowsie i wszystko grało!

#include <iostream>
#include <time.h>

class Zegar
{
    clock_t start;
	clock_t stop;
	double czas;

	int minuta;
	int sekunda;


public:
	Zegar();
	~Zegar();
public:

	void wlacz();
	void zatrzymaj();
	void wyswietl();
};
#include <iostream>
#include <time.h>
#include "zegar.h"

Zegar::Zegar()
{
	minuta = 0;
	sekunda = 0;

}
Zegar::~Zegar() {};

void Zegar::wlacz()
{
	start = clock();
}

void Zegar::zatrzymaj()
{
	stop = clock();
	czas = (double)(stop - start) / CLOCKS_PER_SEC;

	if (czas >= 60)
	{

		minuta = czas / 60;

		sekunda = czas - minuta * 60;

		if (sekunda>60)
			while (sekunda > 60)
			{
				minuta++;
				sekunda -= 60;
			}
	}
}

void Zegar::wyswietl()
{
	if (czas>=60)
	{
		std::cout << "Rozwiazanie testu zejelo ci " << minuta << " minut i " << sekunda << " sekund!" << std::endl;
	}
	else if (czas<60)
	{
		std::cout << "Rozwiazanie testu zajelo ci " << (int)czas << " sekund!" << std::endl;
	}
	
}
#include <iostream>
#include "funkcje.h"
#include "zegar.h"

class Ameryka :public Funkcje, public Zegar
{
        int ile_panstw;
        
        int wybor;
        int pkt;
        double procent;
        std::string ocena;
        std::string odpowiedz;
        std::string *poprawna;
        std::string *nazwa;
        short *powtorz;
        
public:
        
        Ameryka();
        ~Ameryka();
        
public:
        
        void start();
        void pytania(int numer);
        void wystaw_ocene();
        void koniec();
        void wyswietl_powtorke();
};
#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <algorithm>
#include "Ameryka.h"

Ameryka::Ameryka()
{
    ile_panstw = 35;
    nazwa = new std::string[ile_panstw];
    powtorz = new short[ile_panstw];
    poprawna = new std::string[ile_panstw];
    for (int i = 0; i < 35; i++)
	{
		poprawna[i] = 1;
	}

	poprawna[0] = "saint johns";			        nazwa[0] = "Antigua i Barbuda";
	poprawna[1] = "buenos aires";			    nazwa[1] = "Argentyna";
	poprawna[2] = "nassau";					        nazwa[2] = "Bahamy";
	poprawna[3] = "bridgetown";				    nazwa[3] = "Barbados";
	poprawna[4] = "belmopan";				         nazwa[4] = "Belize";
	poprawna[5] = "sucre";					             nazwa[5] = "Boliwia";
	poprawna[6] = "brasilia";				            nazwa[6] = "Brazylia";
	poprawna[7] = "santiago";		    	        nazwa[7] = "Chile";
	poprawna[8] = "roseau";					        nazwa[8] = "Dominika";
	poprawna[9] = "santo domingo";			nazwa[9] = "Dominikana";
	poprawna[10] = "quito";					        nazwa[10] = "Ekwador";
	poprawna[11] = "saint georges";			nazwa[11] = "Grenada";
	poprawna[12] = "georgetown";			    nazwa[12] = "Gujana";
	poprawna[13] = "gwatemala";				nazwa[13] = "Gwatemala";
	poprawna[14] = "port-au-prince";		    nazwa[14] = "Haiti";
	poprawna[15] = "tegucigalpa";			    nazwa[15] = "Honduras";
	poprawna[16] = "kingston";				        nazwa[16] = "Jamajka";
	poprawna[17] = "ottawa";				            nazwa[17] = "Kanada";
	poprawna[18] = "bogota";				        nazwa[18] = "Kolumbia";
	poprawna[19] = "san jose";				        nazwa[19] = "Kostaryka";
	poprawna[20] = "hawana";				        nazwa[20] = "Kuba";
	poprawna[21] = "meksyk";				        nazwa[21] = "Meksyk";
	poprawna[22] = "managua";				    nazwa[22] = "Nikaragua";
	poprawna[23] = "panama";				        nazwa[23] = "Panama";
	poprawna[24] = "asuncion";				    nazwa[24] = "Paragwaj";
	poprawna[25] = "lima";					             nazwa[25] = "Peru";
	poprawna[26] = "basseterre";	    	        nazwa[26] = "Saint Kitts i Nevis";
	poprawna[27] = "castries";				        nazwa[27] = "Saint Lucia";
	poprawna[28] = "kingstown";	                nazwa[28] = "Saint Vincent i Grenadyny";
	poprawna[29] = "san salvador";			    nazwa[29] = "Salwador";
	poprawna[30] = "waszyngton";			    nazwa[30] = "Stany Zjednoczone";
	poprawna[31] = "paramaribo";			    nazwa[31] = "Surinam";
	poprawna[32] = "port-of-spain";			    nazwa[32] = "Trynidad i Tobago";
	poprawna[33] = "montevideo";			    nazwa[33] = "Urugwaj";
	poprawna[34] = "caracas";				        nazwa[34] = "Wenezuela";							
	
	pkt = 0;

	procent = 0;
}

Ameryka::~Ameryka()
{
    delete[] poprawna;
    delete[] nazwa;
    delete[] powtorz;
}

void Ameryka::start()
{
    wlacz();  //wlaczam zegar
    
    for(int i  = 0; i < ile_panstw; i++)
    {
        Ameryka::pytania(i);
        kolor(CYAN,BOLD_ON);
    }
    Ameryka::wystaw_ocene();
    Ameryka::koniec();
    Ameryka::wyswietl_powtorke();
}

void Ameryka::pytania(int numer)
{
    std::cout << "Podaj stolice panstwa " << nazwa[numer] << ": ";
	std::getline(std::cin, odpowiedz);
	std::transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::tolower);

	if (odpowiedz == poprawna[numer])
	{
		kolor(GREEN,BOLD_ON);
		std::cout << "Dobrze!" << std::endl;
		kolor_reset();
		pkt++;
		powtorz[numer]=0;
	}
	else
	{
		kolor(RED,BOLD_ON);
		std::cout << "Zle! Poprawna odpowiedz to: " << poprawna[numer] << std::endl;
		kolor_reset();
		powtorz[numer]=1;
	}
	sleep(1);
	cls();
}

void Ameryka::wystaw_ocene()
{
	procent = 1;
	procent /= ile_panstw;
	procent *= pkt;
	procent = procent * 100;


	if (procent < 35)
	{
		ocena = "Niedostateczny";
	}

	else if (procent >= 35 && procent < 50)
	{
		ocena = "Dopuszczajacy";
	}

	else if (procent < 75 && procent >= 50)
	{
		ocena = "Dostateczny";
	}

	else if (procent < 90 && procent >= 75)
	{
		ocena = "Dobry";
	}

	else if (procent < 100 && procent >= 90)
	{
		ocena = "Bardzo dobry";
	}

	else if (procent == 100)
	{
		ocena = "Celujacy";
	}

}

void Ameryka::koniec()
{
    cls();
	std::cout << std::endl << "Koniec!" << std::endl;
	std::cout << "Zdobyte punkty: " << pkt << "/" << ile_panstw << std::endl;
	std::cout << "Zdobyta ocena: " << ocena << std::endl;
	zatrzymaj(); //zatrzymuje tutaj czas
	wyswietl(); //wyswietlam czas
}

void Ameryka::wyswietl_powtorke()
{
	std::cout << "Twoje odpowiedzi:" << std::endl;
	for (int i = 0; i<ile_panstw; i++)
	{
		if (powtorz[i] == 0)
		{
			kolor(GREEN,BOLD_ON);
			std::cout << poprawna[i] << " - " << nazwa[i] << std::endl;
		}
		else
		{
			kolor(RED,BOLD_ON);
			std::cout << poprawna[i] << " - " << nazwa[i] << std::endl;
		}
	}
	kolor_reset();
}

Zawsze wyswietla się 0 ;(

komentarz zamknięcia: Rozwiązane
1
komentarz 12 lutego 2018 przez monika90 Pasjonat (22,940 p.)
edycja 12 lutego 2018 przez monika90
Funkcja clock nie nadaje się do pomiaru czasu rzeczywistego, bo mierzy ona czas zużyty przez proces. Jeżeli proces czeka na podanie odpowiedzi przez użytkownika, to oczywiście nie zabiera żadnego czasu. Lepiej użyj któregoś z zegarów z nagłówka chrono.

Twój program działał w Windows, bo pewnie używał funkcji clock w implementacji Microsoftu, która jest niezgodna ze standardem.
komentarz 12 lutego 2018 przez Pabiak Gaduła (4,450 p.)
Dzięki, jak będe miał dostęp do komputera to zobacze jakieś inne funkcje do mierzenia czasu.

1 odpowiedź

0 głosów
odpowiedź 12 lutego 2018 przez Wiciorny Ekspert (270,110 p.)
Błąd może być w kompilowaniu? Jak kompilujesz pliki? Pamietaj że  na linuxie kompilując musisz podać zależnośći od zewnetrznych plików https://stackoverflow.com/questions/3202136/using-g-to-compile-multiple-cpp-and-h-files
komentarz 12 lutego 2018 przez Pabiak Gaduła (4,450 p.)
edycja 12 lutego 2018 przez Pabiak
Używam środowiska codelite, kompiluje klikając ctrl+f5 ale w codeblocks również ten sam problem wystepuje. Przez terminal nie kompilowałem, zaraz zobacze jak to wyjdzie

//EDIT Bez zmian, nadal to samo

Podobne pytania

0 głosów
1 odpowiedź 1,664 wizyt
pytanie zadane 28 czerwca 2019 w C i C++ przez KosaTV Obywatel (1,260 p.)
0 głosów
1 odpowiedź 2,165 wizyt
pytanie zadane 30 kwietnia 2016 w C i C++ przez maciek061 Gaduła (4,490 p.)
0 głosów
1 odpowiedź 2,161 wizyt
pytanie zadane 20 czerwca 2017 w PHP przez sapero Gaduła (4,100 p.)

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...