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 ;(