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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2006, 23:59   #1
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
Вопрос Списки

Задача. Нужно создать список в паскале, забить его значениями с клавиатуры, а потом для каждого элемента выполнить процедуру. Подскажите плз. В списках не шарю, а помощь нужна срочно!
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 06.12.2006, 07:43   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Список чего? Или список - просто массив значений? Приведи наипростейший пример.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 06.12.2006, 07:57   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Список какой? Односвязный или двусвязный, линейный или циклический (кольцевой)? Какой тип данных хранится в списке?
zetrix вне форума Ответить с цитированием
Старый 06.12.2006, 20:36   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Вот программа. Это делфи-консольное приложение выдает Runtime Error. Где ошибка?
Код:
type
  TPStudent=^TStudent;
  TStudent = record
  Znachenie:string;
  Rezultat: string;
  next: TPStudent;
  end;


var
  Head: TPStudent;

function Palindrom(Z:string):boolean;
var i:integer;
    r:boolean;
begin
r:=true;
for i:=1 to length(z) div 2 do
 begin
 if z[i] <> z[length(z)-i+1] then
 r:=false;
 palindrom:=r;
 end;
end;

procedure Proverka;
var
curr: TPStudent;
begin
curr := head;
while curr <> NIL do
begin
if Palindrom(curr^.Znachenie) then
curr^.Rezultat:='Palindrom' else
curr^.Rezultat:='Ne palindrom';
Writeln(curr^.Znachenie+' '+curr^.Rezultat);
curr := curr^.next;
head:=curr;    //Исправлено здесь
end;
end;


procedure Glavnaya;
var
Curr: TPStudent;
s:string;
begin
readln(s);
While s <> '0' do
begin
new(Curr);
Curr^.Znachenie := s;
readln(s);
end;
Proverka;
end;

begin
Glavnaya;
Readln;
end.

end.
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 06.12.2006 в 20:58.
AVer вне форума Ответить с цитированием
Старый 06.12.2006, 20:54   #5
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

А пошагово проверять пробовал? Где идет присвоение какого-либо значения переменной Head? Дальше - команда New() есть, а Dispose() хде?
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 06.12.2006, 21:02   #6
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Насчет Head я исправил. А теперь скажи пожалуйста куда понавтыкать Dispose, а то чего то не догоняю я эту задачу... Ведь если я вставлю ее в процедуру Glavnaya тогда я удалю только что созданный элемент. Так? Подскажи плз. И еще вопрос: Рунтайм Еррор возникает именно из-за этого?
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 06.12.2006, 23:05   #7
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Решение найдено совместно с SuperVisor. За это ему отдельное спасибо.
Код:
program Palindroms;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TPStudent=^TStudent;
  TStudent = record
  Znachenie:string;
  Rezultat: string;
  next: TPStudent;
  end;


var
  Curr,Buf: TPStudent;

function Palindrom(Z:string):boolean;
var i:integer;
    r:boolean;
begin
r:=true;
for i:=1 to length(z) div 2 do
 begin
 if z[i] <> z[length(z)-i+1] then
 r:=false;
 palindrom:=r;
 end;
end;

procedure Proverka;
begin
while curr <> NIL do
begin
if Palindrom(curr^.Znachenie) then
curr^.Rezultat:='Palindrom' else
curr^.Rezultat:='Ne palindrom';
Writeln(curr^.Znachenie+' '+curr^.Rezultat);
curr := curr^.next;
end;
end;


procedure Glavnaya;
var
s:string;
begin
readln(s);
While s <> '0' do
begin
new(Curr);
Curr^.Znachenie := s;
curr^.Rezultat:='';
curr^.next:=Buf;
Buf:=curr;
readln(s);
end;
writeln;
Proverka;
Readln;
end;

begin
Glavnaya;
Dispose(Curr);
end.
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 07.12.2006 в 00:21.
AVer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На списки... Neznau Паскаль, Turbo Pascal, PascalABC.NET 1 02.07.2008 19:49
Списки Вилен Общие вопросы C/C++ 3 22.05.2008 00:40
списки Влдислаав3911 Паскаль, Turbo Pascal, PascalABC.NET 5 10.05.2008 17:35
Списки... Arkuz Компоненты Delphi 2 19.04.2008 22:58