1013 - Aniversari: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == 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 == 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 == Programul va afișa pe...
 
 
(2 intermediate revisions by 2 users not shown)
Line 9: Line 9:
* cele '''n''' date calendaristice sunt corecte
* 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
* dacă există două sau mai multe persoane cele mai tinere (în vârstă) se va afișa numărul de ordine mai mic
== Exemplu ==
== Exemplul 1 ==
; Intrare
; Intrare
: 5
5
: 1998 5 26
1998 5 26
: 1987 12 18
1987 12 18
: 1987 9 25
1987 9 25
: 2015 1 16
2015 1 16
: 2015 1 8
2015 1 8
; Ieșire
; Ieșire
: 4 3
Datele introduse corespund restricțiilor impuse.
4 3
<br>
 
== Exemplul 2 ==
; Intrare
2
12 7 1990
14 2 2000
; Ieșire
Datele introduse nu corespund restricțiilor impuse.
<br>
 
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def persoane():
# 1013  Aniversari
     # Citim numărul de persoane
def validare(n_val, date_nastere_s):
     n = int(input())
     # 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
     # Inițializăm datele celei mai tinere și celei mai în vârstă persoane
     data_tanar = (0, 0, 0)
     data_tanar = (0, 0, 0)
     data_batran = (9999, 12, 31)
     data_batran = (9999, 12, 31)
     nr_tanar = nr_batran = 0
     numar_tanar = numar_batran = 0
 
    # Parcurgem fiecare persoană
    for i in range(1, n+1):
        # Citim data de naștere a persoanei
        an, luna, zi = map(int, input().split())


    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ă
         # Dacă persoana este mai tânără decât cea mai tânără persoană curentă
         if (an, luna, zi) > data_tanar:
         if (anul, luna_nastere, zi_nastere) > data_tanar:
             # Actualizăm data celei mai tinere persoane și numărul său de ordine
             # Actualizăm data celei mai tinere persoane și numărul său de ordine
             data_tanar = (an, luna, zi)
             data_tanar = (anul, luna_nastere, zi_nastere)
             nr_tanar = i
             numar_tanar = i + 1
 
         # Dacă persoana este mai în vârstă decât cea mai în vârstă persoană curentă
         # Dacă persoana este mai în vârstă decât cea mai în vârstă persoană curentă
         if (an, luna, zi) < data_batran:
         if (anul, luna_nastere, zi_nastere) < data_batran:
             # Actualizăm data celei mai în vârstă persoane și numărul său de ordine
             # Actualizăm data celei mai în vârstă persoane și numărul său de ordine
             data_batran = (an, luna, zi)
             data_batran = (anul, luna_nastere, zi_nastere)
             nr_batran = i
             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


    # Afișăm numărul de ordine al celei mai tinere și al celei mai în vârstă persoană
        # Citim data de naștere a fiecărei persoane de la utilizator
    print(nr_tanar, nr_batran)
        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))


persoane()
        # 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>
</syntaxhighlight>

Latest revision as of 13:39, 1 December 2023

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>