Вычислить значение выражения в строке - Free Pascal

Узнай цену своей работы

Формулировка задачи:

В заданной строке, представляющей собой выражение, содержащее числа и знаки "+" и "-", вычислить значение выражения. Решил начать с того, чтобы во введенной строке все цифры до знака плюс или минус поместить в отдельную строку, но и тут FreePascal выдает ошибку SIGSEGV на 8 строке. Помогите, пожалуйста, разобраться хотя бы с ошибкой конкретно в самом начале.
Листинг программы
  1. var str1,str2,str3: string;
  2. st1,st2,st3: integer;
  3. i: byte;
  4. begin
  5. readln(str1);
  6. i:=1;
  7. repeat
  8. str2[i]:=str1[i];
  9. inc(i);
  10. until (str1[i]='+') or (str1[i]='-');
  11. delete(str1,1,i-1);
  12. val(str2,st1);
  13. writeln(st1);
  14. readln
  15. end.

Решение задачи: «Вычислить значение выражения в строке»

textual
Листинг программы
  1. var s:string;
  2.     i,k,i1,z,code:integer;
  3.     j:string;
  4. begin
  5.  readln(s);
  6.  s:='0'+s;
  7.  i:=0;
  8.  j:='';
  9.  z:=1;
  10.  for k:=1 to length(s) do
  11.   begin
  12.    if (s[k]='+')or(s[k]='-')
  13.     then
  14.      begin
  15.       val(j,i1,code);
  16.       i:=i+z*i1;
  17.       j:='';      
  18.       if s[k]='+'
  19.        then z:=1
  20.        else z:=-1;
  21.      end
  22.     else
  23.      if k=length(s)
  24.       then
  25.        begin
  26.         j:=j+s[k];
  27.         val(j,i1,code);
  28.         i:=i+z*i1
  29.        end
  30.       else  j:=j+s[k]
  31.   end;
  32.  delete(s,1,1);
  33.  writeln(s,'=',i)
  34. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут