Урок 18. Задача 8.
Primary tabs
На вход вашей программы подается строка вида:
Напишите программу, которая разбирает вычисляет результат этого приложения (сделайте поддержку операций сложения и вычитания).
type arrI = array[1..10] of integer;
type arrC = array[1..4] of char;
var s :string;
i, ind :integer;
arI :arrI;
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_int_array(s :string; arI :arrI) :arrI;
var i, j, n :integer;
s_i :string;
begin
j := 1;
for i := 1 to high(arI) do
if issdigit(s[i]) then
s_i := s_i + s[i]
else
begin
val(s_i, n);
arI[j] := n;
j := j + 1;
s_i := '';
end;
get_int_array := arI;
end;
function get_char_index(s_char :char; arC :arrC) :integer;
var i :integer;
begin
for i := 1 to high(arC) do
if s_char = arC[i] then
get_char_index := i;
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;
begin
for i := 1 to high(arC) do // массив символов
arC[i] := '+-*/'[i];
s := '16 + 3';
s := get_string(s); // убираю пробелы из строки
arI := get_int_array(s, arI); // массив чисел
for i := 1 to length(s) do
if not issdigit(s[i]) then
ind := get_char_index(s[i], arC); // получаю оператор
if ind = 1 then
writeln(arI[1] + arI[2])
else
writeln(arI[1] - arI[2]);
readln();
end.
- Log in to post comments
- 587 reads
vedro-compota
Wed, 09/14/2022 - 19:47
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)