Witam, mógłby mi ktoś pomóc zrobić najprostszy możliwy stoper? Mam zadanie, że ma on odmierzać czas biegu zawodnika, więc zakładam że musi się zatrzymać na życzenie użytkownika. Jestem zielona w temacie programowania, a czas goni. Wiem, że pewnie trzeba będzie użyć funkcji time ale nie mam pojęcia nawet od czego zacząć.

- Rejestracja:ponad 15 lat
- Ostatnio:około godziny
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
ja wiem, że są ksiązki, ale nie naucze sie tego w 3 dni (chociaz probuje), mam ten przedmiot na studiach, a przez obecna sytuacje nie odbywaja sie zadne zajecia, jedynie rzucone zadania, projekty i "radzcie sobie sami", dajac tydzien na zostanie super mistrzami c++

- Rejestracja:około 10 lat
- Ostatnio:około 2 lata
- Lokalizacja:Chorzów
- Postów:1670
Wystarczy chcieć:
https://www.google.com/search?q=c%2B%2B+odliczanie+czasu
a jak się nie chce to uż na to nie ma rady...
radźcie sobie sami.
Na tym polegają studia. Studia to nie przedszkole. A odliczanie czasu w c++ to jeszcze żadne mistrzostwo a nawet nie wystarczająca podstawa.
p.s.
czy to kolejny "student" oczekujący, że wykładowca magiczną pałeczką przeniesie wiedzę do główki?

- Rejestracja:około 11 lat
- Ostatnio:3 miesiące
- Postów:181
- Pobierasz czas przy pomocy
std::chrono
- Tworzysz pętlę która przyjmuje input dopóki nie zostanie wprowadzony konkretny znak (np.
q
) bądź fraza (np.stop
) - Pobierasz czas przy pomocy
std::chrono
- Obliczasz czas trwania poprzez odjęcie czasu z pkt 1 od czasu z pkt 3
- Wyświetlasz czas obliczony w pkt. 4
Wczytywanie => https://en.cppreference.com/w/cpp/io/cin
std::chrono
=> https://en.cppreference.com/w/cpp/chrono
Wyświetlanie => https://en.cppreference.com/w/cpp/io/cout
Koniec prost stoper skończony :)

- Rejestracja:około 9 lat
- Ostatnio:około 2 lata
katakrowa napisał(a):
radźcie sobie sami.
Na tym polegają studia. Studia to nie przedszkole. A odliczanie czasu w c++ to jeszcze żadne mistrzostwo a nawet nie wystarczająca podstawa.
p.s.
czy to kolejny "student" oczekujący, że wykładowca magiczną pałeczką przeniesie wiedzę do główki?
@katakrowa: Niby masz rację, ale bez przesady -- jakieś zajęcia/konsultacje (w formie zdalnej) powinny się odbyć... Inaczej to jest olewanie studenta i tyle.
@koszyk1: Co to za studia???

entry level
) niż studenci IT ;)

- Rejestracja:ponad 15 lat
- Ostatnio:około godziny
dajac tydzien na zostanie super mistrzami c++
Nie kłam. Tydzień temu dowiedziałaś się, że będziesz programować na studiach? Przedmiot nazywa się "historia ludów pierwotncyh", że to dla Ciebie takie zaskoczenie? Zadanie wymaga bardzo podstawowej znajomości języka, osoba która programowała w czymkolwiek wcześniej poradzi sobie z tym w jeden wieczór. Dla osoby całkowie zielonej tydzień to wystarczająca ilość czasu.

- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
jakbym nie chciala to bym nie pytala jak to zrobic, oczywiscie wcale nie wpisalam w google jak odliczac czas, teraz juz wszystko jasne, dzieki;))
a tak powaznie to dla mnie to jest czarna magia i to w ogole nie ma sensu, jak mam to zlozyc w calosc zeby po prostu ten czas sie odliczal po wlaczeniu i zatrzymywal jesli sie cos nacisnie...

- Rejestracja:około 6 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Warszawa 🐪
- Postów:1719
koszyk1 napisał(a):
Witam, mógłby mi ktoś pomóc zrobić najprostszy możliwy stoper?
Skoro chcesz pomocy a nie wyręczania, to pokaż co masz zrobione. Ktoś mógłby cię wyręczyć, ale na tym forum z reguły nie chcemy tak robić. Idąc na studia trzeba mieć świadomość, że będą zaliczenia.
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
Skąd w niektórych z was jest tyle jadu, jezu ludzie, nie każdy jest i chce być świetny w programowaniu:)
Studiuje matematykę (już widzę fale wiadomości, że to przecież jest związane z programowaniem - ja o tym wiem, gdyby zajęcia odbywały się normalnie, pewnie więcej bym z nich wyniosła), przedmiot ten zaczął się w tym semestrze, więc mieliśmy kilka zajęć, po których umiem napisać Hello world i zrobić równanie kwadratowe w waszym wielbionym c++. Teraz, gdy zajęcia są online (a raczej ich nie ma) dostajemy zadania do wykonania, z tego przedmiotu akurat bez żadnego wyjaśnienia co i jak. Próbuje się sama uczyć z jakimiś kursami na yt, rozumiem już niektóre pętle, czy funkcje ale jest to bardzo mało, w porównaniu z tym, co jest wymagane. Dlatego pytam o ten głupi stoper.
P.S: Nie no, myślałam, że na studiach to się nic nie robi i zdaje. Dzięki za uświadomienie, że to nie przedszkole. I jeśli według niektórych studia powinny wyglądać tak, że przychodzisz, dostajesz zagadnienia i radzisz sobie ze wszystkim sam, to życzę powodzenia waszym dzieciom w ich przyszłej edukacji.

- Rejestracja:około 6 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Warszawa 🐪
- Postów:1719
koszyk1 napisał(a):
Skąd w niektórych z was jest tyle jadu, jezu ludzie, nie każdy jest i chce być świetny w programowaniu:)
Akurat w tym wątku jeszcze nie ma jadu. "nie każdy jest i chce być świetny w programowaniu" - powiedz to prowadzącemu zajęcia, nie nam. Jak dla mnie przychodzisz na forum, chcesz czegoś od ludzi i jeszcze na nas narzekasz. Lubię pomagać, ale bez przesady.

- Rejestracja:około 11 lat
- Ostatnio:3 miesiące
- Postów:181
@koszyk1:
Po prostu post który napisałeś przypomina X innych w których konkretne osoby liczą tylko na gotowca, odniesienie wiele osób do pomocy mocno się zmienia wraz z wstawieniem choćby kawałka kodu ;)
Ode mnie dostałeś gotową instrukcję co masz zrobić, jedyne co musisz to przepisać to na C++.
Dostałeś od @several link gdzie możesz znaleźć książki w których mógł byś doczytać o pętlach, wprowadzaniu i wyprowadzaniu danych do/z programy.
Owszem, istnieje szansa że nasz wielbiony c++
ci się nie przyda (poza tym pisząc w kategorii C++
powinieneś się spodziewać fanów :) ), ale już sama umiejętność programowania (choćby żeby w przyszłości normalnie operować w Fortranie, matlabu bądź wolframie) i o zgrozo myślenia (w twoim problemie wymagane jest minimalne) już ci się może przydać.
Dlatego proponuję ci takie rozwiązanie:
Spróbuj zaimplementować to co wcześniej napisałem, jak staniesz na czymś to odpowiedz tutaj, a my ci podamy źródło do materiału gdzie uzyskasz wiedze.
Pamiętaj także że sarkazm źle wpływa na chęć pomocy z naszej strony ;)
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
No właśnie, jeszcze to dobre słowo. Chyba to forum jest przeznaczone również do tego, by prosić o pomoc, a dostałam jedną odpowiedź, która może się do czegoś przydać i którą sprawdzę, reszta to niepotrzebne komentarze. I nie narzekam na nikogo, ale jak ktoś odpowiada mi w sposób, jakby zapomniał, że sam kiedyś był na starcie z tym tematem, to dziękuje bardzo.

- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
plx211 napisał(a):
@koszyk1:
Po prostu post który napisałeś przypomina X innych w których konkretne osoby liczą tylko na gotowca, odniesienie wiele osób do pomocy mocno się zmienia wraz z wstawieniem choćby kawałka kodu ;)
Ode mnie dostałeś gotową instrukcję co masz zrobić, jedyne co musisz to przepisać to na C++.
Dostałeś od @several link gdzie możesz znaleźć książki w których mógł byś doczytać o pętlach, wprowadzaniu i wyprowadzaniu danych do/z programy.
Owszem, istnieje szansa że naszwielbiony c++
ci się nie przyda (poza tym pisząc w kategoriiC++
powinieneś się spodziewać fanów :) ), ale już sama umiejętność programowania (choćby żeby w przyszłości normalnie operować w Fortranie, matlabu bądź wolframie) i o zgrozo myślenia (w twoim problemie wymagane jest minimalne) już ci się może przydać.Dlatego proponuję ci takie rozwiązanie:
Spróbuj zaimplementować to co wcześniej napisałem, jak staniesz na czymś to odpowiedz tutaj, a my ci podamy źródło do materiału gdzie uzyskasz wiedze.
Pamiętaj także że sarkazm źle wpływa na chęć pomocy z naszej strony ;)
Postaram się, dziękuje bardzo, może ja też przesadzam, ale dla mnie to trudna sytuacja i jestem powoli tym załamana
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
``Więc po wielu próbach, błędach i łzach mam coś takiego i trzy pytanka (albo i więcej)
Czy ten czas odlicza się poprawnie? Czy czyszczenie ekranu z clear jest dobrze zrobione? Dlaczego kbhit nie działa? (chciałam, żeby zatrzymało się po wciśnięciu p i znowu zaczęło działać po wciśnięciu r) Czy można z tego kodu coś usunąć żeby wyglądał estetyczniej? (bo może coś jest niepotrzebne, a ja o tym nie wiem...)
[code]
#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
int hours = 0;
int minutes = 0;
int seconds = 0;
void displayClock()
{
void clear_screen()
;std::system("cls");
cout << setfill( ' ' ) << setw( 55 ) << " STOPER \n";
cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
cout << setfill( ' ' ) << setw( 29 );
cout << "| " << setfill( '0' ) << setw( 2 ) << hours << " hrs | ";
cout << setfill( '0' ) << setw( 2 ) << minutes << " min | ";
cout << setfill( '0' ) << setw( 2 ) << seconds << " sec |" << endl;
cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
}
void timer()
{
while( true ) {
time_t sekundy = time( 0 );
displayClock();
sleep( 1 );
seconds++;
if( seconds == 60 ) {
minutes++;
if( minutes == 60 ) {
hours++;
minutes = 0;
}
seconds = 0;
}
}
}
int main()
{
timer();
{
if(kbhit()){
auto got=getch();
if(got=='p'||got=='P'){
cout<<"PAUSED, R to resume.\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
do auto got=getch(); while(got!='r'&&got!='R');
}
}
}
return 0;
}
[/code]

- Rejestracja:prawie 10 lat
- Ostatnio:około 13 godzin
- Postów:530
Dlaczego kbhit nie działa?
Bo blokujesz sobie główny wątek w funkcji timer().
Pętla:
while( true )
{
.....
}
nigdy się nie skończy (*).
(*) Chyba że sam zamkniesz konsolę, wyłączysz komputer lub zabraknie prądu.

- Rejestracja:prawie 10 lat
- Ostatnio:około 13 godzin
- Postów:530
Jeżeli chcesz aby w trakcie odmierzania czasu, można było w miarę bezproblemowo obsługiwać wczytywanie danych z klawiatury, możesz wykorzystać wątki, tak jak to jest zrobione na poniższym przykładzie, działającym tylko pod windowsem.
#include <conio.h>
#include <stdio.h>
#include <iomanip>
#include <iostream>
#include <chrono>
#include <thread>
#include <memory>
#include <atomic>
using namespace std;
class CurrentTime
{
int hours {};
int minutes {};
int seconds {};
atomic<bool> pauseflag {false};
atomic<bool> endflag {false};
void tick()
{
++seconds;
if( seconds==60 ) { ++minutes ; seconds = 0; }
if( minutes==60 ) { ++hours ; minutes = 0; }
}
void display()
{
system("cls");
cout << setfill( ' ' ) << setw( 55 ) << " STOPER \n";
cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
cout << setfill( ' ' ) << setw( 29 );
cout << "| " << setfill( '0' ) << setw( 2 ) << hours << " hrs | ";
cout << setfill( '0' ) << setw( 2 ) << minutes << " min | ";
cout << setfill( '0' ) << setw( 2 ) << seconds << " sec |" << endl;
cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
}
void run()
{
while( endflag.load() == false )
{
if( pauseflag.load() == false )
{
display();
tick();
this_thread::sleep_for(chrono::seconds(1));
}
}
}
public:
void pause() { pauseflag.store(true); }
void resume() { pauseflag.store(false); }
void end() { endflag.store(true); }
thread start()
{
return thread( &CurrentTime::run , this );
}
};
int main()
{
auto timer = make_unique<CurrentTime>();
auto thread = timer->start();
char sign {};
while( sign != 'e' )
{
if( _kbhit() ) sign = _getch();
if( sign == 'p' ) timer->pause();
if( sign == 'r' ) timer->resume();
if( sign == 'e' ) timer->end();
}
thread.join();
return 0;
}

- Rejestracja:prawie 10 lat
- Ostatnio:około 13 godzin
- Postów:530
Można prościej.
int main()
{
bool ispause {false};
auto tzero {chrono::system_clock::to_time_t(chrono::system_clock::now())};
auto pause {chrono::system_clock::now()};
char sign {};
while( sign != 'e' )
{
if( !ispause )
{
auto time = chrono::system_clock::to_time_t(chrono::system_clock::now()) - tzero;
system("cls");
cout << put_time(gmtime(&time),"%H %M %S");
this_thread::sleep_for(chrono::seconds(1));
}
if( _kbhit() ) sign = _getch();
if( sign == 'p' )
{
pause = chrono::system_clock::now(); ispause = true; sign = ' ';
}
if( sign == 'r' )
{
tzero += (chrono::system_clock::to_time_t(chrono::system_clock::now())-chrono::system_clock::to_time_t(pause)); sign = ' ';
ispause = false;
}
}
return 0;
}
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
Okej, ale troszeczkę pozmieniałam na górze i nadal coś jest nie tak :(
#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <ctime>
#include <cstdlib>
#include <chrono>
using namespace std;
int hours = 0;
int minutes = 0;
int seconds = 0;
void displayClock()
{
void clear_screen();
std::system("cls");
cout << setfill( ' ' ) << setw( 55 ) << " STOPER \n";
cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
cout << setfill( ' ' ) << setw( 29 );
cout << "| " << setfill( '0' ) << setw( 2 ) << hours << " hrs | ";
cout << setfill( '0' ) << setw( 2 ) << minutes << " min | ";
cout << setfill( '0' ) << setw( 2 ) << seconds << " sec |" << endl;
cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
}
void timer()
{
{
auto startTime = std::chrono::system_clock::now();
while (true) {
displayClock();
sleep(1);
auto currentTime = std::chrono::system_clock::now();
seconds = std::chrono::duration<double>(currentTime - startTime).count();
hours = seconds / 3600;
seconds %= 3600;
minutes = seconds / 60;
seconds %= 60;
}
}
}
int main()
{
bool ispause {false};
auto tzero {chrono::system_clock::to_time_t(chrono::system_clock::now())};
auto pause {chrono::system_clock::now()};
char sign {};
while( sign != 'e' )
{
if( !ispause )
{
auto time = chrono::system_clock::to_time_t(chrono::system_clock::now()) - tzero;
system("cls");
cout << put_time(gmtime(&time),"%H %M %S");
this_thread::sleep_for(chrono::seconds(1));
}
if( _kbhit() ) sign = _getch();
if( sign == 'p' )
{
pause = chrono::system_clock::now(); ispause = true; sign = ' ';
}
if( sign == 'r' )
{
tzero += (chrono::system_clock::to_time_t(chrono::system_clock::now())-chrono::system_clock::to_time_t(pause)); sign = ' ';
ispause = false;
}
}
}
timer();
return 0;
}
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:11
main.cpp:63:13: error: ‘this_thread’ has not been declared
this_thread::sleep_for(chrono::seconds(1));
^~~~~~~~~~~
main.cpp:65:20: error: ‘_kbhit’ was not declared in this scope
if( _kbhit() ) sign = _getch();
takie błędy się pojawiają....

- Rejestracja:około 11 lat
- Ostatnio:3 miesiące
- Postów:181
main.cpp:63:13: error: ‘this_thread’ has not been declared
this_thread::sleep_for(chrono::seconds(1));
brakuje std::
lub #include <thread>
https://en.cppreference.com/w/cpp/header/thread
main.cpp:65:20: error: ‘_kbhit’ was not declared in this scope
if( _kbhit() ) sign = _getch();
znów zapewne brakuje includa
https://docs.microsoft.com/pl-pl/cpp/c-runtime-library/reference/kbhit?view=vs-2019
- Rejestracja:około 6 lat
- Ostatnio:około 7 godzin
- Postów:214
W ogóle nie czytasz co ludzie do ciebie piszą.
while (true)
Już była informacja ,że taka pętla blokuje główny wątek a ty dalej jej używasz.
sleep(1);
Ta linia powoduje uśpienie na 1 ms nie na 1s. Ogólnie to funkcja stoper jest ci w tym momencie zbędna.
A co do błędu zapewne brakuje ci #include <conio.h>