1013 - Aniversari

From Bitnami MediaWiki
Revision as of 13:39, 1 December 2023 by Hotico Iulia Denisa (talk | contribs) (→‎Exemplul 2)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Se dau datele de naștere a n persoane, numerotate de la 1 la n, în forma an luna zi. Să se determine numărul de ordine al celei mai tinere și al celei mai în vârstă persoană dintre cele date.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n triplete de numere naturale a l z, reprezentând anul, luna și ziua de naștere a fiecărei persoane.

Date de ieşire[edit | edit source]

Programul va afișa pe ecran două numere p q, reprezentând numărul de ordine al celei mai tinere, respectiv al celei mai în vârstă persoană.

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 1000
  • cele n date calendaristice sunt corecte
  • dacă există două sau mai multe persoane cele mai tinere (în vârstă) se va afișa numărul de ordine mai mic

Exemplul 1[edit | edit source]

Intrare
5
1998 5 26
1987 12 18
1987 9 25
2015 1 16
2015 1 8
Ieșire
Datele introduse corespund restricțiilor impuse.
4 3


Exemplul 2[edit | edit source]

Intrare
2
12 7 1990
14 2 2000
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1013 Aniversari

def validare(n_val, date_nastere_s):

   # Verificăm dacă numărul de persoane este în intervalul [1, 1000]
   if 1 <= n_val <= 1000:
       # Verificăm dacă data de naștere a fiecărei persoane este validă
       for an1, luna1, zi1 in date_nastere_s:
           # Data de naștere este validă dacă anul este între 1 și 9999, luna între 1 și 12, și ziua între 1 și 31
           if not(1 <= an1 <= 9999 and 1 <= luna1 <= 12 and 1 <= zi1 <= 31):
               # Dacă data de naștere nu este validă, ridicăm o excepție
               raise ValueError
       # Dacă toate datele de naștere sunt valide, returnăm numărul de persoane
       return n_val
   else:
       # Dacă numărul de persoane nu este în intervalul [1, 1000], ridicăm o excepție
       raise ValueError


def persoane(numar, data_nastere):

   # Inițializăm datele celei mai tinere și celei mai în vârstă persoane
   data_tanar = (0, 0, 0)
   data_batran = (9999, 12, 31)
   numar_tanar = numar_batran = 0
   for i in range(numar):    # Parcurgem fiecare persoană
       anul, luna_nastere, zi_nastere = data_nastere[i]    # Extragem data de naștere a persoanei
       # Dacă persoana este mai tânără decât cea mai tânără persoană curentă
       if (anul, luna_nastere, zi_nastere) > data_tanar:
           # Actualizăm data celei mai tinere persoane și numărul său de ordine
           data_tanar = (anul, luna_nastere, zi_nastere)
           numar_tanar = i + 1
       # Dacă persoana este mai în vârstă decât cea mai în vârstă persoană curentă
       if (anul, luna_nastere, zi_nastere) < data_batran:
           # Actualizăm data celei mai în vârstă persoane și numărul său de ordine
           data_batran = (anul, luna_nastere, zi_nastere)
           numar_batran = i + 1
   return numar_tanar, numar_batran


if __name__ == "__main__":

   try:
       n = input("Introduceti numarul de persoane: ")    # Citim numărul de persoane de la utilizator
       date_nastere = []    # Inițializăm lista de date de naștere
       # Citim data de naștere a fiecărei persoane de la utilizator
       for _ in range(int(n)):
           an, luna, zi = map(int, input("Introduceti data de nastere a persoanei (an luna zi): ").split())
           date_nastere.append((an, luna, zi))
       # Validăm numărul de persoane și datele de naștere
       n = validare(int(n), date_nastere)
       print("Datele introduse corespund restricțiilor impuse.")
       nr_tanar, nr_batran = persoane(n, date_nastere)
       print(f"{nr_tanar} {nr_batran}")
   except ValueError:
       print("Datele introduse nu corespund restricțiilor impuse.")

</syntaxhighlight>