Задача 8 Урок 17

Задача 8 Урок 17

На вход вашей программы подается строка вида:
5 + 6 -34 + 56 - 7 + 2
("сколько угодно" чисел с операциями суммы и разности в любом порядке). Вычислите результат (пробелов между символом операции и числом может и не быть.)

program lesson17_8;
type
    myArrStr = array[1..10] of string;
    myArrInt = array[1..10] of integer;

function strToArrStr(s: string): myArrStr;
var
    a: myArrStr;
    b: boolean;
    i, k: integer;
begin

    k := 0;
    b := false;

    for i := low(a) to high(a) do
        a[i] := '';

    for i := 1 to length(s) do
        if (s[i] >= '0') and (s[i] <= '9') then
        begin
            if not b then
            begin
                k := k + 1;
                if k > high(a) then
                begin
                    k := k - 1;
                    break;
                end;
            end;
            a[k] := a[k] + s[i];
            b := true;
        end
        else if b then
            b := false;

    result := a;
end;

function arrStrToArrInt(a: myArrStr): myArrInt;
var
    n: myArrInt;
    i: integer;
begin
    for i := low(a) to high(a) do
    begin
        if a[i] <> '' then
            val(a[i], n[i])
        else
            n[i] := 0;
	end;
    result := n;
end;

function strToStrSym(s: string): string;
var
    sym: string = '';
    i: integer;
begin
    for i := 1 to length(s) do
        if (s[i] = '+') or (s[i] = '-') then
            sym := sym + s[i];
    result := sym;
end;

var
    arr: myArrStr;
    num: myArrInt;
    s, symbol: string;
    i, n: integer;
begin

    writeln('enter the expression: ');
    readln(s);

    arr := strToArrStr(s);
    num := arrStrToArrInt(arr);
    symbol := strToStrSym(s);

    n := num[1];
    for i := 1 to length(symbol) do
        if symbol[i] = '+' then
            n := n + num[i + 1]
        else
            n := n - num[i + 1];

    writeln(n);
	readln();
end.
vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)