1359 - Ecuatie 2: Difference between revisions
No edit summary |
No edit summary |
||
Line 73: | Line 73: | ||
if not (caracter.isdigit() or caracter in ['+', '-', '*', ':', 'x', '=']): | if not (caracter.isdigit() or caracter in ['+', '-', '*', ':', 'x', '=']): | ||
raise ValueError | raise ValueError | ||
# extract a and b from the equation | |||
parts = ecuatie1.split('=') | |||
a = int(''.join(filter(str.isdigit, parts[0]))) | |||
b = int(''.join(filter(str.isdigit, parts[1]))) | |||
# check if a and b are within the given range | |||
if not (1 <= a <= 30000 and 1 <= b <= 30000): | |||
raise ValueError | |||
file_out.write("Datele de intrare corespund restrictiilor impuse\n") | file_out.write("Datele de intrare corespund restrictiilor impuse\n") |
Latest revision as of 16:06, 11 November 2023
Cerinţa[edit | edit source]
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 ecuatiein.txt 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[edit | edit source]
Fişierul ecuatie2in.txt conţine pe prima linie ecuația, ca în exemplu.
Date de ieşire[edit | edit source]
Fişierul de ieşire ecuatie2out.txt 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[edit | edit source]
- 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[edit | edit source]
- ecuatie2in.txt
- 23+x=100
- ecuatie2out.txt
- Datele introduse corespund restricțiilor impuse.
- 1
- 77
Exemplul 2[edit | edit source]
- ecuatie2in.txt
- x*20=1400
- ecuatie2out.txt
- Datele introduse corespund restricțiilor impuse.
- 6
- 70
Exemplul 3[edit | edit source]
- ecuatie2in.txt
- 15:x=3
- ecuatie2out.txt
- Datele introduse corespund restricțiilor impuse.
- 7
- 5
Exemplul 4[edit | edit source]
- ecuatie2in.txt
- x+ = 100
- ecuatie2out.txt
- Datele introduse nu corespund restricțiilor impuse.
Explicații[edit | edit source]
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[edit | edit source]
<syntaxhighlight lang="python" line>
- 1359 - Ecuatie 2
def validare(ecuatie1): # functia de validare a datelor de intrare
if len(ecuatie1) > 1000: raise ValueError
# daca datele de intrare nu corespund, ridicam eroarea ValueError for caracter in ecuatie1: if not (caracter.isdigit() or caracter in ['+', '-', '*', ':', 'x', '=']): raise ValueError
# extract a and b from the equation parts = ecuatie1.split('=') a = int(.join(filter(str.isdigit, parts[0]))) b = int(.join(filter(str.isdigit, parts[1])))
# check if a and b are within the given range if not (1 <= a <= 30000 and 1 <= b <= 30000): raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def rezolva_ecuatie(ecuatie1): # functia de rezolvare
if "+x=" in ecuatie1: a, b = map(int, ecuatie1.split("+x=")) return 1, b - a elif "x+" in ecuatie1: a, b = map(int, ecuatie1.split("x+")) return 2, b - a elif "-x=" in ecuatie1: a, b = map(int, ecuatie1.split("-x=")) return 3, a - b elif "x-" in ecuatie1: a, b = map(int, ecuatie1.split("x-")) return 4, a + b elif "*x=" in ecuatie1 and int(ecuatie1.split("*x=")[1]) % int(ecuatie1.split("*x=")[0]) == 0: a, b = map(int, ecuatie1.split("*x=")) return 5, b // a elif "x*" in ecuatie1: _, temp = ecuatie1.split("x*") a, b = map(int, temp.split("=")) return 6, b // a elif ":x=" in ecuatie1 and int(ecuatie1.split(":x=")[0]) % int(ecuatie1.split(":x=")[1]) == 0: a, b = map(int, ecuatie1.split(":x=")) return 7, a // b elif "x:" in ecuatie1: _, temp = ecuatie1.split("x:") a, b = map(int, temp.split("=")) return 8, a // b
if __name__ == '__main__':
file_in = open("ecuatie2in.txt", "r") # declararea fisierelor file_out = open("ecuatie2out.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write)
# din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam try: ecuatie = file_in.readline() # citirea ecuatiei se face ca sir de caractere
validare(ecuatie) # apelul functiei de validare tip_ecuatie, solutie = rezolva_ecuatie(ecuatie) # apelul functiei de rezolvare
file_out.write(str(tip_ecuatie) + '\n') file_out.write(str(solutie) + '\n')
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>