Вычислить значение выражения в строке - Free Pascal
Формулировка задачи:
В заданной строке, представляющей собой выражение, содержащее числа и знаки "+" и "-", вычислить значение выражения.
Решил начать с того, чтобы во введенной строке все цифры до знака плюс или минус поместить в отдельную строку, но и тут FreePascal выдает ошибку SIGSEGV на 8 строке. Помогите, пожалуйста, разобраться хотя бы с ошибкой конкретно в самом начале.
var str1,str2,str3: string; st1,st2,st3: integer; i: byte; begin readln(str1); i:=1; repeat str2[i]:=str1[i]; inc(i); until (str1[i]='+') or (str1[i]='-'); delete(str1,1,i-1); val(str2,st1); writeln(st1); readln end.
Решение задачи: «Вычислить значение выражения в строке»
textual
Листинг программы
var s:string; i,k,i1,z,code:integer; j:string; begin readln(s); s:='0'+s; i:=0; j:=''; z:=1; for k:=1 to length(s) do begin if (s[k]='+')or(s[k]='-') then begin val(j,i1,code); i:=i+z*i1; j:=''; if s[k]='+' then z:=1 else z:=-1; end else if k=length(s) then begin j:=j+s[k]; val(j,i1,code); i:=i+z*i1 end else j:=j+s[k] end; delete(s,1,1); writeln(s,'=',i) end.
Объяснение кода листинга программы
- Объявлены переменные: s (строка), i, k, i1, z, code (целое число), j (строка).
- Считывается строка s.
- К строке s добавляется ноль в начале.
- Устанавливаются начальные значения: i = 0, j = '', z = 1.
- Происходит цикл по символам строки s.
- Если текущий символ равен + или -, то выполняется следующее: а) считывается значение выражения в переменной j, а также значения i1 и code; б) к i прибавляется (z * i1); в) z меняется на 1 или -1 в зависимости от того, был ли знак + или -; г) j очищается.
- Если текущий символ не равен + или -, то выполняется следующее: а) если это последний символ в строке, то к j добавляется текущий символ, считывается значение выражения в переменной i1 и code, и к i прибавляется (z * i1); б) иначе j очищается, а к нему добавляется текущий символ.
- Из строки s удаляется первый символ.
- Выводится значение i и строка s.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д