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>0dobegin
New(r);
r^.Next:=first;
r^.Numbe:=n;
First:=r;
n := n-1end;
так? в факе так.
2. просмотр списка
procedure Print (first: point);
Var r: point
Begin
R: = first;
While r<>nildobegin
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 doif 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 <> nildobegin
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 > 0dobegin
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;
whilenot found and ( P^.Next <> nil ) doif p^.next^.number = E then found := true
else p := p^.next;
{ Если найден - удалить }if found thenbegin
r := p^.next;
p^.next := r^.next;
dispose( r )
end;
untilnot found; { Пока что-то находится }{ Печатаем, что получилось }
print(first);
end.
neZvezda
16.11.2005 0:09
Этот ужас заработал. ))Про вторую даже спрашивать страшно Спасибооооооооооооооооооооо за потраченное время. И не злитесь, plz, на меня такую неосведомленную и тупую в этом Паскале. Ну не дано.
Altair
16.11.2005 0:55
вторая
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= nilthen L:=N elsebegin
P:=L;
while P^.Next <> nildo P:=P^.Next;
P^.Next:=N
endEnd;
function BListDelElem1(var L: TList; E: TElem): boolean;
var
N: TList;
P: TList;
found: boolean;
begin
found:=false;
if L<>nilthenif L^.Info =E thenbegin
found:=true;
N:=L;
L:=L^.Next;
dispose(N)
endelsebegin
P:=L;
whilenot found and (P^.Next <> nil) doif P^.Next^.Info = E then found:=true
else P := P^.Next;
if found thenbegin
N := P^.Next;
P^.Next := N^.Next;
dispose(N)
endend;
BListDelElem1:=found
end;
procedure BListPrint(L: TList );
begin
write('[ ');
while L <> nilDObegin
write( L^.Info );
If L^.Next <> nilthen write(' | ');
L := L^.Next
end;
writeln(' ]')
end;
procedure ListClear ( var L: TList );
var
N: TList;
beginwhile L <> nildobegin
N :=L;
L:=L^.Next;
dispose(N)
endend;
var
c,i,N:integer;
A:Tlist;
Begin
write('Введите число элементов списка : ');readln(n);
A:=nil;
writeln('Ввод элементов (элементы добавляются в хвост');
for i:=1to n dobegin
write('введите ',i,' элемент: '); readln(c);
BListAddLast(A,c);
end;
ClrScr;
writeln('Вы ввели список :'); BlistPrint(a);
write('Введите элемент которые необходимо перенести в конец: '); readln( с );
if BlistDelelem1(A,c) thenbegin
BlistAddLast(a,c) ;
writeln('полученный список:');
BListPrint(a);
endelse writeln('элемент не найден!');
readln;
ListClear(a);
End.
трава "FAQ: CTRL+C -> CTRL+V" (С) Вставляет!!!
volvo
16.11.2005 1:12
To: Altair
uses crt;
type
point = ^item;
item = record
number: integer;
next: point
end;
procedure print(first: point);
var r: point;
begin
r := first;
while r <> nildobegin
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 > 0dobegin
new( r );
r^.next := first;
r^.Number := n;
if i = 1then 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.