Strefa czasowa w c++

Strefa czasowa w c++
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Co muszę poprawić w programie, aby zamiast wskazywać wartość ujemną, wskazywało wartość dodatnią (godzinę)?
Tylko proszę bez żadnych skomplikowanych funkcji, musi być tak na poziomie 1 liceum (informatyka rozszerzona).

Kopiuj
#include <iostream>
using namespace std;
int godz_nj(int g) {
return(g-6)%24;
}
int main() {
cout << godz_nj(18) << endl;
cout << godz_nj(2) << endl;
return 0;
}
stivens
  • Rejestracja: dni
  • Ostatnio: dni
1

Nie rozumiem. W jaki sposob ma dzialac to mapowanie? To jest godzina w Nowym Jorku (nj) czy jak?

Jesli o to wlasnie chodzi no to zrob tak jak robisz sobie w glowie. Jesli odejmiesz te 6h i wychodzi liczba wieksza rowno 0 no to wszystko jest git. Jak wychodzi cos ujemnego to znaczy, ze jest godzina |wynik| przed polnoca.

Kopiuj
h = g - 6
if h < 0: h = 24 + h
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
3
Kopiuj
#include "tz.h"
#include <iostream>

int
main()
{
    using namespace std::chrono;
    std::cout << date::make_zoned("Asia/Singapore", system_clock::now()) << '\n';
}
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
4

Dragon podał overkill-a, a generalnie chodzi o to, że dzielenie liczb całkowitych zaokrągla w stronę zera (więc reszta dla ujemnych jest troszkę inna, niż oczekuje).
Więc najprostsza poprawka (nie uogólniona), to po prostu:

Kopiuj
int godz_nj(int g) {
    return (g + 24 - 6)%24;
}

overkill w wersji standardowej:

Kopiuj
int godz_nj(int g) {
    std::tm t{};
    t.tm_hour = g - 6;
    std::mktime(&t);
    return t.tm_hour;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.