Вопрос задан 16.01.2025 в 17:56. Предмет Информатика. Спрашивает Лютер Александра.

Уровень C. Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «–», «*» и «/»). Выражение вводится как символьная строка, все числа целые. Операция «/» выполняется как целочисленное деление (div).
Пример:
Введите выражение:
12*3+45
Ответ: 81
Выполняетски в паскале. Тема: Преобразование строка-число
Со спецификацией отмечу как лучшее

Перейти к ответам

Ответы на вопрос

Отвечает Королевская Жанна.

Для решения задачи на языке Pascal мы будем работать с символьной строкой, содержащей выражение из трех чисел и двух операторов. Наша задача — правильно распознать числа и операторы, затем вычислить результат, соблюдая приоритет операторов (умножение и деление выполняются перед сложением и вычитанием). Операция деления «/» выполняется как целочисленное деление.

Шаги для решения:

  1. Анализ выражения: Нам нужно разбить строку на числа и операторы.
  2. Приоритет операций: Выполнить сначала умножение и деление, а затем — сложение и вычитание.
  3. Вывод результата.

Примерный алгоритм:

  • Сначала разберем строку на числа и операторы.
  • Вычислим результат выражения, учитывая приоритет операторов.

Код программы на Pascal:

pascal
program CalculateExpression;

uses SysUtils;

var expression: string; firstNum, secondNum, thirdNum, tempResult, finalResult: integer; firstOp, secondOp: char; posFirstOp, posSecondOp: integer;

begin // Запрашиваем ввод от пользователя Write('Введите выражение: '); ReadLn(expression);

// Находим позиции операторов for posFirstOp := 2 to Length(expression) do if (expression[posFirstOp] in ['+', '-', '*', '/']) then break;

for posSecondOp := posFirstOp + 1 to Length(expression) do if (expression[posSecondOp] in ['+', '-', '*', '/']) then break;

// Извлекаем числа из строки firstNum := StrToInt(Copy(expression, 1, posFirstOp - 1)); secondNum := StrToInt(Copy(expression, posFirstOp + 1, posSecondOp - posFirstOp - 1)); thirdNum := StrToInt(Copy(expression, posSecondOp + 1, Length(expression) - posSecondOp));

// Извлекаем операторы firstOp := expression[posFirstOp]; secondOp := expression[posSecondOp];

// Выполняем вычисления с учетом приоритета операторов if (firstOp = '*') or (firstOp = '/') then begin if firstOp = '*' then tempResult := firstNum * secondNum else tempResult := firstNum div secondNum;

// Вторую операцию выполняем над tempResult и thirdNum if secondOp = '+' then finalResult := tempResult + thirdNum else if secondOp = '-' then finalResult := tempResult - thirdNum else if secondOp = '*' then finalResult := tempResult * thirdNum else finalResult := tempResult div thirdNum; end else begin if secondOp = '*' then tempResult := secondNum * thirdNum else tempResult := secondNum div thirdNum;

// Первую операцию выполняем над firstNum и tempResult if firstOp = '+' then finalResult := firstNum + tempResult else finalResult := firstNum - tempResult; end;

// Выводим результат WriteLn('Ответ: ', finalResult); end.

Пояснение к коду:

  1. Ввод строки: Пользователь вводит выражение, которое сохраняется в переменной expression.
  2. Поиск операторов: Сначала мы находим позиции операторов в выражении, чтобы разделить его на числа и операторы.
  3. Разделение на числа: Используем Copy и StrToInt для извлечения чисел, разделяя строку в позициях операторов.
  4. Вычисление: Проверяем приоритет операторов. Если первый оператор — умножение или деление, то выполняем его сначала, а затем применяем второй оператор. Если первый оператор — сложение или вычитание, проверяем второй оператор и выполняем умножение или деление, если они есть, перед сложением или вычитанием.
  5. Вывод результата: Печатаем результат вычисления.

Примеры работы программы:

  • Ввод: 12*3+45
    • Ответ: 81
  • Ввод: 10+20/5
    • Ответ: 14
  • Ввод: 15-2*4
    • Ответ: 7

Заключение

Эта программа позволяет вычислять выражения с тремя целыми числами и двумя операторами с учетом приоритета операций.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос