Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99

Линейные списки

08.12.2009, 11:29. Показов 2688. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуста решить задачу.
Уже неделю не могу решить! Где-то в воде нового элемена ошибка, не могу найти, пожалуста помогите найти. Всегда выводит последний вводимый элемент, а не все вводимые элементы.
Задача такая:

Разработать программу для реализации основных действий с упорядоченным динамическим списком:
•проход по списку с выводом на экран информационных частей элементов
•добавление нового элемента
•удаление заданного элемента.
Пожалуста помогите.
Заранее спасибо!!!

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
program ListEl;
type                       
 pDinItem=^TDinItem; 
 TDinItem=record 
   inf:integer; 
   next:pDinItem; 
 end;
var 
   pHead:pDinItem;
   pCurrent:pDinItem;
   selekt:integer;
procedure EmptyList(var pCurrent,pHead:pDinItem);
 begin 
  New(pHead);
  pHead^.next:=nil;
  pCurrent:=pHead;
 end; 
 
procedure AddEl(var pCurrent:pDinItem);
var
  x: integer;
  pTemp:pDinItem;
begin
  New(pTemp);
  writeln('Enter a new element');
  readln(x);
  pTemp^.next:=nil;
  pCurrent^.next:=pTemp; 
  pCurrent:=pTemp^.next;
  pCurrent^.inf:=x;
end; 
procedure Lead(var pCurrent:pDinItem); 
begin
  while pCurrent<>nil do
  pCurrent:=pCurrent^.next; 
  writeln(pCurrent^.inf);end;
 
procedure PutEl(var pCurrent:pDinItem);
 var
   pPrev:pDinItem;
   x:integer;
begin 
   Writeln('Enter a deleted element');
   readln(x); 
   While (pCurrent<>nil) and (pCurrent^.inf<>x) do
   pCurrent:=pCurrent^.next; 
   if pCurrent=nil then  
   Writeln('The element is not present') else
  begin 
   pPrev^.next:=pCurrent^.next;
   dispose(pCurrent); 
   pCurrent:=pPrev; 
  end; 
end;
 
begin
 EmptyList(pCurrent,pHead); 
 repeat  
  writeln;  
  writeln(':USER MENU:'); 
  writeln('1:Add');
  writeln('2:Put');
  writeln('3:lead');
  readln(selekt); 
 case selekt of 
  1: AddEl(pCurrent);
  2: PutEl(pCurrent);
  3: lead(pCurrent);
 end;
  until selekt=0;
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2009, 11:29
Ответы с готовыми решениями:

Линейные списки и циклические списки
Подскажите,кто как может,у меня тут 2 лабы,с чего мне начать,где можно материал взять?? 1-ая лабораторная: Линейные списки ...

линейные списки
помогите пожалуйста срочно с написанием программы по линейным спискам: Создать список Р, что состоит из записей: первое полеле-буква,...

Линейные списки
Помогите пожалуйста в решении задачи! 1.Используйте линейные списки для хранения последовательности строк. Опишите функцию,...

15
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
08.12.2009, 12:26
при вводе не знаю, EmptyList несколько странно написан, при выводе точно -
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure Lead(var pCurrent:pDinItem); 
begin
  while pCurrent<>nil do
  pCurrent:=pCurrent^.next; 
  writeln(pCurrent^.inf);end;   
- не хватает begin -end для цикла! и еще - что такое pCurrent - указатель на 1 элемент или на последний? 
 если есть указатель на первый эл-т, то написала бы так
 
procedure Lead(pFirst:pDinItem); 
var pCurr: pDinItem; 
begin
  pCurr := pFirst; 
  while pCurr<>nil do
  BEGIN 
    writeln(pCurr^.inf);
    pCurr:=pCurr^.next; 
  END;
end;
1
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
08.12.2009, 14:12  [ТС]
Цитата Сообщение от Dnnn Посмотреть сообщение
при вводе не знаю, EmptyList несколько странно написан, при выводе точно -
А что в процедуре EmptyList не правильно?
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
08.12.2009, 15:14
если Вы хотели просто в начале программы сделать список пустым, то хватило бы просто
pHead := nil;
1
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
08.12.2009, 15:26  [ТС]
Значит можно вообще эту процедуру не писать?
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
08.12.2009, 15:37
да напишите процедуру в одну строчку. а то некоторые преподаватели любят, чтоб все было как положено - нужно действие "инициализации списка" перед началом работы с ним - должна быть и процедура.
а если нужно написать процедуру освобождения памяти в конце работы программы - удаление всего списка -то посмотрите тут рядом была тема участника lex_corba и там у него есть такая процедура
1
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
08.12.2009, 18:34  [ТС]
Что-то у меня ничего не получается.
выводит всегда:
2835
12870
Я пока пишу без процедуры удаления, чтобы окончательно не запутаться

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure EmptyList(var pHead:pDinItem);
 begin 
  New(pHead);
  pHead^.next:=nil;
 end; 
 
procedure AddEl(var pHead:pDinItem);
var
  x: integer;
  pTemp:pDinItem;
begin
  pCurrent:=pHead;
  New(pTemp);
  writeln('Enter a new element');
  readln(x);
  pTemp^.next:=nil;
  pCurrent^.next:=pTemp; 
  pCurrent:=pTemp^.next;
  pCurrent^.inf:=x;
end; 
 
procedure Lead(pHead:pDinItem); 
var pCurr: pDinItem; 
begin
 pCurr := pHead; 
 while pCurr<>nil do
 BEGIN 
  writeln(pCurr^.inf);
  pCurr:=pCurr^.next; 
 END;
end;
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
09.12.2009, 10:08
Цитата Сообщение от Krot_F Посмотреть сообщение
Что-то у меня ничего не получается.
выводит всегда:
2835
12870
Я пока пишу без процедуры удаления, чтобы окончательно не запутаться
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
procedure EmptyList(var pHead:pDinItem);
 begin 
  !!! это зачем? Вы выделяете память под вроде как первый элемент, но при этом в информационную часть ничего не записываете , а записываете только пустой указатель на следующий элемент.
  напишите просто        pHead:=nil;
 
  New(pHead);       ?????????
  pHead^.next:=nil;
 end; 
 
procedure AddEl(var pHead:pDinItem);
var
  x: integer;
  pTemp:pDinItem;
begin
  !!! добавление элемента... если первый раз добавление делаем, то что получится?
      pHead - уже не пустой указатель после предыдущей процедуры EmptyList, а указатель c пустой информац. частью или может не с пустой, а случайным образом заполненной... 
     создаем темп^, указателю на след. первого эл-та присваиваем темп pCurrent^.next:=pTemp,    
     потом вдруг  pCurrent:=pTemp^.next -получается вообще пустое значение в  pCurrent записываем, и непонятно даже, как потом должно сработать при этом   pCurrent^.inf:=x, если pCurrent = nil... 
 
  pCurrent:=pHead;  New(pTemp);
  writeln('Enter a new element'); readln(x);
  pTemp^.next:=nil; pCurrent^.next:=pTemp; pCurrent:=pTemp^.next; pCurrent^.inf:=x;
end; 
 
  предлагаю например так
procedure AddEl(var pHead:pDinItem);
var x: integer;  pTemp, pCurrent:pDinItem;
begin 
  writeln('Enter a new element'); readln(x); 
  New(pTemp); pTemp^.next:=nil; pTemp^.inf:=x; {создали новый элемент, его адрес в переменной темп}
 
  if pHead = nil then {первый элемент добавляем - надо запомнить его адрес в Head}
       pHead := pTemp  
  else  {не первый элемент добавляем}
  begin 
   pCurrent:=pHead;  
   { идем по списку до конца }
   while pCurrent^.next<>nil do 
        pCurrent := pCurrent^.next; 
  {теперь в pCurrent - указатель на посл элемент списка }
   pCurrent^.next:=pTemp; 
 end; 
end;
1
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
09.12.2009, 12:19  [ТС]
Огромное спасибо!
Не знаю как мир бы существовал без таких отзывчивых людей!!!
А из-за чего у меня когда я вывожу элементы то выводит сночало 21899, а потом все элементы.
Откуда это число выходит?
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
09.12.2009, 12:26
не знаю... а полный текст программы можно? тогда может будет ясно
1
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
09.12.2009, 12:37  [ТС]
Уменя пока без удаления.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
program abc;
uses Crt;
type  
 pDinItem=^TDinItem;  
 TDinItem=record 
   inf:integer; 
   next:pDinItem;
 end; 
 var  
   pHead:pDinItem; 
   selekt:integer; 
procedure EmptyList(var pHead:pDinItem); 
 begin 
  New(pHead); 
  pHead^.next:=nil; 
 end; 
procedure AddEl(var pHead:pDinItem); 
var  
  x:integer;  
  pCurrent,pTemp:pDinItem; 
begin 
  writeln('Enter a new element'); 
  readln(x); 
  New(pTemp); 
  pTemp^.next:=nil; 
  pTemp^.inf:=x;  
  if pHead=nil then pHead:=pTemp
 else 
begin 
 pCurrent:=pHead;   
 While pCurrent^.next<>nil do 
      pCurrent:=pCurrent^.next; 
 pCurrent^.next:=pTemp;
 end;  
end;
procedure Lead(var pHead:pDinItem); 
  var pCurr:pDinItem;  
begin  
  pCurr:=pHead; 
  while pCurr<>nil do  
 begin
  writeln(pCurr^.inf); 
  pCurr:=pCurr^.next;  
 end;
end; 
begin
 EmptyList(pHead); 
 repeat  
  writeln;  
  writeln(':USER MENU:');  
  writeln('1:Add');  
  writeln('3:lead'); 
  readln(selekt); 
 case selekt of   
  1: AddEl(pHead);  
  3: lead(pHead);  
 end;  
  until selekt=0;  
end.
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
09.12.2009, 12:55
так вот это Вы не исправили )
procedure EmptyList(var pHeadDinItem);
begin
New(pHead); pHead^.next:=nil; - вот здесь, в 1 элементе и будет всегда записано непонятно что - или 0 или какие-то случайные числа.
end;

Pascal
1
2
3
4
procedure EmptyList(var pHead:pDinItem); 
begin 
  Head:=nil;
end;
1
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
09.12.2009, 13:00  [ТС]
Спасибо
0
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
10.12.2009, 13:58  [ТС]
Пожалуста помогите найти ошибку в процедуре удаления.
Удоляются почему то все элементы вместо одного вводимого элемента.


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure PutEl(var pHead:pDinItem);
var   
  x:integer;   
  pPrev,pCurrent:pDinItem;
begin  
  writeln('Enter a deleted element');  
  readln(x);   
  pCurrent:=pHead;  
  While(pCurrent<>nil) and (pCurrent^.inf<>x) do  
  pCurrent:=pCurrent^.next;  
  if pCurrent=nil then writeln('The element is not present')    
 else begin   
  pPrev^.next:=pCurrent^.next;    
  dispose(pCurrent);   
  end;  
end;
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
10.12.2009, 15:51
у Вас указатель на предыдущий удаляемому элемент не определен. так что видимо просто связи на удаляемом элементе прерываются. попробуйте так
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure PutEl(var pHead:pDinItem);
var   
  x:integer;   
  pPrev,pCurrent:pDinItem;
begin  
  writeln('Enter a deleted element');  
  readln(x);   
  pCurrent:=pHead;  
  pPrev := nil; {Указатель на предыдущий элемент }
  While(pCurrent<>nil) and (pCurrent^.inf<>x) do  
  BEGIN pPrev := pCurrent; 
           pCurrent:=pCurrent^.next;  
  END;
  if pCurrent=nil then writeln('The element is not found')    
  else begin   
           if pPrev = nil then {если удаляем 1 элемент - надо переопределить указатель на нач. списка!}
                 pHead := pCurrent^.next 
           else {не первый эл-т удаляем }
                 pPrev^.next:=pCurrent^.next;    
           dispose(pCurrent);   
  end;  
end;
1
1 / 1 / 1
Регистрация: 07.12.2009
Сообщений: 99
10.12.2009, 16:06  [ТС]
Большое "СПАСИБО"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2009, 16:06
Помогаю со студенческими работами здесь

Линейные списки
Представить одну из приведенную ниже таблицу в виде линейного списка L, элементами которого являются строки таблицы. Написать процедуры...

ДСД. Линейные списки
Attention! Даны два целочисленных списка L1 и L2. Построить новый список L3, включив в него элементы, которые входят одновременно в L1 и L2.

Линейные 1направленные списки.
Вставка в нач. и конец списка, просмотр, поиск и удаление. Помогите поправить код программы. Проверьте правильность кода под цифрами...

Линейные связанные списки
Составить программу обработки списка. Вид списка: линейный дважды связанный. Тело программы должно представлять собой последовательность...

Имеются линейные однонаправленные списки
Имеются линейные однонаправленные списки: type p=^item; item=record data:real; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru