Калькулятор, где первым делом нужно ввести арифметический знак - 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.

Объяснение кода листинга программы

  1. Ввод выражения через пробел
  2. Повторение цикла до тех пор, пока не будет найден первый пробел
  3. Получение первого числа (n1) и второго числа (n2) и сохранение их в отдельные переменные
  4. Определение оператора (+,-,*,/)
  5. Преобразование первого числа (n1) в целое число (number1)
  6. Преобразование второго числа (n2) в целое число (number2)
  7. Вывод исходного выражения
  8. Вычисление результата с помощью различных операций (+,-,*,/) и сохранение результатов в отдельные переменные (addiction, subtraction, multiplication, division)
  9. Использование оператора case для определения, какая операция должна быть выполнена, и вывод результата на экран
  10. Запрос на ввод для подтверждения выполнения операции
  11. Ожидание ввода пользователя для завершения программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы