Вычислить значение выражения в строке - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д