Калькулятор, где первым делом нужно ввести арифметический знак - Free Pascal
Формулировка задачи:
Написал простенький (пока ещё не очень) калькулятор, но не могу разобраться в одной вещи.
Сейчас программа построена так, что сначала требуется ввести оператор, затем первое и второе число. Было бы логичнее поставить схему "первое число -> оператор -> второе число". Но когда я перемещаю строку оператора между Number1 и Number2, программа "пропускает" ввод оператора, переходя сразу к вводу второго числа. В чём может быть проблема?
Program Calc; var number1, number2, plus : integer; addiction, subtraction, multiplication, division : integer; operand : char; begin write('Write operator (+,-,*,/): '); read(operand); write('Write number 1: '); read(number1); write('Write number 2: '); read(number2); writeln('Request: ',number1,' ',operand,' ',number2,''); addiction := number1 + number2; subtraction := number1 - number2; multiplication := number1 * number2; division := number1 div number2; case operand of '+' : Write('Answer: ',addiction); '-' : Write('Answer: ',subtraction); '*' : Write('Answer: ',multiplication); '/' : Write('Answer: ',division); end; end.
Решение задачи: «Калькулятор, где первым делом нужно ввести арифметический знак»
textual
Листинг программы
Program Calc; var number1, number2, plus ,i: integer; addiction, subtraction, multiplication, division : integer; operand : char; str,n1,n2:string; begin write('Write number 1,operator (+,-,*,/),number 2: '); readln(str); {Ввод выражения через пробел} repeat i:=i+1 until str[i]=' '; {Когда нашли первый пробел,то легко найти числа и операнд} n1:=Copy(str,1,i-1) ; {находим первое и второе число и записываем в строковую переменную} n2:=copy(str,i+2,length(str)); operand:=str[i+1];{находим операнд} Val(n1,number1) ;{преобразовываем строку в число} Val(n2,number2) ; {Дальше без изменений} writeln('Request: ',number1,' ',operand,' ',number2,''); addiction := number1 + number2; subtraction := number1 - number2; multiplication := number1 * number2; division := number1 div number2; case operand of '+' : Write('Answer: ',addiction); '-' : Write('Answer: ',subtraction); '*' : Write('Answer: ',multiplication); '/' : Write('Answer: ',division); end; readln end.
Объяснение кода листинга программы
- Ввод выражения через пробел
- Повторение цикла до тех пор, пока не будет найден первый пробел
- Получение первого числа (n1) и второго числа (n2) и сохранение их в отдельные переменные
- Определение оператора (+,-,*,/)
- Преобразование первого числа (n1) в целое число (number1)
- Преобразование второго числа (n2) в целое число (number2)
- Вывод исходного выражения
- Вычисление результата с помощью различных операций (+,-,*,/) и сохранение результатов в отдельные переменные (addiction, subtraction, multiplication, division)
- Использование оператора case для определения, какая операция должна быть выполнена, и вывод результата на экран
- Запрос на ввод для подтверждения выполнения операции
- Ожидание ввода пользователя для завершения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д