1359 - Ecuatie 2

De la Universitas MediaWiki
Versiunea din 30 octombrie 2023 15:13, autor: Zmicala Narcis (discuție | contribuții) (Pagină nouă: == Cerinţa == Fie '''a''' și '''b''' două numere naturale nenule. Cu ajutorul lor se pot forma ecuațiile matematice de tipul: 1) '''a+x=b''' 2) '''x+a=b''' 3) '''a-x=b''' 4) '''x-a=b''' 5) '''a*x=b'''  (unde '''a''' divide '''b''') 6) '''x*a=b'''  (unde '''a''' divide '''b''') 7) '''a:x=b'''  (unde '''b''' divide '''a''') 8) '''x:a=b''' Scrieți un program care să citească din fișierul '''ecuatie.in''' o ecuaţie de tipul precizat în enunț şi care să...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerinţa

Fie a și b două numere naturale nenule. Cu ajutorul lor se pot forma ecuațiile matematice de tipul:

1) a+x=b

2) x+a=b

3) a-x=b

4) x-a=b

5) a*x=b  (unde a divide b)

6) x*a=b  (unde a divide b)

7) a:x=b  (unde b divide a)

8) x:a=b

Scrieți un program care să citească din fișierul ecuatie.in o ecuaţie de tipul precizat în enunț şi care să determine:

a) tipul ecuației citite; b) soluția ecuației obținută prin rezolvarea acestei ecuații.

Date de intrare

Fişierul ecuatie2.in conţine pe prima linie ecuația, ca în exemplu.

Date de ieşire

Fişierul de ieşire ecuatie2.out va conține pe prima linie un număr natural reprezentând tipul ecuaţiei, iar pe a doua linie, un număr natural reprezentând soluția ecuației.

Restricții și precizări

  • 1 ≤ a ≤ 30 000
  • 1 ≤ b ≤ 30 000
  • Fișierul de intrare conține o singură ecuație; soluția ecuației este un număr natural.

Exemplul 1

ecuatie2.in
23+x=100
ecuatie2.out
1
77

Exemplul 2

ecuatie2.in
x*20=1400
ecuatie2.out
6
70

Exemplul 3

ecuatie2.in
15:x=3
ecuatie2.out
7
5

Explicații

Pentru primul exemplu, ecuația este de tipul 1. Soluția ecuaţiei 23+x=100 este x=77.

Pentru al doilea exemplu, ecuația este de tipul 6. Soluția ecuaţiei x*20=1400 este x=70.

Pentru al treilea exemplu, ecuația este de tipul 7. Soluția ecuaţiei 15:x=3 este x=5.

Rezolvare

def solve_equation(equation):
    if "+x=" in equation:
        a, b = map(int, equation.split("+x="))
        return (1, b - a)
    elif "x+" in equation:
        a, b = map(int, equation.split("x+"))
        return (2, b - a)
    elif "-x=" in equation:
        a, b = map(int, equation.split("-x="))
        return (3, a - b)
    elif "x-" in equation:
        a, b = map(int, equation.split("x-"))
        return (4, a + b)
    elif "*x=" in equation and int(equation.split("*x=")[1]) % int(equation.split("*x=")[0]) == 0:
        a, b = map(int, equation.split("*x="))
        return (5, b // a)
    elif "x*" in equation:
        _, temp = equation.split("x*")
        a, b = map(int, temp.split("="))
        return (6, b // a)
    elif ":x=" in equation and int(equation.split(":x=")[0]) % int(equation.split(":x=")[1]) == 0:
        a, b = map(int, equation.split(":x="))
        return (7, a // b)
    elif "x:" in equation:
        _, temp = equation.split("x:")
        a, b = map(int, temp.split("="))
        return (8, a // b)

def main():
    with open('ecuatie2.in', 'r') as f:
        equation = f.readline().strip()

    type_of_equation, solution = solve_equation(equation)

    with open('ecuatie2.out', 'w') as f:
        f.write(str(type_of_equation) + '\n')
        f.write(str(solution) + '\n')

if __name__ == "__main__":
    main()