Урок 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
- 551 reads
vedro-compota
Mon, 01/02/2023 - 17:19
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)