0949 - Calendar 3: Difference between revisions

From Bitnami MediaWiki
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 nr 100000
*-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
: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
: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):
     # Dicționar cu numărul de zile în fiecare lună
     # 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]
        1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30,
        7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31
    }


     # Adăugăm numărul de zile
     while nr_zile > 0:
    Z += nr_zile
        zile_luna[2] = 29 if (A % 4 == 0 and A % 100 != 0) or (A % 400 == 0) else 28
        Z += 1


    while Z > zile_luna[L]:
        if Z > zile_luna[L]:
        Z -= zile_luna[L]
            Z = 1
        L += 1
            L += 1


        if L > 12:
            if L > 12:
            L = 1
                L = 1
            A += 1
                A += 1
 
        nr_zile -= 1


     return Z, L, A
     return Z, L, A


def main():
def verifica_restrictii(Z, L, A, nr_zile):
     # Citirea datelor de intrare
     if (
    Z, L, A = map(int, input("Introduceti data (Z L A): ").split())
        1 <= Z <= 31
     nr_zile = int(input("Introduceti numarul de zile: "))
        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!")


    # Calcularea și afișarea datei la diferența de zile specificată
    rezultat = adauga_zile(Z, L, A, nr_zile)
    print(f"{rezultat[0]} {rezultat[1]} {rezultat[2]}")


if __name__ == "__main__":
    main()


</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
  1. Citire date de intrare

Z, L, A = map(int, input().split()) nr_zile = int(input())

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