Простейший калькулятор

Задача

Написать программу, которая будет складывать, вычитать, умножать или делить два числа. Числа и знак операции вводятся пользователем. После выполнения вычисления программа не должна завершаться, а должна запрашивать новые данные для вычислений. Завершение программы должно выполняться при вводе символа '0' в качестве знака операции. Если пользователь вводит неверный знак (не '0', '+', '-', '*', '/'), то программа должна сообщать ему об ошибке и снова запрашивать знак операции. Также сообщать пользователю о невозможности деления на ноль, если он ввел 0 в качестве делителя.

Пояснение к задаче и алгоритм решения

Запустить бесконечный цикл.

  1. Запросить ввод знака операции.
  2. Если был введен '0', то прервать цикл операцией break.
  3. Если был введен один из знаков арифметических операций, то в зависимости от того, какой знак был введен, выполнить соответствующее ему арифметическое действие. При этом при делении проверить не был ли введен ноль. Если это так, то вывести сообщение, иначе выполнить деление.
  4. Иначе сообщить о неверно введенном знаке.

Исходный код на языке программирования Pascal

var
  x,y,z: real;
  sign: char;
begin
  while True do begin
    write('sign: '); readln(sign);
    if sign = '0' then break;
    if sign in ['+','-','*','/'] then begin
      write('x='); readln(x);
      write('y='); readln(y);          
      case sign of
        '+': begin z := x + y; writeln(z:5:2) end;
        '-': begin z := x - y; writeln(z:5:2); end;
        '*': begin z := x * y; writeln(z:5:2); end;
        '/': if y <> 0 then begin
               z := x / y;
               writeln(z:5:2)
             end
             else
               writeln('Division by zero!');
      end;
    end
      else writeln('Bad sign!')
  end;
end.

Пример(ы) выполнения программы на языке Pascal

sign: 8
Bad sign!
sign: 4
Bad sign!
sign: -
x=5
y=6
-1.00
sign: +
x=4.45
y=10.66
15.11
sign: *
x=-3.4
y=-67
227.80
sign: /
x=-78
y=123
-0.63
sign: /
x=9
y=0
Division by zero!
sign: i
Bad sign!
sign: 0

Исходный код на языке программирования C

#include <stdio.h>
 
main() {
        float x,y;
        char sign='+';
        while (sign != '0') {
                printf("Знак: ");
                scanf("%c%*c", &sign);
                if (sign == '0') { break; }
                if (sign == '+' || sign == '-' || sign == '*' || sign == '/') {
                        printf("x=");
                        scanf("%f%*c", &x);
                        printf("y=");
                        scanf("%f%*c", &y);
                        switch (sign) {
                                case '+':
                                        printf("%.2f\n", x+y);
                                        break;
                                case '-':
                                        printf("%.2f\n", x-y);
                                        break;
                                case '*':
                                        printf("%.2f\n", x*y);
                                        break;
                                case '/':
                                        if (y != 0) printf("%.2f\n", x/y);
                                        else printf("Деление на ноль!\n");
                        }
                }
                else printf("Неверно указан знак операции\n");
        }
}

Пример(ы) выполнения программы на языке C

Знак: 7
Неверно указан знак операции
Знак: 3
Неверно указан знак операции
Знак: +
x=4
y=5
9.00
Знак: /
x=0
y=0
Деление на ноль!
Знак: -
x=-34.4
y=-2
-32.40
Знак: 0

Особенности решения на языке программирования C

При вводе данных необходимо избавиться от символа перехода на новую строку. Это делается через формат "%*c".

Исходный код на языке программирования Python

print("Ноль в качестве знака операции завершит работу программы")
while True:
        s = input("Знак (+,-,*,/): ")
        if s == '0': break
        if s in ('+','-','*','/'):
                x = float(input("x="))
                y = float(input("y="))
                if s == '+':
                        print("%.2f" % (x+y))
                elif s == '-':
                        print("%.2f" % (x-y))
                elif s == '*':
                        print("%.2f" % (x*y))
                elif s == '/':
                        if y != 0:
                                print("%.2f" % (x/y))
                        else:
                                print("Деление на ноль!")
        else:          
                print("Неверный знак операции!")

Пример(ы) выполнения программы на языке Python

Ноль в качестве знака операции завершит работу программы
Знак (+,-,*,/): h
Неверный знак операции!
Знак (+,-,*,/): +
x=78.456
y=23.567
102.02
Знак (+,-,*,/): -
x=3.44
y=10.25
-6.81
Знак (+,-,*,/): *
x=0.012
y=-2.15
-0.03
Знак (+,-,*,/): /
x=5
y=0
Деление на ноль!
Знак (+,-,*,/): /
x=-2.3
y=5
-0.46
Знак (+,-,*,/): 0

Исходный код на языке программирования КуМир

алг простейший калькулятор
нач
  вещ x,y
  сим s
  нц пока да
    вывод "Знак: "
    ввод s
    если s='0' то выход все
    если s='+' или s='-' или s='*' или s='/' то
      вывод "x="
      ввод x
      вывод "y="
      ввод y
      выбор
        при s='+': вывод x+y, нс
        при s='-': вывод x-y, нс
        при s='*': вывод x*y, нс
        при s='/':
          если y=0 то вывод "Деление на ноль!", нс
           иначе вывод x/y, нс
          все
      все
     иначе
      вывод "Неверный знак операции", нс
    все
  кц
кон

Пример(ы) выполнения программы на языке КуМир

Знак: +
x=5.67
y=-4
1.67
Знак: /
x=5
y=0
Деление на ноль!
Знак: )
Неверный знак операции
Знак: /
x=3
y=10
0.3
Знак: 0

Исходный код на языке программирования Basic

a = 1
while a=1
        input "знак: ", s$
        if s$ = "0" then
                a=0
        else
                if s$ = "+" or  s$ = "-" or s$ = "*" or s$ = "/" then
                        input "x: ", x
                        input "y: ", y
                        if s$ = "+" then print x+y
                        if s$ = "-" then print x-y
                        if s$ = "*" then print x*y
                        if s$ = "/" and y <> 0 then
                                print x/y
                        else
                                print "Деление на ноль"
                        endif
                else
                        print "Знак может быть +, -, *, /"
                endif
        endif
endwhile

Пример(ы) выполнения программы на языке Basic

знак: /
x: 9
y: 0
Деление на ноль
знак: -
x: 9
y: -8
17
Деление на ноль
знак: /
x: 9
y: -8
-1.125
знак: 0

Особенности решения на языке программирования Basic

Нет оператора break, оператора выбора case.

Не используется if-else при выполнении арифметических операций, т.к. это сильно ухудшает читабельность программы. Хотя по логике было бы более правильно.

Обнаруживается какой-то глюк "Деление на ноль", когда его не должно быть.

Тема

Циклы

Уровень сложности

Средний

Дата публикации