IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Списки, Удаление элементов
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Подскажите как можно удалить из списка элемент под определенным номером.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


FAQ : Списки

Для красоты ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Если следует удалить элемент на который указывается ссылка q, то следует в начале присвоить элементу q^ значение следующего за ним элемента, а затем этот элемент удалить.


{удаление элемента q^}
Procedure Delete(Var q: point);
Var r: point;
Begin
 r:=q^.next;
 q^:=r^;
 r^.Next:=nil; 
End;



Как задается q?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Там же, откуда ты взял реализацию Delete, есть процедура Search... С ее помощью находим Q, и передаем Q в Delete для удаления...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Как подключить эти две процедуры. Помогите. Мне надо чтобы удалялся 3 элемент списка. И выводился список уже без 3 элемента.


{удаление элемента q^}
Procedure Delete(Var q: point);
Var r: point;
Begin
 r:=q^.next;
 q^:=r^;
 r^.Next:=nil; 
End;



и


Procedure Search (first: point; x: integer; var q: point);
{ q - возвращает указатель на найденный элемент; q - nil, если элемента с ключем х в списке нет }
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;


Вот моя программа:


type
 B=^Zapis;              {Описание типа список}
 Zapis=record
 St: String[10];
 Next: B;
 end;
var
 i,n: Integer;
 q: B;
 First, Tail,Curr: B;
begin                       {Начало исполняемой части программы}
 repeat
  Write('Vvedite n>2. n = ');   {Ввод с клавиатуры количества}
  Readln(n);                     {элементов в списке}
 until n>2;
 New(First);                     {Выдиление памяти под первый элемент}
 First^.Next:=Nil;               {Внесение информации в первый элемент}
 Writeln('Vvedite stroky:');
 Readln(First^.St);
 Tail:=First;
 for i:=2 to n do                {Цикл добавление элемента в конец списка}
  begin
   New(Curr);
   Tail^.Next:=Curr;
   Tail:=Tail^.Next;
   Tail^.Next:=Nil;
   Readln(Tail^.St);
  end;                           {Список сформирован}
 Writeln ('Spisok:');
 Curr:=First;
 while Curr<>Nil do              {Вывод исходного списка}
   begin
    Writeln (Curr^.St);
    Curr:=Curr^.Next;
   end;                          {Конец вывода исходного списка}
 Readln;
 Readln;
end.


Заранее огромное спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Мне надо чтобы удалялся 3 элемент списка.

Тогда вот так:
Curr := First; i := 3;
While (Curr <> nil) and (i > 1) Do Begin
  Dec(i); Curr := Curr^.Next;
End;

If (i = 1) and (Curr <> nil) Then Delete(Curr);
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.04.2025 14:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name