1) Составить программу, которая удаляет из списка L все элементы E, если таковые имеются.
2) Составить программу, которая переносит в конец непустого списка L его элемент.
как почитала в Faq, надо использовать 1.создание, 2.вывод, 3.поиск и 4.удаление? Или что-то еще?
volvo
15.11.2005 22:08
Цитата
Или что-то еще?
Нет, больше ничего использовать не нужно. Перечисленных 4-х операций вполне хватит. С самой реализацией списка разобралась? Кстати, какой должен быть список? Одно- или двухсвязный?
Цитата
2) Составить программу, которая переносит в конец непустого списка L его элемент.
Здесь, часом, ничего не пропущено? КАКОЙ элемент переносить в конец списка?
neZvezda
15.11.2005 22:19
Цитата
Или что-то еще?
Нет, больше ничего использовать не нужно. Перечисленных 4-х операций вполне хватит. С самой реализацией списка разобралась? Кстати, какой должен быть список? Одно- или двухсвязный?
Если честно, то вобще без понятия как делать. А список односвязный.
Цитата
Составить программу, которая переносит в конец непустого списка L его элемент.
Цитата
Здесь, часом, ничего не пропущено? КАКОЙ элемент переносить в конец списка?
Вот как дали задание, так и написала. Больше ничего не говорится. В данному случае, мне кажется, что для 1ого можно.
volvo
15.11.2005 22:24
To: neZvezda Погоди, но ведь здесь: FAQ: Списки реализованы ИМЕННО те операции, которые тебе нужны Что же, все это еще раз переписывать? Тогда, извини, а зачем вообще FAQ пишется???
neZvezda
15.11.2005 22:30
Реализованы-то они реализованы. Но когда я компиллирую, то вылезает тысяча и одна ошибка. И зачем такой Faq - я на знаю=))
volvo
15.11.2005 22:32
А вот с этого места поподробней. Где именно ошибки, программу приведи. НО !!! Если НЕ ДАЙ БОГ, у меня не будет ошибок - то я приму соответствующие меры, договорились?
Я смотрю, критиковать тут все мастера.
криворуким и FAQ не поможет!
neZvezda
15.11.2005 22:51
Никто никого не критикует совершенно. Я не программист в пятом колене, чтобы знать как и что делается, поэтому задаю вопросы. И если здесь всех встречают так враждебно, то зачем вобще тогда помогать друг-другу? Принимайте любые меры, но когда у меня не получается, то я задаю вопросы и прошу объяснить. Вроде бы логично.
Ошибки скорее всего вылезают из-за того, что я чего-то недописываю в программе. Использую именно эти процедуры
1. сформировать
Type point = ^item; item = record number: integer; next: point end;
First: = nil; While n>0 do begin New®; r^.Next:=first; r^.Numbe:=n; First:=r; n := n-1 end;
так? в факе так.
2. просмотр списка
procedure Print (first: point); Var r: point Begin R: = first; While r<>nil do begin Writeln ('number = ' ,r^.Number); R:=r^.Next; end;
3. поиск в списке
Procedure Search (first: point; x: integer; var q: point); var r: point; ok: boolean; begin r: = first; ok: = true; while (r<>nil) and ok do if r^.Number=x then ok:=false else r:=r^.Next; q: = r end;
4. удаление
Procedure Delete(Var q: point); Var r: point; Begin r:=q^.next; q^:=r^; r^.Next:=nil; End;
Еще тогда главный модуль. Правильно ли?
begin clrscr; first:=nil; Print(first); Search(first); Delete(first); end.
Ну вот в принципе и все, что я написала. Видимо, чего-то не то.
Altair
15.11.2005 23:00
а текст самой программы можно ? весь текст а не куски!
volvo
15.11.2005 23:02
Нет, не так...
begin clrscr; first:=nil;
{ Здесь - формирование списка !!! }
Print(first); { <--Это - правильно, печатаем то что сформировали }
Search(first); { Стоп. А что именно ищем? Там требуется 3 параметра, здесь есть только 1 Может, так: Search(first, E, found); }
Delete(first); { И здесь неточно... Удаляем НЕ первый элемент (иначе мы потеряем весь список), а то, что было найдено... Вот так: If found <> nil Then Delete(found) } end.
Сейчас набросаю программу полностью, будет легче разобраться...
volvo
15.11.2005 23:36
Ну, примерно, вот так решается первая задача (это без процедур, только Print вынесен отдельно):
uses crt; type point = ^item; item = record number: integer; next: point end;
procedure print(first: point); var r: point; begin r := first; while r <> nil do begin writeln('number = ', r^.Number); r := r^.next; end; end;
var p, r, first: point; found: boolean; n, E: integer;
begin clrscr; first := nil;
write('Первый элемент: '); readln(n); while n > 0 do begin new( r ); r^.next := first; r^.Number := n; first := r; write('следующий (0 для выхода): '); readln(n) end;
print(first); { исходный список } write('Введите число E: '); readln(E);
repeat { Поиск элемента Е } found := false; P := first; while not found and ( P^.Next <> nil ) do if p^.next^.number = E then found := true else p := p^.next;
{ Если найден - удалить } if found then begin r := p^.next; p^.next := r^.next; dispose( r ) end;
until not found; { Пока что-то находится }
{ Печатаем, что получилось } print(first); end.
neZvezda
16.11.2005 0:09
Этот ужас заработал. ))Про вторую даже спрашивать страшно Спасибооооооооооооооооооооо за потраченное время. И не злитесь, plz, на меня такую неосведомленную и тупую в этом Паскале. Ну не дано.
procedure BListAddLast(var L: TList; E: TElem); {добавление в хвост} var N: TList; P: TList; Begin new(N); N^.Info :=E; N^.Next :=nil; if L= nil then L:=N else begin P:=L; while P^.Next <> nil do P:=P^.Next; P^.Next:=N end End;
function BListDelElem1(var L: TList; E: TElem): boolean; var N: TList; P: TList; found: boolean; begin found:=false; if L<>nil then if L^.Info =E then begin found:=true; N:=L; L:=L^.Next; dispose(N) end else begin P:=L; while not found and (P^.Next <> nil) do if P^.Next^.Info = E then found:=true else P := P^.Next; if found then begin N := P^.Next; P^.Next := N^.Next; dispose(N) end end; BListDelElem1:=found 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 ListClear ( var L: TList ); var N: TList; begin while L <> nil do begin N :=L; L:=L^.Next; dispose(N) end end; var c,i,N:integer; A:Tlist;