2641 - AF

From Bitnami MediaWiki
Revision as of 16:05, 26 April 2023 by Paul Ungur (talk | contribs)

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

1n10; 0nr1, nr2, nr3 și rezultatul operației din membrul stâng ≤ 1017; nr1nr2; 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>