Вычислить значение выражения в строке - 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.

Объяснение кода листинга программы

  1. Объявлены переменные: s (строка), i, k, i1, z, code (целое число), j (строка).
  2. Считывается строка s.
  3. К строке s добавляется ноль в начале.
  4. Устанавливаются начальные значения: i = 0, j = '', z = 1.
  5. Происходит цикл по символам строки s.
  6. Если текущий символ равен + или -, то выполняется следующее: а) считывается значение выражения в переменной j, а также значения i1 и code; б) к i прибавляется (z * i1); в) z меняется на 1 или -1 в зависимости от того, был ли знак + или -; г) j очищается.
  7. Если текущий символ не равен + или -, то выполняется следующее: а) если это последний символ в строке, то к j добавляется текущий символ, считывается значение выражения в переменной i1 и code, и к i прибавляется (z * i1); б) иначе j очищается, а к нему добавляется текущий символ.
  8. Из строки s удаляется первый символ.
  9. Выводится значение i и строка s.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5