Урок 21. Задача 8.
Primary tabs
"Калькулятор"
Var i, buf :integer;
s :string;
function calculator(s :string; var i, buf :integer) :integer;
var str, char :string;
fl_mul, fl_minus, fl_rec :boolean;
res,num_mul, vl_I :integer;
begin
str := ''; // строка с актуальным числом
i += 1;
char := ''; // знак
res := 0; // ответ
num_mul := 0;
fl_rec := false;// число из предыдущей итерации
fl_mul := false; // флаг умножения
fl_minus := false; // флаг для преобразование числа в отрицательное число
str := ''; // строка с актуальным числом
//writeln(i);
while (i <= length(s) + 1) do
begin
if s[i] = '(' then
begin
calculator(s, i, buf);
i += 1;
end
else
begin
if s[i] = ')' then
begin
{
}
end
else
begin
if (s[i] >= '0') and (s[i] <= '9') then
str := str + s[i]
else
begin
char := s[i]; // находит знак
val(str, vl_I);
writeln(vl_I, char);
str := '';
if fl_mul then // умножает
begin
fl_mul := false;
vl_I := num_mul * vl_I;
end
else
if fl_minus then // делает число отрицательным
begin
fl_minus := false;
vl_I := vl_I * (-1);
end;
if char = '*' then
begin
fl_mul := true;
num_mul := vl_I;
end
else
begin
if char = '-' then
fl_minus := true;
res := res + vl_I;
end;
end;
end;
end;
i += 1;
end;
calculator := res;
end;
begin
s := '2*5+(5+2-7)';
i := 0;
buf := 0;
writeln(calculator(s, i, buf));
readln();
end.
- Log in to post comments
- 793 reads
vedro-compota
Sun, 10/23/2022 - 18:27
Permalink
if s[i] = '(' then
-- нельзя вызывать не возвращая результат
2)
-- если встречаем закрывающую, значит функция должна закончить работу
_____________
матфак вгу и остальная классика =)