IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> модуль вычисляющий постфиксное выражение, паскаль
resuS
сообщение 21.06.2006 6:58
Сообщение #1


Гость






Есть программа и к ней модуль. Программа вычисляет постфиксное выражение. Должна вычислятьsmile.gif Но после ввода самого выражения открывается код модуля и выводится сообщение об ошибке "203: heap overflow error."
Что делать?
!!!!Все написано в Паскале!!!!
Программа:

Код
program postf;
uses
    PostUnit, Crt;
var

   s:string;
   l:longint;

begin
     ClrScr;
     Writeln('Vvedite postficsalnoe viragenie (primer: "10 15 + 2 * 10 / 5 +" otvet: 10; pisat bez kavichek) ');
     s:='';
     ReadLn(s);
     Stroka(s,l);
     Writeln(l);
     Readkey;
end.


Модуль:
Код
Unit PostUnit;

interface

Type
    Ukaz=^ stek;
    Stek = record
                 num1:longint;
                 next:Ukaz;
end;

Var
   top,P:Ukaz;

procedure AddStek(znak:longint);
procedure DelStek;
procedure obrabotka(dey:integer);
procedure Stroka(str:string; result:longint);

implementation

{procedure AddStek(znak:longint);}
procedure AddStek;
begin
     New(P);
     P^.num1:=znak;
     P^.Next:=top;
     top:=P;
end;

procedure DelStek;
begin
     P:=top;
     top:=top^.Next;
     Dispose(P);
end;

{procedure obrabotka(dey:integer);}
procedure obrabotka;
var
   N:integer;
begin
     if dey=1 then   { + }
     begin
          P:=top;
          N:=P^.num1;
          P:=P^.Next;
          N:=N+P^.num1;
     end
     else
     if dey=2 then   { - }
     begin
          P:=top;
          N:=P^.num1;
          P:=P^.Next;
          N:=N-P^.num1;
     end
     else
     if dey=3 then  { * }
     begin
          P:=top;
          N:=P^.num1;
          P:=P^.Next;
          N:=N*P^.num1;
     end
     else
     if dey=4 then  { / }
     begin
          P:=top;
          N:=P^.num1;
          P:=P^.Next;
          N:=round(N/P^.num1);
     end;
     DelStek;
    { DelStek;}
     AddStek(N);
end;


{procedure Stroka(str:string; result:longint);}
procedure Stroka;
var
   code,i:integer;
   m:longint;
   zn:string;
begin
     While str<>' ' do
     begin
          i:=i+1;
          if str[i]=' ' then
          begin
               zn:=copy(str,0,i);
               str:=copy(str,i,length(str)-i+1);
               i:=0;
               m:=0;
               if zn='+' then obrabotka(1) else
               if zn='-' then obrabotka(2) else
               if zn='*' then obrabotka(3) else
               if zn='/' then obrabotka(4) else
               begin
                    val(zn,m,code);
                    AddStek(m);
               end;
          end;
     end;
     P:=top;
     Result:=P^.num1;
end;

end.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Altair
сообщение 21.06.2006 10:50
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Когда строка начинает разбираться, уже начинается бред:
zn:=copy(str,0,i);

что это ?
Почему копирование с 0 символа ?
(я не разбирался в программе, но это уже - бред, т.к. копироваться будут i-1 символов и длинна строки )
Приведение и разбор постфиксной записи, смотри здесь!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 18:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"