Урок 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
- 638 reads
vedro-compota
Wed, 09/21/2022 - 19:33
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)