0949 - Calendar 3: Difference between revisions
Pagină nouă: == Cerinta == Dându-se o dată calendaristică și un număr nr de zile, să se determine care este data aflată la o diferență de nr de zile. == Date de intrare == Programul citește de la tastatură 3 numere naturale Z, L și A, reprezentând ziua, luna si anul curent, iar pe al doilea rând numărul nr de zile. == Date de iesire == Programul va afișa pe ecran 3 numere naturale ZI, LUNA, AN reprezentând data cerută. == Restrictii si precizari == *-100.000 ≤ n... |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură 3 numere naturale Z, L și A, reprezentând ziua, luna si anul curent, iar pe al doilea rând numărul nr de zile. | Programul citește de la tastatură 3 numere naturale '''Z, L și A''', reprezentând ziua, luna si anul curent, iar pe al doilea rând numărul nr de zile. | ||
== Date de iesire == | == Date de iesire == | ||
Programul va afișa pe ecran 3 numere naturale ZI, LUNA, AN reprezentând data cerută. | Programul va afișa pe ecran 3 numere naturale '''ZI, LUNA, AN''' reprezentând data cerută. | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*-100.000 | *-100.000 ⩽ nr ⩽ 100000 | ||
*Datele calendaristice din fișierul de intrare sunt între 1 ianuarie 1900 și 31 decembrie 2100 | *Datele calendaristice din fișierul de intrare sunt între 1 ianuarie 1900 și 31 decembrie 2100 | ||
*Nu se vor fi date calendaristice invalide precum 29 februarie 2015 sau 31 noiembrie 1980 | *Nu se vor fi date calendaristice invalide precum 29 februarie 2015 sau 31 noiembrie 1980 | ||
Line 23: | Line 23: | ||
:15 | :15 | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
:21 1 2015 | :21 1 2015 | ||
Line 31: | Line 31: | ||
:25 | :25 | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
Line 37: | Line 37: | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def adauga_zile(Z, L, A, nr_zile): | def adauga_zile(Z, L, A, nr_zile): | ||
# | # Functie pentru a adauga un numar de zile la o data calendaristica | ||
zile_luna = | zile_luna = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] | ||
while nr_zile > 0: | |||
zile_luna[2] = 29 if (A % 4 == 0 and A % 100 != 0) or (A % 400 == 0) else 28 | |||
Z += 1 | |||
if Z > zile_luna[L]: | |||
Z = 1 | |||
L += 1 | |||
if L > 12: | |||
L = 1 | |||
A += 1 | |||
nr_zile -= 1 | |||
return Z, L, A | return Z, L, A | ||
def | def verifica_restrictii(Z, L, A, nr_zile): | ||
# | if ( | ||
1 <= Z <= 31 | |||
and 1 <= L <= 12 | |||
and 1900 <= A <= 2100 | |||
and -100000 <= nr_zile <= 100000 | |||
): | |||
return True | |||
else: | |||
return False | |||
# Citire date de intrare | |||
Z, L, A = map(int, input().split()) | |||
nr_zile = int(input()) | |||
# Verificare restricții | |||
if verifica_restrictii(Z, L, A, nr_zile): | |||
# Rezolvare și afișare rezultat | |||
zi_noua, luna_noua, an_nou = adauga_zile(Z, L, A, nr_zile) | |||
print("Datele introduse corespund restrictiilor impuse") | |||
print(f"{zi_noua} {luna_noua} {an_nou}") | |||
else: | |||
print("Date de intrare nevalide!") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 12:14, 29 December 2023
Cerinta[edit | edit source]
Dându-se o dată calendaristică și un număr nr de zile, să se determine care este data aflată la o diferență de nr de zile.
Date de intrare[edit | edit source]
Programul citește de la tastatură 3 numere naturale Z, L și A, reprezentând ziua, luna si anul curent, iar pe al doilea rând numărul nr de zile.
Date de iesire[edit | edit source]
Programul va afișa pe ecran 3 numere naturale ZI, LUNA, AN reprezentând data cerută.
Restrictii si precizari[edit | edit source]
- -100.000 ⩽ nr ⩽ 100000
- Datele calendaristice din fișierul de intrare sunt între 1 ianuarie 1900 și 31 decembrie 2100
- Nu se vor fi date calendaristice invalide precum 29 februarie 2015 sau 31 noiembrie 1980
- Dacă nr este negativ, data cerută se afla înaintea cele curente.
Exemplul 1[edit | edit source]
- Intrare
- 6 1 2015
- 15
- Iesire
- Datele introduse corespund restrictiilor impuse
- 21 1 2015
Exemplul 2[edit | edit source]
- Intrare
- 29 2 2015
- 25
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def adauga_zile(Z, L, A, nr_zile):
# Functie pentru a adauga un numar de zile la o data calendaristica zile_luna = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
while nr_zile > 0: zile_luna[2] = 29 if (A % 4 == 0 and A % 100 != 0) or (A % 400 == 0) else 28 Z += 1
if Z > zile_luna[L]: Z = 1 L += 1
if L > 12: L = 1 A += 1
nr_zile -= 1
return Z, L, A
def verifica_restrictii(Z, L, A, nr_zile):
if ( 1 <= Z <= 31 and 1 <= L <= 12 and 1900 <= A <= 2100 and -100000 <= nr_zile <= 100000 ): return True else: return False
- Citire date de intrare
Z, L, A = map(int, input().split()) nr_zile = int(input())
- Verificare restricții
if verifica_restrictii(Z, L, A, nr_zile):
# Rezolvare și afișare rezultat zi_noua, luna_noua, an_nou = adauga_zile(Z, L, A, nr_zile) print("Datele introduse corespund restrictiilor impuse") print(f"{zi_noua} {luna_noua} {an_nou}")
else:
print("Date de intrare nevalide!")
</syntaxhighlight>