Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2011, 17:38   #1
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию Скажите где ошибка в программе (Паскаль)

Нужно написать задачку, тема написана что стеки. Я вроде написал, но программа не хочет работать. Взгляние одним глазком, подскажите что не так.
Условие прикрепил в картинке, номер 28. Заранее спасибо!
Код:
program Project3;
{$APPTYPE CONSOLE}
uses
  SysUtils;
const n=2;
Type chislo=packed array [1..n] of 0..9;
  stack=^Node;
  Node=Record
    info:chislo;
    next:stack
  End;
var top,L:stack; ch:chislo;
Procedure InStack(L:stack; x:chislo);
var q:stack;
begin {InStack}
  new(q);
  q^.info:=x;
  q^.next:=top;
  top:=q
end; {InStack}
Procedure PopStack(var L:stack; var ch:chislo);
var q:stack;
begin {PopStack}
  ch:=top^.info;
  q:=top;
  top:=top^.next;
  dispose(q)
end; {PopStack}
Procedure InitStack(var L:stack);
begin
  top:=nil
end;
procedure Print(stek1:stack);
var i:integer;
begin
  while stek1<>nil do {пока указатель stek1 не станет указывать в пустоту}
  begin   {а это произойдёт как только он перейдёт по ссылке последнего элемента}
    for i:=1 to n do
    Write(stek1^.info[i]); {выводить данне}
    write('  ');
    stek1:=stek1^.next  {и переносить указатель вглубь по стеку}
  end;
end;
Function EmptyStack(L:stack):boolean;
begin
  EmptyStack:=top=nil;
end;
Procedure upor(var L:stack);
var i,j,k:integer; ch:chislo;
  a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,L1:stack;
begin {upor}
  InitStack(L);
  writeln('skolko chisel?');
  readln(k);
  writeln('vvedite po cifre vse chisla');
  for i := 1 to k do
    begin
      for  j:=1 to n do
      begin
        read(ch[j]);
        InStack(L,ch)
      end;
    end;
  Print(L);
  InitStack(a0);
  InitStack(a1);
  InitStack(a2);
  InitStack(a3);
  InitStack(a4);
  InitStack(a5);
  InitStack(a6);
  InitStack(a7);
  InitStack(a8);
  InitStack(a9);
  InitStack(L1);
  while not EmptyStack(L) do
  begin
    PopStack(L,ch);
    for i := n downto 1  do
      case ch[i] of
      0:begin
          InStack(a0,ch);
          a0^.next:=a1;
        end;
      1:begin
          InStack(a1,ch);
          a1^.next:=a2;
        end;
      2:begin
          InStack(a2,ch);
          a2^.next:=a3;
        end;
      3:begin
          InStack(a3,ch);
          a3^.next:=a4;
        end;
      4:begin
          InStack(a4,ch);
          a4^.next:=a5;
        end;
      5:begin
          InStack(a5,ch);
          a5^.next:=a6;
        end;
      6:begin
          InStack(a6,ch);
          a6^.next:=a7;
        end;
      7:begin
          InStack(a7,ch);
          a7^.next:=a8;
        end;
      8:begin
          InStack(a8,ch);
          a8^.next:=a9;
        end;
      9:InStack(a9,ch);
      end;
       L^.next:=a0;
  end;
  Print(L)
end;  {upor}
begin
Upor(L);
readln
end.
Изображения
Тип файла: jpg 1.jpg (90.3 Кб, 147 просмотров)
Тип файла: jpg 2.jpg (61.2 Кб, 151 просмотров)

Последний раз редактировалось Fireblade-fan; 23.11.2011 в 21:01.
Fireblade-fan вне форума Ответить с цитированием
Старый 23.11.2011, 21:02   #2
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

^^^_____^^^

Последний раз редактировалось Fireblade-fan; 24.11.2011 в 04:33.
Fireblade-fan вне форума Ответить с цитированием
Старый 24.11.2011, 04:33   #3
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

................
Fireblade-fan вне форума Ответить с цитированием
Старый 24.11.2011, 04:50   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Код:
for  j:=1 to n do
begin
read(ch[j]);
InStack(L,ch)
end;
Что этот цикл помещает в стек, как ты думаешь? )
Son Of Pain вне форума Ответить с цитированием
Старый 24.11.2011, 12:54   #5
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

Исправил некоторые ошибки, но программа просто выводит числа в обратном порядке (
Код:
program Project3;
{$APPTYPE CONSOLE}
uses
  SysUtils;
const n=2;
Type chislo=packed array [1..n] of 0..9;
  stack=^Node;
  Node=Record
    info:chislo;
    next:stack
  End;
var top,L:stack; ch:chislo; x:integer;
Procedure InStack(var L:stack; var x:chislo);
var q:stack;
begin {InStack}
  new(q);
  q^.info:=x;
  q^.next:=L;
  L:=q
end; {InStack}
Procedure PopStack(var L:stack; var ch:chislo);
var q:stack;
begin {PopStack}
  ch:=top^.info;
  q:=L;
  L:=q^.next;
  dispose(q)
end; {PopStack}
Procedure InitStack(var L:stack);
begin
  top:=nil
end;
procedure Print(var stek1:stack);
var i:integer;
begin
  while stek1<>nil do {пока указатель stek1 не станет указывать в пустоту}
  begin   {а это произойдёт как только он перейдёт по ссылке последнего элемента}
    for i:=1 to n do
    Write(stek1^.info[i]); {выводить данне}
    write('  ');
    stek1:=stek1^.next  {и переносить указатель вглубь по стеку}
  end;
end;
Function EmptyStack(L:stack):boolean;
begin
  EmptyStack:=top=nil;
end;
Procedure upor(var L:stack);
var i,j,k:integer; ch:chislo;
  a0,a1,a2,a3,a4,a5,a6,a7,a8,a9:stack;
begin {upor}
  InitStack(L);
  writeln('skolko chisel?');
  readln(k);
  writeln('vvedite po cifre vse chisla');
  for i := 1 to k do
  begin
    for  j:=1 to n do
        read(ch[j]);
    InStack(L,ch);
  end;
  InitStack(a0);
  InitStack(a1);
  InitStack(a2);
  InitStack(a3);
  InitStack(a4);
  InitStack(a5);
  InitStack(a6);
  InitStack(a7);
  InitStack(a8);
  InitStack(a9);
  while not EmptyStack(L) do
  begin
    PopStack(L,ch);
    for i := n downto 1  do
      case ch[i] of
      0:begin
          InStack(a0,ch);
          a0^.next:=a1;
        end;
      1:begin
          InStack(a1,ch);
          a1^.next:=a2;
        end;
      2:begin
          InStack(a2,ch);
          a2^.next:=a3;
        end;
      3:begin
          InStack(a3,ch);
          a3^.next:=a4;
        end;
      4:begin
          InStack(a4,ch);
          a4^.next:=a5;
        end;
      5:begin
          InStack(a5,ch);
          a5^.next:=a6;
        end;
      6:begin
          InStack(a6,ch);
          a6^.next:=a7;
        end;
      7:begin
          InStack(a7,ch);
          a7^.next:=a8;
        end;
      8:begin
          InStack(a8,ch);
          a8^.next:=a9;
        end;
      9:InStack(a9,ch);
    end;
    L:=a0;
  end;
  Print(L)
end;  {upor}
begin
  Upor(L);
  print(L);
  readln;
  readln(x)
end.
Fireblade-fan вне форума Ответить с цитированием
Старый 24.11.2011, 13:00   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Это и есть главное отличие стека от очереди, он ДОЛЖЕН выдавать в обратном порядке
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 24.11.2011, 13:25   #7
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

Блин, я совсем запутался.... в условии сказано что надо упорядочить по неубыванию. Вроде все сделал по предложенному алгоритму, а выводится просто в обратном порядке... (
Fireblade-fan вне форума Ответить с цитированием
Старый 24.11.2011, 21:25   #8
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

Не хочет сортировать, просто выводит в обратном порядке (
Fireblade-fan вне форума Ответить с цитированием
Старый 25.11.2011, 01:53   #9
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

кто нибудь скомпилируйте это и подскажите где я ошибся
Код:
program Project3;
{$APPTYPE CONSOLE}
const n=2;
Type chislo= array [1..n] of 0..9;
  stack=^Node;
  Node=Record
    info:chislo;
    next:stack
  End;
var top,L:stack; ch:chislo; x:integer;
Procedure InStack(var L:stack; var x:chislo);
var q:stack;
begin {InStack}
  new(q);
  q^.info:=x;
  q^.next:=L;
  L:=q
end; {InStack}
Procedure PopStack(var L:stack; var ch:chislo);
var q:stack;
begin {PopStack}
  ch:=L^.info;
  q:=L;
  L:=q^.next;
  dispose(q)
end; {PopStack}
Procedure InitStack(var L:stack);
begin
  top:=nil
end;
procedure Print(stek1:stack);
var i:integer;
begin
  while stek1<>nil do {???? ????????? stek1 ?? ?????? ????????? ? ???????}
  begin   {? ??? ?????????? ??? ?????? ?? ???????? ?? ?????? ?????????? ????????}
    for i:=1 to n do
    Write(stek1^.info[i]); {???????? ?????}
    write('  ');
    stek1:=stek1^.next  {? ?????????? ????????? ?????? ?? ?????}
  end;
end;
Function EmptyStack(L:stack):boolean;
begin
  EmptyStack:=L=nil;
end;
Procedure upor(var L:stack);
var i,j,y:integer; ch:chislo; b,k:0..9;
  a: array [0..9]of stack;
begin {upor}
  InitStack(L);
  writeln('skolko chisel?');
  readln(k);
  writeln('vvedite po cifre vse chisla');
  for i := 1 to k do
  begin
    for  j:=1 to n do
        read(ch[j]);
    InStack(L,ch);
  end;
  Print(L);
  writeln;
  for i:=0 to 9 do InitStack(a[i]);
  for i := n downto 1  do
  begin
       while not EmptyStack(L) do
       begin
           PopStack(L,ch);
           for j:=0 to 9 do
              if ch[i]=j then InStack(a[j],ch);
       end;
       for j:=0 to 9 do
          if  not EmptyStack(a[j]) then
          begin
            for k:=j+1 to 9 do
              if not EmptyStack(a[k]) then
              begin
                b:=k;
                break
              end;
            a[j]^.next:=a[b];
          end;
  end;
  for j:=0 to 9 do
       begin
          if not EmptyStack(a[j]) then L:=a[j];
          break
       end;
end;  {upor}
begin
  Upor(L);
  Print(L);
  readln
end.
Fireblade-fan вне форума Ответить с цитированием
Старый 25.11.2011, 23:23   #10
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

...........
Fireblade-fan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скажите, где ошибка oleg081 Помощь студентам 0 23.02.2011 13:54
Где в этой программе ошибка: Оля_1991 Помощь студентам 4 04.10.2010 12:20
Где в программе ошибка? Warfvare Помощь студентам 3 22.06.2010 15:26
паскаль! скажите где ошибка? кусака Помощь студентам 3 09.06.2010 18:43
Подскажите, где в программе ошибка gamer123 Паскаль, Turbo Pascal, PascalABC.NET 3 25.02.2008 03:09