Урок 18. Задача 9.
Primary tabs
На вход вашей программы подается строка вида:
5 + 6 -34 + 56 - 7 + 2
("сколько угодно" чисел с операциями суммы и разности в любом порядке). Вычислите результат (пробелов между символом операции и числом может и не быть)
type arrC = array[1..4] of char; var s, s_i, s_1 :string; chr :char; i, j, result, n :integer; arC :arrC; function issdigit(s :string) :boolean; var fl :boolean; begin if (s >= '0') and (s <= '9') then fl := true else fl := false; issdigit := fl; end; // убираю пробелы из строки function get_string(s :string) :string; var i :integer; s_2 :string; begin for i := 1 to length(s) do if s[i] <> ' ' then s_2 := s_2 + s[i]; get_string := s_2; end; function find_symbol(chr :char; arC :arrC) :char; var i :integer; begin for i := 1 to high(arC) do if chr = arC[i] then find_symbol := chr; end; begin s_i := ''; for i := 1 to high(arC) do // массив символов arC[i] := '+-*/'[i]; s := '5 + 6 -12 + 56 - 5 + 2'; s := get_string(s); // убираю пробелы из строки writeln(s); j := 1; while issdigit(s[j]) do begin s_1 := s_1 + s[j]; j := j + 1; end; val(s_1, n); result := n; // первое число for i := j to length(s) do if not issdigit(s[i]) then begin val(s_i, n); if '+' = chr then result := result + n else result := result - n; chr := find_symbol(s[i], arC); s_i := ''; end else s_i := s_i + s[i]; val(s_i, n); result := result + n; // завершаю подсчет writeln(result); readln(); end.
- Log in to post comments
- 287 reads
vedro-compota
Wed, 09/21/2022 - 19:33
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)