2641 - AF

De la Universitas MediaWiki

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

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)