2641 - AF: Difference between revisions
Paul Ungur (talk | contribs) |
Paul Ungur (talk | contribs) No edit summary |
||
Line 36: | Line 36: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def validare_date(expresii): | |||
if len(expresii) > 10: | |||
print("Datele citite din fisier nu sunt corecte") | |||
return False | |||
else: | |||
for expresie in expresii: | |||
expresie = expresie.strip().split() | |||
primul = int(expresie[0]) | |||
semn = int(expresie[1]) | |||
al_doilea = int(expresie[2]) | |||
rezultatul = int(expresie[-1]) | |||
if operatie(primul, al_doilea, semn)<= 10**17: | |||
if primul >= al_doilea: | |||
print("Datele citite din fisier sunt corecte") | |||
return True | |||
def citire_expresii(): | def citire_expresii(): | ||
Line 43: | Line 58: | ||
expresii = [f.readline().strip() for _ in range(n)] | expresii = [f.readline().strip() for _ in range(n)] | ||
return expresii | return expresii | ||
def scriere_rezultat(continut): | def scriere_rezultat(continut): | ||
with open('af.out', 'a') as f: | with open('af.out', 'a') as f: | ||
f.write(f | if continut: | ||
f.write("Adevarat\n") | |||
else: | |||
f.write("Fals\n") | |||
def operatie(nr1, nr2, semn): | |||
if semn == '+': | |||
return nr1 + nr2 | |||
elif semn == '-': | |||
return nr1 - nr2 | |||
elif semn == 'x': | |||
return nr1 * nr2 | |||
elif semn == ':': | |||
if nr2 == 0: | |||
return False | |||
return nr1 // nr2 | |||
if __name__ == '__main__': | |||
expresii = citire_expresii() | expresii = citire_expresii() | ||
for expresie in expresii: | for expresie in expresii: | ||
Line 70: | Line 102: | ||
else: | else: | ||
scriere_rezultat(False) | scriere_rezultat(False) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 16:05, 26 April 2023
Sursa: 0161 - inlocuire
Cerinţa
Gigel are ca temă la matematică să precizeze valoarea de adevăr a unor expresii de forma nr1 semn nr2 = nr3, unde nr1, nr2 și nr3 sunt numere naturale, iar semn poate fi +, -, x sau : reprezentând adunarea, scăderea, înmulțirea și împărțirea. Ajutați-l pe Gigel să rezolve tema la matematică.
Date de intrare
Fișierul de intrare af.in conține pe prima linie numărul de expresii n, iar pe următoarele n linii cele n expresii. Cele trei numere, semnul operației și egal sunt separate câte un spațiu.
Date de ieșire
Fișierul de ieșire af.out va conține pe fiecare linie valoarea de adevăr (Adevarat sau Fals) a expresiei corespunzătoare din fișierul de intrare.
Restricţii şi precizări
1 ⩽ n ⩽ 10; 0 ≤ nr1, nr2, nr3 și rezultatul operației din membrul stâng ≤ 1017; nr1 ≥ nr2; rezultatul operației nr1 : nr2 este câtul împărțirii lui nr1 la nr2; dacă expresia este de forma nr1 : 0 = nr3 atunci este considerată falsă.
Exemple
- af.in
4 1 + 1 = 2 3 x 3 = 6 5 - 1 = 4 8 : 2 = 3
- af.out
Adevarat Fals Adevarat Fals
Rezolvare
<syntaxhighlight lang="python" line> def validare_date(expresii):
if len(expresii) > 10: print("Datele citite din fisier nu sunt corecte") return False else: for expresie in expresii: expresie = expresie.strip().split() primul = int(expresie[0]) semn = int(expresie[1]) al_doilea = int(expresie[2]) rezultatul = int(expresie[-1]) if operatie(primul, al_doilea, semn)<= 10**17: if primul >= al_doilea: print("Datele citite din fisier sunt corecte") return True
def citire_expresii():
with open('af.in', 'r') as f: n = int(f.readline().strip()) expresii = [f.readline().strip() for _ in range(n)] return expresii
def scriere_rezultat(continut):
with open('af.out', 'a') as f: if continut: f.write("Adevarat\n") else: f.write("Fals\n")
def operatie(nr1, nr2, semn):
if semn == '+': return nr1 + nr2 elif semn == '-': return nr1 - nr2 elif semn == 'x': return nr1 * nr2 elif semn == ':': if nr2 == 0: return False return nr1 // nr2
if __name__ == '__main__':
expresii = citire_expresii() for expresie in expresii: expresie = expresie.strip().split() nr1 = int(expresie[0]) semn = expresie[1] nr2 = int(expresie[2]) nr3 = int(expresie[-1]) if semn == '+': scriere_rezultat(nr1 + nr2 == nr3) elif semn == '-': scriere_rezultat(nr1 - nr2 == nr3) elif semn == 'x': scriere_rezultat(nr1 * nr2 == nr3) elif semn == ':': if nr2 == 0: scriere_rezultat(False) else: scriere_rezultat(nr1 // nr2 == nr3) else: scriere_rezultat(False)
</syntaxhighlight>