Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ помогите найти ошибку

Автор: Shurka 25.05.2004 23:06

Помогите найти ошибку. Условие задачи следующее: берешь любое аритметическое выражение в виде postfiks, т.е. если дано а+b,то postfiks будет: ab+. А потом начинаешь по знаку разбирать, если цифра, то лпжишь ее в стек, если знак, то извлекаешь из стека 2 последних цифры, и деелаешь соответствуещее знаку действие. Так вот здесь надо использовать модуль, а вот с этим то как раз и заключается проблема.
Ошибки здесь могут быть самыми тупыми.

Код

program стек;
uses crt;
type infotyyp= integer;
    pinutyyp= ^pinutype;
    pinutyyp= record
              element: infotyyp;
              Tipp: pinutyyp;
              end;
var top: pinutyyp;
   avaldis: string;
   i: integer;
   a,b,c: real;

begin

    readln(avaldis);
    Create(top);
    for i:=1 to length(avaldis) do
        begin
             writeln('Введите выражение в виде postfiks:');
             if avaldis[i] in ['0'..'9'] then
                begin
                     val(avaldis[i],pinutyyp^.element);
                     push(top, element);
                end
             else
                begin
                     pop(top, element);
                     a:=pinutyyp^.element;

                     pop(top, element);
                     b:=pinutyyp^.element;
                     case avaldis[i] of
                          '+': c:=a+b;
                          '-': c:=a-b;
                          '*': c:=a*b;
                          '/': c:=a/b;
                     end;

                end;
        end;
        writeln('Ответ:',c);
        readln;
end.

Автор: Altair 25.05.2004 23:19

Цитата
Ошибки здесь могут быть самыми тупыми.

Да уж это точно!
Код
Create(top);
   

А где процедура Create ?????
Код

push(top, element);
               


А где процедура push????
Код
pop(top, element);
                   

тоже ...


Код
uses crt;

И зачем он тут ???

Автор: Shurka 25.05.2004 23:23

ну так это не процедура, а модуль имеется в иду, мне обяснили, что вроде он просто должен быть рядышком, но даже если их и включить в эту программу все равно ничего не получается

Автор: Shurka 25.05.2004 23:29

а вот и эти процедуры, но как я уже сказала все равно что-то не получается

Код
procedure Create(var top: pinutyyp);
begin
    new(top);
    top^.tipp:=nil;
end;

procedure push(info: infotyyp; var top: pinutyyp);
var node:pinutyyp;
begin
    new(node);
    node^.element:=info;
    node^.tipp:=top;
    top:=node;
end;

procedure pop(var info: infotyyp; var top: pinutyyp);
var node:pinutyyp;
begin
    info := top^.element;
    node:=top;
    top:=top^.tipp;
    dispose(node);
end;

Автор: Altair 26.05.2004 2:26

Цитата
но как я уже сказала

Ах сказалА, так с этого надо начинать smile.gif
Значит так, процедуры должны быть или в тексте программы (до слова BEGIN)
или в модуле, который присоединяется, вам как надо?

Автор: Shurka 26.05.2004 21:32

спасибо, с этим я уже сама разобралась. Но ранее я уже открывала тему насчет хеш-таблицы, вот там мне действительно нужна помощь. Задачка не на 10 минут (т. е. то, с чем мне в жизни не справиться)

Автор: Altair 26.05.2004 21:34

Сейчас посмотрю...