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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2013, 05:28   #1
MariaD
Пользователь
 
Аватар для MariaD
 
Регистрация: 10.01.2013
Сообщений: 56
Восклицание Список,стэк[Delphi]

С помощью стека, организовать получение палиндрома, в котором вторая половина является зеркальным отражение первой без последнего символа. Первую половину вводить с клавиатуры
н р 1 2 3 4, получить 1 2 3 4 3 2 1. Как доработать чтобы работало?
Я создала стек и очередь. После заполнения стэка, его верхний элемент запоминается в р и удаляется, заполняется очередь, потом из очереди все перемещается в стэк и выводится в мемо2.Так надо было делать или все неправильно?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const a:array[1..5] of Integer=(1,2,3,4,5);
type ptr=^zap;
zap = record
chis:Integer;
next:ptr;
end;
var p,i,r:Integer; x:array[1..10]of Integer;
t,h1,h2,q:Ptr;
begin
  h1:=nil;
                            //äîáàâëåíèå
new(t);
 for i:=1 to 5 do begin
  // GetMem(t,SizeOf(zap));
   t^.chis:=a[i];
   t^.next:=nil;
   if h1=nil then h1:=t
   else begin t^.next:=h1; h1:=t; end;
   end;
  p:=t^.Chis;
  t:=h1;
  h1:=h1^.next;

  Memo2.Lines.Add(IntToStr(p));

  new(q);
  for i:=4 downto 1 do begin
   q^.chis:=a[i];
   q^.next:=nil;
   if h2=nil then h2:=q
   else begin q^.next:=h2; h2:=q; end;
 end;

 q:=h2;
 h2:=h2^.Next;
 r:=h1^.chis;
 t^.chis:=r;
 t^.next:=nil;
 h1:=t;
 for i:=1 to 10 do begin
 x[i]:=t^.Chis;
  t:=h1;
  h1:=h1^.next;
  Memo2.Lines.Add(IntToStr(x[i]));
   end;

end;

end.
MariaD вне форума Ответить с цитированием
Старый 04.06.2013, 08:00   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от MariaD Посмотреть сообщение
С помощью стека, организовать получение палиндрома, в котором вторая половина является зеркальным отражение первой без последнего символа. Первую половину вводить с клавиатуры
н р 1 2 3 4, получить 1 2 3 4 3 2 1. Как доработать чтобы работало?
Я создала стек и очередь. После заполнения стэка, его верхний элемент запоминается в р и удаляется, заполняется очередь, потом из очереди все перемещается в стэк и выводится в мемо2.Так надо было делать или все неправильно?
Алгоритм неправильный.
Не нужно сначала заполнять стек, а только потом приступать к формированию выходной информации.
Вы синхронно заполняете стек и отправляете результат на выход.
Затем опустошаете стек, продолжая отправлять на выход то, что достали из стека.
Очередь не нужна.

Запихиваем 1, выводим 1,
Запихиваем 2, выводим 2,
Запихиваем 3, выводим 3,
Выводим 4,
Извлекаем 3, выводим 3,
Извлекаем 2, выводим 2,
Извлекаем 1, выводим 1.
s-andriano вне форума Ответить с цитированием
Старый 04.06.2013, 08:10   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
rocedure TForm1.Button1Click(Sender: TObject);
const a:array[1..5] of Integer=(1,2,3,4,5);
type ptr=^zap;
zap = record
chis:Integer;
next:ptr;
end;
var p,i,r:Integer; x:array[1..10]of Integer;
Head,Item,p:Ptr;
begin
new(head); Item:=Head;Head.Next:=nil;
 for i:=1 to 4 do begin
   Item^.chis:=a[i]; Memo2.Lines.Text:=Memo2.Lines.Text+ IntToStr(Item^.chis);
   new(p);
   p^.next:=Item; Item:=p;
  
 end;
 Memo2.Lines.Text:=Memo2.Lines.Text+ IntToStr(a[high(a)]);
 while Item<>nil do begin
   Memo2.Lines.Text:=Memo2.Lines.Text+ IntToStr(Item^.chis);
   Item:=item.Next;
 end;
end;
Это если не ошибаюс с утра )
I'm learning to live...

Последний раз редактировалось Stilet; 04.06.2013 в 08:12.
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стэк и подпрограммы Xronikov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 10.06.2012 11:07
Стэк C++ ZavriK Помощь студентам 3 09.04.2012 12:54
СТЭК cop08 Общие вопросы C/C++ 1 21.02.2011 11:12
Стэк КсенияСергеевна Общие вопросы C/C++ 4 09.11.2009 18:51
Инвертировать стэк в C++ Drozvd Помощь студентам 0 09.04.2009 03:58