2004 - Ore

From Bitnami MediaWiki
Revision as of 15:15, 11 November 2023 by AntalKrisztian (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Se consideră două evenimente a căror durată este exprimată fiecare prin câte trei numere naturale: ore (h), minute (m) şi secunde (s).Să se scrie în fișierul de ieșire:

  • a) pe primele două linii, duratele în formatul h: m: s
  • b) pe următoarele două linii, duratele exprimate în secunde, corespunzătoare fiecăruieveniment, pe rânduri separate;
  • c) pe următoarea linie suma obţinută din adunarea duratelor celor două evenimente, exprimată în ore, minute, secunde, în formatul h: m: s.

Date de intrare

Fișierul de intrare orein.txt conține două linii pe care sunt scrise câte trei numere naturale, separate prin câte un spaţiu, reprezentând duratele a două evenimente exprimate în: ore (h), minute (m) şi secunde (s).

Date de ieşire

Fișierul de ieșire oreout.txt va conține pe primele două linii răspuncul de la cerința a), apoi pe liniile 3 și 4 răspunsul la cerința b), iar pe a 5-a linie răspunsul la cerința c).

Restricții și precizări

  • 1 ⩽ h ⩽ 24
  • 0 ⩽ m ⩽ 60
  • 0 ⩽ s ⩽ 60

Exemplul 1

orein.txt
3 35 55
2 40 8
oreout.txt
Datele de intrare corespund restrictiilor impuse
3: 35: 55
2: 40: 8
12955
9608
6: 16: 3


Exemplul 2

orein.txt
9 55 70
12 1 99
oreout.txt
Datele de intrare nu corespund restrictiilor impuse


Explicaţii

În fișierul de intrare sunt detaliile referitoare la duratele cele două evenimente, iar suma lor este 6: 16: 3.

Rezolvare

<syntaxhighlight lang="python" line>

  1. 2004 Ore

def validare(event1_validare, event2_validare):

   for event in [event1_validare, event2_validare]:  # Parcurgem lista de evenimente
       h, m, s = event
       # Verificăm dacă orele sunt în intervalul 1-24
       if h < 1 or h > 24:
           raise ValueError
       # Verificăm dacă minutele sunt în intervalul 0-60
       if m < 0 or m > 60:
           raise ValueError
       # Verificăm dacă secundele sunt în intervalul 0-60
       if s < 0 or s > 60:
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def calculeaza_durata(event1, event2):

   # Calculăm durata în secunde pentru fiecare eveniment
   sec1 = event1[0] * 3600 + event1[1] * 60 + event1[2]
   sec2 = event2[0] * 3600 + event2[1] * 60 + event2[2]
   # Calculăm suma duratelor
   total_sec = sec1 + sec2
   # Convertim suma duratelor înapoi în ore, minute și secunde
   total_o, total_sec = divmod(total_sec, 3600)
   total_m, total_s = divmod(total_sec, 60)
   return sec1, sec2, total_o, total_m, total_s


if __name__ == '__main__':

   file_in = open("orein.txt", "r")
   file_out = open("oreout.txt", "w")
   try:
       # Citim datele pentru fiecare eveniment
       event1_main = list(map(int, file_in.readline().split()))
       event2_main = list(map(int, file_in.readline().split()))
       # Validăm datele de intrare
       validare(event1_main, event2_main)
       # Calculăm durata în secunde și suma duratelor
       sec1_main, sec2_main, total_o_main, total_m_main, total_s_main = calculeaza_durata(event1_main, event2_main)
       # Scriem rezultatele în fișierul de ieșire
       file_out.write(f'{event1_main[0]}: {event1_main[1]}: {event1_main[2]}\n')
       file_out.write(f'{event2_main[0]}: {event2_main[1]}: {event2_main[2]}\n')
       file_out.write(f'{sec1_main}\n{sec2_main}\n')
       file_out.write(f'{total_o_main}: {total_m_main}: {total_s_main}\n')
   # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")
   # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>