Strefa czasowa w c++

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).

#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;
}
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.

h = g - 6
if h < 0: h = 24 + h
3
#include "tz.h"
#include <iostream>

int
main()
{
    using namespace std::chrono;
    std::cout << date::make_zoned("Asia/Singapore", system_clock::now()) << '\n';
}
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:

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

overkill w wersji standardowej:

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

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