Beginner - algorytm

Odpowiedz Nowy wątek
2018-09-19 08:42
0

Czołem,
proszę o wyrozumiałość, jestem na początku drogi :-)

Mam takie zadanie:
Stwórz algorytm decyzyjny na blokach dla:

Dziś jest data D, M, R. Jaka data była wczoraj? Jaka data będzie jutro?

Nie oczekuję rozwiązania, choć nie pogardzę, ale naprowadzenia na tok myślowy:-)
Jak ogarnąć lata przestępne ?

Co prawda mam klauzulę: Jeśli istnieje potrzeba uściślenia sformułowania któregoś z zadań, uczyń to.
Może trzeba zdecydować i wybrać konkretny rok? miesiąc ?

Pozostało 580 znaków

2018-09-19 10:22
1

Potraktuj datę wysokopoziomowo.

Jeśli wybrano, że chcę datę wczorajszą, zwróć obecną datę minus jeden dzień.
Jeśli wybrano, że chcę datę jutrzejszą, zwróć obecną datę plus jeden dzień.

Biblioteka do dat w większości popularnych języków programowania obsługuje takie operacje ;)
Np. https://ideone.com/Xh4pM3

Pozostało 580 znaków

2018-09-19 10:42
0

Tak mi się widzi, że można by stworzyć obiekt: Date i operować na nim, tam byłyby właśnie informacje czy rok jest przestępny, ile dni ma luty. Trzeba by też wprowadzić jakąś datę początkową, Kalendarz Gregoriański nie jest od zawsze:).
Co do przestępnośći, to łatwo znaleźć zależność, rok jest przestępny gdy:

  • jest podzielny przez 4, ale nie jest podzielny przez 100 lub;
  • jest podzielny przez 400.

edytowany 1x, ostatnio: lion137, 2018-10-02 15:27

Pozostało 580 znaków

2018-09-19 10:44
0

Dzięki za porady.
Jak sensownie rozpisać ten algorytm w blokach?

Pozostało 580 znaków

2018-09-19 10:50
0

Na wejściu jest data, funkcja pyta o poprzednia lub następną, a potem blok decyzyjny który musi uwzględnić trochę warunków. Najlepiej wyobraź sobie wcześniej jak najwięcej przypadków testowych.


edytowany 1x, ostatnio: lion137, 2018-09-19 10:50

Pozostało 580 znaków

2018-09-26 20:59
1

Jak już zaprogramujesz algorytm wyznaczający poprzedni i następny dzień, to dodaj sobie algorytm Tomohiko Sakamoto bardzo fajny jest i wyznacza jaki jest dzień tygodnia :)


Każdy programista przybywający z innego miasta jest fachowcem.

Pozostało 580 znaków

2018-09-26 22:29

Na pewno będziesz potrzebował tablicy z liczbą dni poszczególnych miesięcy

int[] numberDaysInMonths = {31,28,31,30,31,30,31,31,30,31,30,31};

i sprawdzenie czy rok jest przystępny i jeżeli tak to zmiana 28 na 29.

if(year%400==0) numberDaysInMonths[1] = 29;
if(year%4==0&&year%100!=0) numberDaysInMonths[1] = 29;

później sprawdzasz dzień jeżeli jest większe od 1 i mniejsze od elementu w tablicy wskazującego liczbę dni w tym miesiącu, to masz następny +1, a poprzedzający -1
itd...


Każdy programista przybywający z innego miasta jest fachowcem.

Pozostało 580 znaków

2018-10-02 15:22
V-2
0
lion137 napisał(a):

Co do przestępnośći, to łatwo znaleźć zależność, rok jest przestępny gdy:

  • jest podzielny przez 4, ale nie jest podzielny przez 100 oraz;
  • jest podzielny przez 400.

Nie "oraz", tylko "lub".


Nie ma najmniejszego powodu, aby w CV pisać "email" przed swoim adresem mailowym, "imię i nazwisko" przed imieniem i nazwiskiem" ani "zdjęcie mojej głowy od przedniej strony" obok ewentualnego zdjęcia.
No tak, dzięks, edit. - lion137 2018-10-02 15:25
Oczywiście wiem, że to miałeś na myśli, ale - skrzywienie zawodowe ;) - V-2 2018-10-02 15:25
Rozumiem, "lub", "oraz", dwa różne słowa, inna ilość liter...:) - lion137 2018-10-02 15:28
@lion137: precyzja w wyrażaniu się jest w tym przypadku jak najbardziej na miejscu, bo potem ktoś inny przeczyta, źle zrozumie i napisze błędny kod. - Azarien 2018-10-02 17:48
"and" vs "or" @lion137 - V-2 2018-10-02 21:50

Pozostało 580 znaków

2018-10-02 15:48
1

Dziś jest data D, M, R. Jaka data była wczoraj? Jaka data będzie jutro?

Znajdź wzór na Julian Day.
Wyliczasz JD z D/M/R, dodajesz 1, wyliczasz D/M/R z JD korzystając ze wzoru odwrotnego.

lion137 napisał(a):

Trzeba by też wprowadzić jakąś datę początkową, Kalendarz Gregoriański nie jest od zawsze:).

Data początkowa w Polsce to 14.10.1582.

edytowany 1x, ostatnio: Azarien, 2018-10-02 16:00

Pozostało 580 znaków

2018-10-06 19:31
hehej
0

Takie coś na piechotę można zrobić - szkoda się bawić w liczenie dni...

d--;
if( d == 0 )
m--; if( m == 0 ) rok--
itd.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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