2004 - Ore: Difference between revisions

From Bitnami MediaWiki
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 '''ore.in''' 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)'''.
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 '''ore.out''' 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)'''.
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
== Exemplu ==
== Exemplul 1 ==
; ore.in
; orein.txt
: 3 35 55
: 3 35 55
: 2 40 8
: 2 40 8
; ore.out
; 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>
# Citirea datelor din fișier
# 2004  Ore
h1, m1, s1, h2, m2, s2 = map(int, open('ore.in').read().split())
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")


# Calcularea duratelor în secunde și a sumei lor
sec1, sec2 = h1 * 3600 + m1 * 60 + s1, h2 * 3600 + m2 * 60 + s2
total_sec = sec1 + sec2


# Conversia sumei duratelor înapoi în ore, minute și secunde
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


# Scrierea rezultatelor în fișier
 
with open('ore.out', 'w') as f:
if __name__ == '__main__':
    f.write(f'{h1}: {m1}: {s1}\n{h2}: {m2}: {s2}\n{sec1}\n{sec2}\n{total_o}: {total_m}: {total_s}\n')
    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>

  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>