Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамические структуры данных
Форум «Всё о Паскале» > 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); 
     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(c);
  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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.