Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамические структуры данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
neZvezda
1) Составить программу, которая удаляет из списка L все элементы E, если таковые имеются.

2) Составить программу, которая переносит в конец непустого списка L его элемент.

как почитала в Faq, надо использовать 1.создание, 2.вывод, 3.поиск и 4.удаление? Или что-то еще?
volvo
Цитата
Или что-то еще?

Нет, больше ничего использовать не нужно. Перечисленных 4-х операций вполне хватит. С самой реализацией списка разобралась? Кстати, какой должен быть список? Одно- или двухсвязный?

Цитата
2) Составить программу, которая переносит в конец непустого списка L его элемент.
Здесь, часом, ничего не пропущено? КАКОЙ элемент переносить в конец списка?
neZvezda
Цитата
Или что-то еще?

Нет, больше ничего использовать не нужно. Перечисленных 4-х операций вполне хватит. С самой реализацией списка разобралась? Кстати, какой должен быть список? Одно- или двухсвязный?


Если честно, то вобще без понятия как делать. А список односвязный.


Цитата
Составить программу, которая переносит в конец непустого списка L его элемент.
Цитата
Здесь, часом, ничего не пропущено? КАКОЙ элемент переносить в конец списка?



Вот как дали задание, так и написала. Больше ничего не говорится.
В данному случае, мне кажется, что для 1ого можно.
volvo
To: neZvezda
Погоди, но ведь здесь: FAQ: Списки реализованы ИМЕННО те операции, которые тебе нужны blink.gif Что же, все это еще раз переписывать? Тогда, извини, а зачем вообще FAQ пишется???
neZvezda
Реализованы-то они реализованы. Но когда я компиллирую, то вылезает тысяча и одна ошибка. И зачем такой Faq - я на знаю=))
volvo
А вот с этого места поподробней. Где именно ошибки, программу приведи. НО !!! Если НЕ ДАЙ БОГ, у меня не будет ошибок - то я приму соответствующие меры, договорились?

Я смотрю, критиковать тут все мастера. dry.gif

криворуким и FAQ не поможет!
neZvezda
Никто никого не критикует совершенно. Я не программист в пятом колене, чтобы знать как и что делается, поэтому задаю вопросы. И если здесь всех встречают так враждебно, то зачем вобще тогда помогать друг-другу?
Принимайте любые меры, но когда у меня не получается, то я задаю вопросы и прошу объяснить. Вроде бы логично.

Ошибки скорее всего вылезают из-за того, что я чего-то недописываю в программе. Использую именно эти процедуры

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
а текст самой программы можно ? весь текст а не куски! give_rose.gif
volvo
Нет, не так...

begin
clrscr;
first:=nil;

{ Здесь - формирование списка !!! }

Print(first); { <--Это - правильно, печатаем то что сформировали }

Search(first);
{
Стоп. А что именно ищем? Там требуется 3 параметра, здесь есть только 1
Может, так: Search(first, E, found);
}

Delete(first);
{
И здесь неточно... Удаляем НЕ первый элемент (иначе мы потеряем весь список),
а то, что было найдено...
Вот так: If found <> nil Then Delete(found)
}
end.
Сейчас набросаю программу полностью, будет легче разобраться...
volvo
Ну, примерно, вот так решается первая задача (это без процедур, только 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
Этот ужас заработал. smile.gif))Про вторую даже спрашивать страшно mega_chok.gif
Спасибооооооооооооооооооооо за потраченное время.
И не злитесь, plz, на меня такую неосведомленную и тупую в этом Паскале. Ну не дано.
Altair
вторая

uses crt;
Type
TElem = integer;

TList = ^TNode;
TNode = record
Info: TElem;
Next: TList
end;


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;

Begin
write('Введите число элементов списка : ');readln(n);
A:=nil;
writeln('Ввод элементов (элементы добавляются в хвост');
for i:=1 to n do begin
write('введите ',i,' элемент: '); readln©;
BListAddLast(A,c);
end;
ClrScr;
writeln('Вы ввели список :'); BlistPrint(a);
write('Введите элемент которые необходимо перенести в конец: '); readln( с );
if BlistDelelem1(A,c) then begin
BlistAddLast(a,c) ;
writeln('полученный список:');
BListPrint(a);
end else writeln('элемент не найден!');
readln;
ListClear(a);
End.



трава "FAQ: CTRL+C -> CTRL+V" (С) Вставляет!!!
volvo
To: Altair
!smoke2.gif
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, save: point;
found: boolean;
i, n, E: integer;

begin
clrscr;
first := nil; i := 0;

write('first element: '); readln(n);
while n > 0 do begin
new( r );
r^.next := first;
r^.Number := n;

if i = 1 then save := r;
inc(i);

first := r;
write('next element (0 to exit): '); readln(n)
end;

writeln('before:');
print(first);

r := save^.next;
save^.next := r^.next;
r^.next := first;
first := r;

writeln('after:');
print(first);
end.
Altair
volvo, а не попробовать ли траву Сквозного? blum.gif
lol.gif
neZvezda
Всем спасибо за помощь! Вы мне очень помогли smile.gif
Altair
give_rose.gif wub.gif wub.gif give_rose.gif d3.gif blush.gif !kiss4.gif !flowers.gif air_kiss.gif angel.gif kiss2.gif заходи еще smile.gif
он поможет smile.gif
lol.gif blum.gif blum.gif blum.gif blum.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.