Дописать программу в паскаль. ниже. не знаю как сделать ее со скобками. напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «–», «*» и «/») и круглых скобок. выражение вводится как символьная строка, все числа целые. операция «/» выполняется как целочисленное деление (div). пример: введите выражение: 2*(3+45)+4 ответ: 100 вот что у меня есть: ( я сделала, чтобы вычисляло выражение их 3 чисел и двух знаков, но не получается сделать так, чтобы учитывались круглые скобки ) var s, s1, s2, s3, s4: string; i, a, b, c, d, e, f: integer; begin writeln('введите строку: '); readln(s); for i : = 1 to length(s) do begin if (s[i] = '+') or (s[i] = '-') or (s[i] = '*') or (s[i] = '/') then begin s1 : = copy(s, 1, i-1); s2 : = copy(s, i+1, length(s)); c : = i; end; end; for i : = 1 to length(s1) do begin if (s1[i] = '+') or (s1[i] = '-') or (s1[i] = '*') or (s1[i] = '/') then begin s3 : = copy(s1, 1, i-1); s4 : = copy(s1, i+1, length(s1)); e : = i; end; end; val(s3, a, d); val(s4, b, d); val(s2, f, d); if (s[e] = '/') and (s[c] = '/') then writeln((a div b) div f); if (s[e] = '/') and (s[c] = '*') then writeln((a div b) * f); if (s[e] = '+') and (s[c] = '*') then writeln(a + (b * f)); if (s[e] = '*') and (s[c] = '*') then writeln(a * b * f); if (s[e] = '+') and (s[c] = '/') then writeln(a + (b div f)); if (s[e] = '*') and (s[c] = '+') then writeln((a * b) + f); if (s[e] = '/') and (s[c] = '+') then writeln((a div b) + f); if (s[e] = '*') and (s[c] = '/') then writeln((a * b) div f); if (s[e] = '+') and (s[c] = '+') then writeln(a + b + f); if (s[e] = '-') and (s[c] = '-') then writeln(a - b - f); if (s[e] = '+') and (s[c] = '-') then writeln(a + b - f); if (s[e] = '-') and (s[c] = '+') then writeln(a - b + f); if (s[e] = '*') and (s[c] = '-') then writeln((a * b) - f); if (s[e] = '/') and (s[c] = '-') then writeln((a div b) - f); if (s[e] = '-') and (s[c] = '*') then writeln(a- (b * f)); if (s[e] = '-') and (s[c] = '/') then writeln(a - (b div f)); end.
1. Первым шагом объявим переменные и массивы:
var s, s1, s2, s3, s4: string;
i, a, b, c, d, e, f: integer;
Здесь объявлены строки s, s1, s2, s3, s4, которые будут использоваться для разбиения введенного выражения на подстроки. Также объявлены целочисленные переменные i, a, b, c, d, e, f, которые будут использоваться для хранения различных значений.
2. Следующим шагом добавим команду чтения строки из ввода:
writeln('введите строку: ');
readln(s);
Эти строки позволяют пользователю ввести строку с выражением.
3. Далее в цикле обрабатываем введенную строку:
for i := 1 to length(s) do
begin
if (s[i] = '+') or (s[i] = '-') or (s[i] = '*') or (s[i] = '/') then
begin
s1 := copy(s, 1, i-1);
s2 := copy(s, i+1, length(s));
c := i;
end;
end;
Этот цикл проходит по всем символам строки s и проверяет, является ли текущий символ одним из знаков "+", "-", "*" или "/". Если это так, то программа сохраняет подстроки s1 и s2, которые находятся до и после знака, а также сохраняет позицию этого знака в переменной c.
4. После этого выполняется еще один цикл для обработки подстроки s1:
for i := 1 to length(s1) do
begin
if (s1[i] = '+') or (s1[i] = '-') or (s1[i] = '*') or (s1[i] = '/') then
begin
s3 := copy(s1, 1, i-1);
s4 := copy(s1, i+1, length(s1));
e := i;
end;
end;
Этот цикл проверяет, есть ли в подстроке s1 знак операции "+", "-", "*" или "/". Если такой знак найден, программа сохраняет подстроки s3 и s4, которые находятся до и после знака операции в переменные e.
5. Затем используется функция val для преобразования подстрок s3, s4 и s2 в целочисленные значения и сохранения их в переменные a, b и f соответственно:
val(s3, a, d);
val(s4, b, d);
val(s2, f, d);
Здесь d является переменной, используемой val для возвращения кода ошибки при преобразовании строки в число. В данном случае мы используем ее только для проверки, успешно ли выполнено преобразование.
6. Далее, с помощью условных операторов if, проверяем различные комбинации знаков операций и вычисляем результат:
if (s[e] = '/') and (s[c] = '/') then writeln((a div b) div f);
if (s[e] = '/') and (s[c] = '*') then writeln((a div b) * f);
if (s[e] = '+') and (s[c] = '*') then writeln(a + (b * f));
...
Здесь используется if для проверки комбинации знаков операций и выводится результат с помощью writeln. Например, если операция это деление и оба знака операций это "/", то программа выводит частное от деления a на b, а затем это значение делится на f.
Таким образом, эта программа разбивает символьную строку с выражением на подстроки, преобразует числовые подстроки в числа и вычисляет результат, учитывая знаки операций и круглые скобки.
Надеюсь, это помогло Вам понять данную программу!