Урок 18 Задача 11
Primary tabs
var
s, n: string;
i, a, b, mnozh: integer;
znak1, znak2: char;
flag1, flag2, flagUmn: boolean;
begin
writeln ('Введите строку: ');
readln(s);
i:= 0;
n:= '';
znak1:= ' ';
znak2:= ' ';
flag1:= false;
flag2:= false;
flagUmn:= false;
while (i < length(s)) do // цикл для обхода строки
begin
i:= i+1;
if (s[i]>='0')and(s[i]<='9') then // если встретилось число
begin
for i:= i to length(s) do
begin
n:= n + s[i];
if not ((s[i+1]>='0')and(s[i+1]<='9')) then
break;
end;
if flagUmn then
begin
val(n, mnozh);
if flag2 then
b:= b*mnozh
else
a:= a*mnozh;
flagUmn:= false;
end else
if flag1 then
begin
val(n, b);
flag2:= true;
end else begin
val(n, a);
if (znak1 = '-') then
a:= 0-a;
flag1:= true;
end;
n:= '';
end else
if (s[i] = '+') or (s[i] = '-') or (s[i] = '*')then // если встретился знак
begin
if (s[i] = '+') or (s[i] = '-') then
begin
if flag2 then
znak2:= s[i]
else
znak1:= s[i];
end else begin
flagUmn:= true;
end;
end;
if flag2 and ((i = length(s)) or (not (znak2 = ' '))) then
begin
if znak1 = '+' then
a:= a+b
else
a:= a-b;
znak1 := znak2;
znak2 := ' ';
flag2 := false;
end;
end;
writeln ('Ответ: ', a);
readln();
end.Вывод в консоли:
Введите строку: -2 + 2 + 4*2 * 1 - 1 *3 Ответ: 5
Введите строку: 2+2*2 Ответ: 6
Введите строку: 3*0 -1 Ответ: -1
Введите строку: - 10 *11 + 10*11 +2*15*1 Ответ: 30
- Log in to post comments
- 1102 reads
vedro-compota
Mon, 01/02/2023 - 17:19
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)