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

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

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

> Симметричный список, Помогите исправить программу
yuivanenko
сообщение 12.05.2010 10:30
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

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


Определить, является ли текст симметричным во входящем файле (за ним идет точка) с использованием списков.

В FAQе нашел файлик, где реализованы процедуры обработки списков, взял создание, печать, формирование списка в обратной последовательности. Затем поэлементно сравниваю два списка, а мне всегда выдается ответ Не симметричны и на экране при выводе пред первым элементом отображается какой то пробел, и он же потом отображается после последнего в обратном списке. Наверное из за этого и ответ не симметричность. Подскажите, где ошибка

program Project1;

{$APPTYPE CONSOLE}
Type
TElem = string; {Òèï èíôîðìàöèîííîé ÷àñòè}

TList = ^TNode; {Ïðåäñòàâëåíèå ñïèñêà }
TNode = record {Çâåíî ñïèñêà}
Info: TElem; {Èíôîðìàöèîííàÿ ÷àñòü}
Next: TList {Ñëåäóþùèé ýëåìåíò ñïèñêà}
end;
var spis,spis2:Tlist;
st:string;
flag:boolean;
Procedure ZListInit(var L: TList);
var
N: TList; {çàãëàâíûé ýëåìåíò}
Begin
new(N);
N^.Next:=nil;
L:=N
End;

procedure ZListAddLast(L: TList; E: TElem);
begin
{ ïîèñê ïîñëåäíåãî ýëåìåíòà ñïèñêà }
while L^.Next<>nil do L := L^.Next;
{ äîáàâëåíèå à ñïèñîê íîâîãî çâåíà }
new(L^.Next );
L:=L^.Next;
L^.Info:=E;
L^.Next:=nil
end;

procedure BListInvert(var L: TList);
var
H: TList; { âñïîìîãàòåëüíûé óêàçàòåëü }
P: TList; { óêàçàòåëü íà îáðàáîòàííûé ýëåìåíò ñïèñêà }
begin
P := nil;
while L<>nil do
begin
{( çàïîìèíàåì óêàçàòåëü íà ñëåäóþùèé )}
H := L^.Next;
{( òåïåðü ñëåäóþùèé çà òåêóùèì áóäåò çâåíî Ð )}
L^.Next := P;
{( òåêóùèé ñòàíîâèòñÿ ïðåäûäóùèì )}
{( äëÿ ñëåäóþùåãî øàãà )}
P := L;
{( ïåðåèåùàåèñÿ ê ñëåäóþùåèó ýëåìåíòó ñïèñêà )}
L:=H
end;
L :=P { ñàìûé ïîñëåäíèé ñòàíîâèòñÿ ïåðâûì }
end;
{ Ñïèñîê ñ çàãëàâíûì çâåíîè }
procedure ZListInvert (L: TList);
begin
BListInvert ( L^.Next )
end;

procedure BListPrint(L: TList );
begin
write('<');
while L <> nil DO
begin
write( L^.Info );
If L^.Next <> nil then write(' ');
L := L^.Next
end;
writeln('>')
end;
procedure ZListPrint(L: TList);
begin
BListPrint(L^.Next )
end;


Begin
ZListInit(spis);
Writeln('vvedite slova v konze .');
readln(st);
While st<>'.' do
begin
ZListAddLast(spis, st);
Readln(st);
end;
spis2:=spis;
BListPrint(spis);
writeln;
BListInvert(spis2);
BListPrint(spis2);
flag:=true;
while spis <> nil DO
begin if spis^.info<>spis2^.info then flag:=false;
spis := spis^.Next; spis2 := spis2^.Next;end;
if flag then Writeln('Simmetrichniy') Else Writeln('Ne Simmetrichniy');
readln;
End.


Пытался найти ошибку сам, но так и не пойму, откуда берется пробел перед элементами

Сообщение отредактировано: yuivanenko - 14.05.2010 21:18
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Ozzя
сообщение 12.05.2010 15:04
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

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


Это две задачи? Или "2 в одном"?
По 2-й - FAQ. "Палиндромы."
По 1-й - Поиск.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
yuivanenko
сообщение 12.05.2010 16:23
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

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


Цитата(Ozzя @ 12.05.2010 15:04) *

Это две задачи? Или "2 в одном"?
По 2-й - FAQ. "Палиндромы."
По 1-й - Поиск.


Условие задачи второе, просто нужно сделать с динамическими переменными. Вот я и решил из файла сделать прямой список, потом по прямому списку сформировать обратный и сравнить. Есл есть какие нибудь другие предложения, с удовольствием рассмотрю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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