Przechowywanie czasu w tablicy dynamicznej

0

Cześć, otrzymałem zadanie na stworzenie programu który przechowywał by w dynamicznej tablicy czasy z biegu w formacie GGSS
Niestety nie wiem jak zabrać się na zmienną czasu w jakim formacie powinna ona być żeby można było na niej potem wykonywać operacje np. wyciągnięcie najszybszego wyniku.
Jakieś podpowiedzi? Z góry dziękuje. :)

2

http://en.cppreference.com/w/cpp/chrono
Tutaj masz bibliotekę od czasu.

np. wyciągnięcie najszybszego wyniku.

Co to znaczy?

0

Dla ułatwienia treść zadania:
Wczytaj od użytkownika liczbę n. Zadeklaruj dynamiczną tablicę, w której przechowasz dane z wynikami czasu. Formacie GGSS, gdzie GG - to ilość godzin, MM - ilość minut, SS - ilość sekund. Wyświetl najkrótszy czas na ekranie.
Przykładowe dane wejściowe: 4
1001
0305
0401
0309
Oczekiwane wyjście:
0305

Spróbuje skorzystać z waszych propozycji, mam nadzieje że się uda.

6

Przy okazji, mam nadzieję, że wykładowca przez "dynamiczną tablicę" rozumie std::vector.

A tak swoją drogą, to patrząc na warunki zadania to nie wiem, czy nie łatwiej by było zastosować strukturę/tuple 3 intów zamiast parsować czas do typów z chrono, a następnie je formatować.

0
kq napisał(a):

Przy okazji, mam nadzieję, że wykładowca przez "dynamiczną tablicę" rozumie std::vector.

A tak swoją drogą, to patrząc na warunki zadania to nie wiem, czy nie łatwiej by było zastosować strukturę/tuple 3 intów zamiast parsować czas do typów z chrono, a następnie je formatować.

Tylko jak w intach zapisać czas w podanym formacie?

1

Wczytujesz 3 inty, do jakiegoś tupla albo struktury

struct dur
{
    int g;
    int m;
    int s;
};

bool operator<(dur const& l, dur const& r)
{
    return std::tie(l.g, l.m, l.s) < std::tie(r.g, r.m, r.s);
}

Teraz sortowanie i wypisywanie jest trywialne.

5

Oj.. .najciemniej pod latarnią. W zasadzie polecenie jest tak skonstruowane że wystarczy zadbać o format string'a z czasem ( GGSS ) i sortować kontener ze .... string'ami :) To wystarczy by znaleźć najniższy czas :) Obsługa samego czasu (chrono, ctime itp... ) nie jest potrzebna. Tylko ew. nad sprawdzeniem formatu np. w regexp bym się zastanowił.

0
Mokrowski napisał(a):

Oj.. .najciemniej pod latarnią. W zasadzie polecenie jest tak skonstruowane że wystarczy zadbać o format string'a z czasem ( GGSS ) i sortować kontener ze .... string'ami :) To wystarczy by znaleźć najniższy czas :) Obsługa samego czasu (chrono, ctime itp... ) nie jest potrzebna. Tylko ew. nad sprawdzeniem formatu np. w regexp bym się zastanowił.

Udało mi się stworzyć ten kontener i ładnie dane się dodają do tablicy.
Niestety nie wiem jak sortować te stringi, znalazłem inny wątek : https://4programmers.net/Forum/C_i_C++/242902-porownywanie_liczb_c++, ale nie wiem jak go zastosować do moich potrzeb, jakieś porady?

Dziękuje wszystkim za dotychczasową pomoc.

2

http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp

std::string first = "10:01:01";
std::string second = "03:59:05";
std::cout << (first < second) << '\n'; // false
0

Jedyny problem tu jest taki, że liczby muszą być konkretnie 2-cyfrowe.

0
#include <iostream>
#include <vector>
#include <string>

using namespace std;



int main() {
	
	int t_elements;
	string  x;
	string temp="0"; 
	cout<<"Podaj ilosc elementow tablicy:";
	cin>>t_elements;

	vector <string> tab;
	tab.resize(t_elements);

	cout<<"Wprowadz czasy z maratonu:\n";
	for (int i=1; i<=t_elements; i++)
	 {	
	 	cin>>x;
	 	tab.push_back(x);
	 }
	 
	 for (int i=1; i<=tab.size(); i++)
	 {
	 	//cout<<tab[i]<<"\n";
	 	if (tab[i]<tab[i+1]) 
	 		temp = tab[i];
	 		 cout << temp;
	 }
	  
	return 0; 	

}

Jest prawie idealnie, niestety w wyniku podaje mi prawidłowy wynik dwa razy i dwa zera na początku - próbowałem przenieść cout'a poza pętle ale wtedy nic nie wyświetla.
Macie jakieś pomysły?

0
for (int i=1; i<=tab.size(); i++)
     {
        //cout<<tab[i]<<"\n";
        if (tab[i]<tab[i+1]) 
            temp = tab[i];
             cout << temp;
     } 

W tym fragmencie masz out_of_range.
Tablica ma indeksy od 0 do size - 1.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {

   int t_elements;
   cout << "Podaj ilosc elementow tablicy:";
   cin >> t_elements;

   vector <string> tab;

   string current_time;
   cout << "Wprowadz czasy z maratonu:\n";
   for (int i = 0; i < t_elements; i++) {
      cin >> current_time;
      // if(time_is_correct)
      tab.push_back(current_time);
   }

   string min_time;
   for (int i = 1; i < tab.size(); i++) {      
      if (tab[i - 1] < tab[i]) {
         min_time = tab[i - 1];
      }      
   }
   cout << min_time;

   return 0;

}

https://wandbox.org/permlink/EdJvQmMcgz9rsODa

1 użytkowników online, w tym zalogowanych: 0, gości: 1