1303 - Calculator

De la Universitas MediaWiki

Cerință

Se dau două numere naturale și un simbol pentru una dintre operațiile +, -, *, / (adunare, scădere, înmulțire, impărțire). Să se determine rezultatul operației aplicate pentru cele două numere.

Date de intrare

Programul citește de la tastatură numerele A B, iar apoi simbolul operației.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa pe ecran numărul R, reprezentând rezultatul operației. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări

  • atât numerele date cât și rezultatul operației au cel mult 9 cifre;
  • numerele A și B nu sunt neapărat în ordine crescătoare sau descrescătoare; pentru operațiile de scădere și împărțire primul operand va fi numărul mai mare;
  • / reprezintă determinarea câtului împărțirii întregi.

Exemplul 1

Intrare
10
20
+
Ieșire
Datele de intrare corespund restricțiilor impuse.
30

Rezolvare

Rezolvare ver. 1

def validare(a, b):
    if len(str(a)) > 9 or len(str(b)) > 9:
        print("Numerele trebuie să aibă cel mult 9 cifre!")
        return False
    return True


def calculeaza(a, b, operatie):
    if operatie == '+':
        r = a + b
    elif operatie == '-':
        if b > a:
            r = b - a
        else:
            r = a - b
    elif operatie == '*':
        r = a * b
    elif operatie == '/':
        if a > b:
            if b != 0:
                r = a / b
            else:
                print("Impartirea la zero nu este permisa!")
        else:
            if a != 0:
                r = b / a
            else:
                print("Impartirea la zero nu este permisa!")
            return None
    else:
        print("Operatie invalida!")
        return None
    return r


if __name__ == "__main__":
    a = int(input("Introdu primul numar: "))
    b = int(input("Introdu al doilea numar: "))
    operatie = input("Introdu operatia (+, -, *, /): ")
    if validare(a, b):
        print("Datele de intrare corespund restricțiilor impuse.")
        print(calculeaza(a, b, operatie))
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicatie

Programul este scris în Python și conține două funcții, validare(a, b) și calculeaza(a, b, operatie), care verifică dacă numerele introduse și simbolul de operație sunt valide și calculează rezultatul operației respective. Funcția validare(a, b) verifică dacă ambele numere au cel mult 9 cifre, iar funcția calculeaza(a, b, operatie) efectuează operația specificată și returnează rezultatul.

În funcția calculeaza(a, b, operatie), mai întâi se verifică simbolul de operație pentru a determina operația specificată. Apoi, se efectuează operația specificată pe numerele a și b și se stochează rezultatul în variabila r. În cazul în care simbolul de operație este /, se verifică mai întâi dacă primul operand este mai mare decât al doilea, în caz contrar se inversează numerele. De asemenea, se verifică și dacă divisorul este zero, caz în care se afișează o eroare.

În funcția main, utilizatorul este întâi solicitat să introducă cele două numere și simbolul de operație. Apoi, se verifică dacă datele de intrare sunt valide utilizând funcția validare(a, b). În caz afirmativ, se afișează un mesaj de confirmare și se calculează rezultatul utilizând funcția calculeaza(a, b, operatie). În caz contrar, se afișează un mesaj de eroare.

În plus, sunt incluse și câteva instrucțiuni de control a fluxului (if/else) și utilizarea parametrului special __name__ pentru a verifica dacă programul este rulat direct sau importat ca modul.

Pentru a face codul mai ușor de citit și de înțeles, sunt incluse și câteva comentarii. Acestea încep cu semnul # și sunt ignorate de către interpretorul Python la rulare. Comentariile explică modul în care funcțiile sunt utilizate și detalii despre ceea ce face fiecare funcție.