Помощь - Поиск - Пользователи - Календарь
Полная версия: Списки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Вася
Условие задачи:
Пусть задан список слов из каждой группы слов оставить только одно.
Я написал код, но программа не работет. Пожалуйста проверьте и объясните, что не правильно.
program XXX;
uses
  SysUtils,
  windows;

type
   tinfo = string;

   plist = ^tlist;
   tlist = record
				info: tinfo;
	 		next: plist;
   end;

 procedure PrintList(L: plist);
 var
   p: plist;
 begin
   p := L;
   while p<>nil do
   begin
	 write (p^.info, ' ');
	 p := p^.next;
   end;
   writeln;
 end;

 procedure InitList (var L: plist);
 begin
   L := nil;
 end;

 procedure DisposeList (var L: plist);
 var
   d: plist;
 begin
   while L<>nil do
   begin
	 d := L;
	 L := L^.next; 
	 dispose (d);  
   end;
 end;

 function IsEmpty(L: plist): boolean;
 begin
   IsEmpty := L = nil;
 end;

 procedure AddToEndOfList (var L: plist; info: tinfo);
 var
   p,p_pred: plist;
   q: plist;
 begin
   if IsEmpty (L) then
	 begin
	   new (q);
	   q^.next := nil;
	   q^.info := info;
	   L := q;
	 end
   else
	 begin
	   p := L;
	   while p<>nil do
	   begin
		 p_pred := p;
		 p := p^.next;
	   end;
	   new (q);		   
	   p_pred^.next := q;
	   q^.next := nil;
	   q^.info := info;   
	 end;
 end;

 procedure ReadList(var L: plist);
 var
   info: tinfo;
 begin
   InitList (L);
   while not eoln do
   begin
	 read (info);
	 AddToEndOfList (L, info);
   end;
   readln;
 end;
//вот здесь начинаются проблемы
 procedure MakeNewList(var L: plist; L1: plist);
 var
   p, h: plist;
   info: tinfo;
 begin
   InitList (L);
   p := L1;
   while p<>nil do
   begin
	 info := p^.info;
	 h:=p^.next;
	 if (p^.info<>h^.info) and (p<>nil) then

	   AddToEndOfList (L, info);
	 p := p^.next;
   end;
 end;

 var
   L,
   L1: plist;

begin
   SetConsoleCp (1251);
   SetConsoleOutputCp (1251);
   writeln ('Введите список');
   ReadList (L1);
   readln;
   MakeNewList (L,L1);
   writeln ('Новый список ');
   PrintList (L);
   readln;
   DisposeList (L);
   DisposeList (L1);
end.
andriano
Непонятно условие.
Если дан список, то при чем здесь группы?

Или я неправильно восстановил пропущенные знаки препинания?
Вася
Сорри! Уже голова не варит.
Правильное условие:
Пусть задан список слов из каждой группы подряд идущих одинаковых слов оставить только одно.
andriano
Пожалуйста то же самое, только со знаками препинания.
Вася
Пусть дан список слов. Из каждой группы подряд идущих одинаковых слов оставить только одно.
not_programmer
Че не понятно-то?
Если есть подряд идущие элементы с одинаковыми значениями, то удалить все эти элементы, оставив тока один с данным значением и так сотворить с элементами всего списка.

To adriano.

Добавлено через 1 мин.
Вася, я правильно понял? )
Вася
Ну да всё так.
not_programmer
Посмотри вот это: Все о динамических структурах данных.
Может полезное что-нибудь найдешь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.