2004 - Ore: Difference between revisions
Pagină nouă: == 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, exprim... |
No edit summary |
||
Line 5: | Line 5: | ||
* c) pe următoarea linie suma obţinută din adunarea duratelor celor două evenimente, exprimată în ore, minute, secunde, în formatul '''h: m: s'''. | * 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 == | == Date de intrare == | ||
Fișierul 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 == | == Date de ieşire == | ||
Fișierul 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 == | == Restricții și precizări == | ||
* 1 ⩽ h ⩽ 24 | * 1 ⩽ h ⩽ 24 | ||
* 0 ⩽ m ⩽ 60 | * 0 ⩽ m ⩽ 60 | ||
* 0 ⩽ s ⩽ 60 | * 0 ⩽ s ⩽ 60 | ||
== | == Exemplul 1 == | ||
; | ; orein.txt | ||
: 3 35 55 | : 3 35 55 | ||
: 2 40 8 | : 2 40 8 | ||
; | ; oreout.txt | ||
: Datele de intrare corespund restrictiilor impuse | |||
: 3: 35: 55 | : 3: 35: 55 | ||
: 2: 40: 8 | : 2: 40: 8 | ||
Line 22: | Line 23: | ||
: 9608 | : 9608 | ||
: 6: 16: 3 | : 6: 16: 3 | ||
<br> | |||
== Exemplul 2 == | |||
; orein.txt | |||
: 9 55 70 | |||
: 12 1 99 | |||
; oreout.txt | |||
: Datele de intrare nu corespund restrictiilor impuse | |||
<br> | |||
== Explicaţii == | == Explicaţii == | ||
În fișierul de intrare sunt detaliile referitoare la duratele cele două evenimente, iar suma lor este '''6: 16: 3'''. | În fișierul de intrare sunt detaliile referitoare la duratele cele două evenimente, iar suma lor este '''6: 16: 3'''. | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | # 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): | ||
total_o, total_sec = divmod(total_sec, 3600) | # Calculăm durata în secunde pentru fiecare eveniment | ||
total_m, total_s = divmod(total_sec, 60) | 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> | </syntaxhighlight> |
Latest revision as of 15:15, 11 November 2023
Cerinţa[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
- 1 ⩽ h ⩽ 24
- 0 ⩽ m ⩽ 60
- 0 ⩽ s ⩽ 60
Exemplul 1[edit | edit source]
- 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[edit | edit source]
- orein.txt
- 9 55 70
- 12 1 99
- oreout.txt
- Datele de intrare nu corespund restrictiilor impuse
Explicaţii[edit | edit source]
În fișierul de intrare sunt detaliile referitoare la duratele cele două evenimente, iar suma lor este 6: 16: 3.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 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>