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

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

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

> удаление, Сортированный список
сообщение
Сообщение #1


Гость






Не получается сделать удаление из списка
Должно быть удаление из середины списка, а не только из начала

Код

program sortspisok;
uses crt;
type
    p_sort=^sspis;
    sspis=record
    nomer:string[20];
    next:p_sort;
    end;
var
    head:p_sort; {указатель на первый элемент списка}
    cur:p_sort; {текущий элемент списка}
    p:p_sort; {элемент, после которого вставляем новый узел}
    del:p_sort;
    nomer:string[20]; {элемент ввод с клавиатуры}
    node: p_sort; {новый узел списка}
    c: char;
    f: string;
    n: byte;
begin
    repeat
    clrscr;
    writeln ('сортированный список');
    writeln ('');
    writeln (' a - добавить элемент');
    writeln (' d - удалить элемент');
    writeln (' f - найти');
    writeln (' e - выйти');
    writeln;
    writeln ('======');
    if head = nil
    then writeln ('<>')
    else begin
           cur := head;
           repeat
           writeln (cur^.nomer);
           cur:=cur^.next;
           until cur = nil;
         end;
    writeln ('======');
    c := readkey;
{выход}
    if c = 'e' then exit;
{удаление}
   if c = 'd' then
   if not (head = nil) then
     begin
       write ('удаление элемента : ');
       readln (f);
       cur := head;
       del := nil;
       repeat
       if (cur^.nomer = f) then
         begin

          del :=cur^.next;
         cur^:=del^;
         del^.next:=nil;
{          dispose (del);}
{          del:=NIL;}
         end;
{         cur^.next := cur^.next^.next;}

{          keypressed;}           until cur<>nil;

     end;


{поиск}
    if c = 'f' then
    begin
      write ('найти элемент : ');
      readln (f);
      cur := head;
      n := 0;
      repeat
      if cur^.nomer = f
      then writeln ('..элемент №', n, ' = ', f);
      cur := cur^.next;
      inc (n);
      until cur = nil;
      repeat until keypressed; end;
{добавление }
     if c = 'a' then
     begin
       write('элемент ');
       readln(nomer);
       if length (nomer)<>0 then begin
{введена строка символов}
       new(node); {создадим новый элемент списка}
       node^.nomer:=nomer;
       node^.next:=NIL;
{ищем место для вставки нового элемента}
       cur:=head;
       p:=NIL;
{будем сравнивать введенное значение со значением текущего узла}
       while(nomer>cur^.nomer) and (cur<>NIL) do
       begin
{введенное значение больше текущего}
         p:=cur;
         cur:=cur^.next; {к следующему узлу}
       end;
       if p = NIL then
       begin
{узел в начало списка}
         node^.next:=head;
         head:=node;
       end
       else
       begin
         node^.next:=p^.next;
         p^.next:=node;
       end;
  end;
end;
    until length(nomer)=0; { элемент не введен, нажата клавиша < Enter > }
{ распечатаем введенный список }
    cur:=head;
{ writeln('Сортированный  список ');
    while cur<>NIL do begin
         writeln(cur^.nomer);
         cur:=cur^.next;   end;}
    readln;
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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