Урок 17. Задача №8. Решение.
Primary tabs
На вход вашей программы подается строка вида:
5 + 6 -34 + 56 - 7 + 2("сколько угодно" чисел с операциями суммы и разности в любом порядке). Вычислите результат (пробелов между символом операции и числом может и не быть).
type
MyArr = array[1..6] of integer;
ArrSt = array[1..5] of string;
function Check_tmp(s: string; mas: MyArr): MyArr;
var a: integer;
begin
if(s <> '') then
begin
val(s, a);
mas[6] := a;
end;
result := mas;
end;
function GetRes(arrInt: MyArr; arrStr: ArrSt; x: integer): integer;
var j, i: integer;
begin
if(arrStr[1] = '+') then
x := arrInt[1] + arrInt[2]
else
x := arrInt[1] - arrInt[2];
j := 3;
for i := 2 to length(arrStr) do
begin
if(arrStr[i] = '+') then
x := x + arrInt[j]
else
x := x - arrInt[j];
j += 1;
end;
result := x;
end;
var str, tmp: string;
key: boolean;
i, j, k, conv, res: integer;
arr: MyArr;
arrSig: ArrSt;
begin
writeln('Enter math operation string: ');
readln(str);
for i := 1 to length(str) do
begin
key := false;
if(str[i] >= '0') and (str[i] <= '9') then
tmp += str[i]
else if(str[i] = '+') or (str[i] = '-') then
begin
k += 1;
arrSig[k] := str[i];
key := true;
end;
if(key = true) and (tmp <> '') then
begin
val(tmp, conv);
j += 1;
arr[j] := conv;
tmp := '';
end;
end;
arr := Check_tmp(tmp, arr);
writeln();
writeln('Result is this math operation = ', GetRes(arr, arrSig, res));
readln(); // Удержание консоль
end.// Завершение программы - Log in to post comments
- 5004 reads
vedro-compota
Wed, 05/27/2020 - 19:55
Permalink
завернуть в процедуру
завернуть в процедуру получение массива действий и значений
_____________
матфак вгу и остальная классика =)
Firons
Sat, 05/30/2020 - 18:18
Permalink
Исправлено.
type MyArr = array[1..6] of integer; ArrSt = array[1..5] of string; function Check_tmp(s: string; mas: MyArr): MyArr; var a: integer; begin if(s <> '') then begin val(s, a); mas[6] := a; end; result := mas; end; procedure parsingString(var otherArr: MyArr; var otherSig: ArrSt); var str, tmp: string; key: boolean; i, j, k, conv: integer; begin k := 1; readln(str); for i := 1 to length(str) do begin key := false; if(str[i] >= '0') and (str[i] <= '9') then tmp += str[i] else if(str[i] = '+') or (str[i] = '-') then begin otherSig[k] := str[i]; k += 1; key := true; end; if(key = true) and (tmp <> '') then begin val(tmp, conv); j += 1; otherArr[j] := conv; tmp := ''; end; end; otherArr := Check_tmp(tmp, otherArr); end; function GetRes(arrInt: MyArr; arrStr: ArrSt; x: integer): integer; var j, i: integer; begin if(arrStr[1] = '+') then x := arrInt[1] + arrInt[2] else x := arrInt[1] - arrInt[2]; j := 3; for i := 2 to length(arrStr) do begin if(arrStr[i] = '+') then x := x + arrInt[j] else x := x - arrInt[j]; j += 1; end; result := x; end; var res: integer; arr: MyArr; arrSig: ArrSt; begin writeln('Enter math operation string: '); parsingString(arr, arrSig); writeln(); writeln('Result is this math operation = ', GetRes(arr, arrSig, res)); readln(); // Удержание консоль end.// Завершение программыvedro-compota
Wed, 06/03/2020 - 20:01
Permalink
замечание
-- переделать без третьего аргумента.
_____________
матфак вгу и остальная классика =)
Firons
Thu, 06/04/2020 - 20:43
Permalink
Исправлено.
type IntArr = array[1..6] of integer; ArrSt = array[1..5] of string; function Check_tmp(s: string; mas: IntArr): IntArr; var a: integer; begin if(s <> '') then begin val(s, a); mas[6] := a; end; result := mas; end; procedure parsingString(var otherArr: IntArr; var otherSig: ArrSt); var str, tmp: string; key: boolean; i, j, k, conv: integer; begin k := 1; readln(str); for i := 1 to length(str) do begin key := false; if(str[i] >= '0') and (str[i] <= '9') then tmp += str[i] else if(str[i] = '+') or (str[i] = '-') then begin otherSig[k] := str[i]; k += 1; key := true; end; if(key = true) and (tmp <> '') then begin val(tmp, conv); j += 1; otherArr[j] := conv; tmp := ''; end; end; otherArr := Check_tmp(tmp, otherArr); end; function GetRes(arrInt: IntArr; arrStr: ArrSt): integer; var j, i, x: integer; begin if(arrStr[1] = '+') then x := arrInt[1] + arrInt[2] else x := arrInt[1] - arrInt[2]; j := 3; for i := 2 to length(arrStr) do begin if(arrStr[i] = '+') then x := x + arrInt[j] else x := x - arrInt[j]; j += 1; end; result := x; end; var arr: IntArr; arrSig: ArrSt; begin writeln('Enter math operation string: '); parsingString(arr, arrSig); writeln(); writeln('Result is this math operation = ', GetRes(arr, arrSig)); readln(); // Удержание консоль end.// Завершение программыvedro-compota
Sat, 06/06/2020 - 20:16
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)