1815 - Unghi: Difference between revisions
Pagină nouă: La geometrie, domnul profesor de matematică le-a vorbit elevilor săi despre unghiuri. Pentru a fi sigur că aceștia au înțeles noțiunile predate, le-a dat o listă cu n probleme. == Cerinţa == Fiind date numărul de ore în variabila '''h''' și numărul de minute în variabila '''m''', să se determine câte grade avea unghiul dintre orarul și minutarul unui ceas clasic, la ora '''h''' şi '''m''' minute? == Date de intrare == Fișierul '''unghi.in''' va conține pe... |
|||
| (4 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
La geometrie, domnul profesor de matematică le-a vorbit elevilor săi despre unghiuri. Pentru a fi sigur că aceștia au înțeles noțiunile predate, le-a dat o listă cu n probleme. | La geometrie, domnul profesor de matematică le-a vorbit elevilor săi despre unghiuri. Pentru a fi sigur că aceștia au înțeles noțiunile predate, le-a dat o listă cu '''n''' probleme. | ||
== Cerinţa == | == Cerinţa == | ||
Fiind date numărul de ore în variabila '''h''' și numărul de minute în variabila '''m''', să se determine câte grade avea unghiul dintre orarul și minutarul unui ceas clasic, la ora '''h''' şi '''m''' minute? | Fiind date numărul de ore în variabila '''h''' și numărul de minute în variabila '''m''', să se determine câte grade avea unghiul dintre orarul și minutarul unui ceas clasic, la ora '''h''' şi '''m''' minute? | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul ''' | Fișierul '''unghiin.txt''' va conține pe prima linie un număr natural '''n''', reprezentând numărul de probleme date ca temă, iar pe a doua linie, două numere h și m, separate printr-un spațiu, cu semnificațiile din cerință. | ||
== Date de ieşire == | == Date de ieşire == | ||
Fișierul ''' | Fișierul '''unghiout.txt''' va conține pe câte o linie numărul de grade corespunzător unghiului format de orar și minutar, pentru fiecare dintre cele n probleme din temă. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* '''n''' este număr natural, 1 ⩽ n ⩽ 100 | * '''n''' este număr natural, 1 ⩽ n ⩽ 100 | ||
| Line 12: | Line 12: | ||
* '''m''' este număr natural, 0 ⩽ m ⩽ 60 | * '''m''' este număr natural, 0 ⩽ m ⩽ 60 | ||
* Dimensiunea unui unghi se măsoară în grade. Un cerc are '''360 de grade'''. | * Dimensiunea unui unghi se măsoară în grade. Un cerc are '''360 de grade'''. | ||
== | == Exemplul 1 == | ||
; ''' | ; '''unghiin.txt''' | ||
3 | |||
8 20 | |||
1 10 | |||
5 15 | |||
; ''' | ; '''unghiout.txt''' | ||
Datele de intrare corespund restrictiilor impuse | |||
130 | |||
25 | |||
67.5 | |||
<br> | |||
== Exemplul 2 == | |||
; '''unghiin.txt''' | |||
9 | |||
2 20 | |||
1 j | |||
5 -15 | |||
; '''unghiout.txt''' | |||
Datele de intrare nu corespund restrictiilor impuse | |||
<br> | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | # 1815 Unghi | ||
def validare(n_validare, h_validare, m_validare): | |||
n | # Verificăm dacă n este în intervalul 1-100 | ||
# | if n_validare < 1 or n_validare > 100: | ||
raise ValueError | |||
# | # Verificăm dacă fiecare h este în intervalul 0-24 | ||
for | for index in range(n_validare): | ||
if h_validare[index] < 0 or h_validare[index] > 24: | |||
raise ValueError | |||
# Verificăm dacă fiecare m este în intervalul 0-60 | |||
for j in range(n_validare): | |||
if m_validare[j] < 0 or m_validare[j] > 60: | |||
raise ValueError | |||
file_out.write("Datele de intrare corespund restrictiilor impuse\n") | |||
def unghi(h_unghi, m_unghi): # Definim funcția de calcul a unghiului | |||
if h_unghi == 12: | |||
h_unghi = 0 | |||
# Convertim minutul 60 la 0 și incrementăm ora cu 1 | |||
if m_unghi == 60: | |||
m_unghi = 0 | |||
h_unghi += 1 | |||
# | ora = 0.5 * (h_unghi * 60 + m_unghi) # Calculăm poziția orarului în grade | ||
minut = 6 * m_unghi # Calculăm poziția minutarului în grade | |||
# Calculăm unghiul absolut dintre orar și minutar | |||
unghi_val = abs(ora - minut) | |||
# Dacă unghiul este mai mare de 180 de grade, folosim complementul său în cerc (360 - unghi) | |||
unghi_val = min(360 - unghi_val, unghi_val) | |||
return unghi_val | |||
if __name__ == '__main__': | |||
file_in = open("unghiin.txt", "r") # Deschidem fișierul de intrare pentru citire | |||
file_out = open("unghiout.txt", "w") # Deschidem fișierul de ieșire pentru scriere | |||
# Încercăm să citim datele de intrare și să calculăm unghiurile | |||
try: | |||
n_main = int(file_in.readline()) # Citim numărul de probleme | |||
# Inițializăm listele pentru ore și minute | |||
h_main = [] | |||
m_main = [] | |||
# Citim orele și minutele pentru fiecare problemă | |||
for _ in range(n_main): | |||
h, m = map(int, file_in.readline().split()) | |||
h_main.append(h) | |||
m_main.append(m) | |||
validare(n_main, h_main, m_main) # Validăm datele de intrare | |||
# Calculăm și scriem unghiul pentru fiecare problemă | |||
for i in range(n_main): | |||
unghi_main = unghi(h_main[i], m_main[i]) | |||
file_out.write(str(unghi_main) + '\n') | |||
# | # Tratăm excepțiile care pot apărea la citirea datelor de intrare | ||
except ValueError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
except IndexError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 17:57, 15 November 2023
La geometrie, domnul profesor de matematică le-a vorbit elevilor săi despre unghiuri. Pentru a fi sigur că aceștia au înțeles noțiunile predate, le-a dat o listă cu n probleme.
Cerinţa
Fiind date numărul de ore în variabila h și numărul de minute în variabila m, să se determine câte grade avea unghiul dintre orarul și minutarul unui ceas clasic, la ora h şi m minute?
Date de intrare
Fișierul unghiin.txt va conține pe prima linie un număr natural n, reprezentând numărul de probleme date ca temă, iar pe a doua linie, două numere h și m, separate printr-un spațiu, cu semnificațiile din cerință.
Date de ieşire
Fișierul unghiout.txt va conține pe câte o linie numărul de grade corespunzător unghiului format de orar și minutar, pentru fiecare dintre cele n probleme din temă.
Restricții și precizări
- n este număr natural, 1 ⩽ n ⩽ 100
- h este număr natural, 0 ⩽ h ⩽ 24h
- m este număr natural, 0 ⩽ m ⩽ 60
- Dimensiunea unui unghi se măsoară în grade. Un cerc are 360 de grade.
Exemplul 1
- unghiin.txt
3 8 20 1 10 5 15
- unghiout.txt
Datele de intrare corespund restrictiilor impuse 130 25 67.5
Exemplul 2
- unghiin.txt
9 2 20 1 j 5 -15
- unghiout.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python" line>
- 1815 Unghi
def validare(n_validare, h_validare, m_validare):
# Verificăm dacă n este în intervalul 1-100
if n_validare < 1 or n_validare > 100:
raise ValueError
# Verificăm dacă fiecare h este în intervalul 0-24
for index in range(n_validare):
if h_validare[index] < 0 or h_validare[index] > 24:
raise ValueError
# Verificăm dacă fiecare m este în intervalul 0-60
for j in range(n_validare):
if m_validare[j] < 0 or m_validare[j] > 60:
raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def unghi(h_unghi, m_unghi): # Definim funcția de calcul a unghiului
if h_unghi == 12:
h_unghi = 0
# Convertim minutul 60 la 0 și incrementăm ora cu 1
if m_unghi == 60:
m_unghi = 0
h_unghi += 1
ora = 0.5 * (h_unghi * 60 + m_unghi) # Calculăm poziția orarului în grade
minut = 6 * m_unghi # Calculăm poziția minutarului în grade
# Calculăm unghiul absolut dintre orar și minutar
unghi_val = abs(ora - minut)
# Dacă unghiul este mai mare de 180 de grade, folosim complementul său în cerc (360 - unghi)
unghi_val = min(360 - unghi_val, unghi_val)
return unghi_val
if __name__ == '__main__':
file_in = open("unghiin.txt", "r") # Deschidem fișierul de intrare pentru citire
file_out = open("unghiout.txt", "w") # Deschidem fișierul de ieșire pentru scriere
# Încercăm să citim datele de intrare și să calculăm unghiurile
try:
n_main = int(file_in.readline()) # Citim numărul de probleme
# Inițializăm listele pentru ore și minute
h_main = []
m_main = []
# Citim orele și minutele pentru fiecare problemă
for _ in range(n_main):
h, m = map(int, file_in.readline().split())
h_main.append(h)
m_main.append(m)
validare(n_main, h_main, m_main) # Validăm datele de intrare
# Calculăm și scriem unghiul pentru fiecare problemă
for i in range(n_main):
unghi_main = unghi(h_main[i], m_main[i])
file_out.write(str(unghi_main) + '\n')
# Tratăm excepțiile care pot apărea la citirea datelor de intrare
except ValueError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")
except IndexError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>