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

Разместить элементы файла в динамической памяти в односвязном линейном списке

08.10.2018, 22:13. Показов 1181. Ответов 1

Студворк — интернет-сервис помощи студентам
Задача "Разместить элементы файла в динамической памяти в односвязном линейном списке. Из связного списка, содержащего целые числа, удалить все положительные." Есть вот такой код, но не могу понять работу процедуры Dispose, как на место удаленного числа поставить нижеследующее.


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
72
73
74
75
76
77
78
79
80
81
82
83
84
Uses Crt;
Type aa =^spisok;
   spisok = record
   zn:integer;
     next:aa;
              end;
var
s,p:aa;
i,zna,kol, sum:integer;
// процедура добавление элемента в список
Procedure AddSp;
var q:aa;
begin
if s=nil then  //создается первый элемент
begin
New(p);
s:=p
end
else  begin
    q:=p;
    New(p);
    q^.next:=p;
    end;
p^.next:=nil;
Writeln('Введите значение',i,' элемента');
readln(zna);
p^.zn:=zna;
end;
// функция определения конца списка
Function GoNext:boolean;
begin
if p^.next <> nil then
begin
p:=p^.next;
GoNext:=true;
end
else GoNext:=false
end;
//функция освобождения памяти и вывода элементов списка
Function DisposeAll:boolean;
var q:aa;
begin
p:=s;
while p<>nil do
  begin
q:=p^.next;
write(p^.zn,' ');
Dispose(p);
p:=q;
end ;
writeln;
writeln('Освобождение памяти...');
DisposeAll:=true;
end;
 
Function DisposeC:boolean;// удаление положительного элемента
begin
if p^.zn>0 then
Dispose(p);
end;
 
begin   //операторы основной программы
 
s:=nil;  // nil- признак конца списка
writeln('Введите количество элементов списка');
readln(kol);
for i:=1 to kol do //создание списка
Addsp;
 
p:=s;   //установка  р на начало списка
repeat 
if p^.zn>0 then
begin
sum:=sum+p^.zn; //суммируем положительные элементы
DisposeC;
gonext;
end
else writeln(p^.zn); 
until not gonext;
 
if sum=0 then  writeln('в списке нет полож. элементов')
else writeln('sum=',sum);
DisposeAll;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2018, 22:13
Ответы с готовыми решениями:

Разместить элементы файла в динамической памяти
Создать файл, содержащий сведения о владельцах автомобилей: фамилия владельца, марка автомобиля и дата покупки. Разместить элементы файла в...

разместить элементы файла в динамической памяти, Вставить в список L новый элемент F1 перед первым вхождением элемента.
ребят привет всем, помогите написать текст программы для задачи. вот условие: Создать файл вещественных чисел, разместить элементы...

Разместить в динамической памяти элементы, встречающиеся в текстовом файле один раз
Дан текстовый файл, содержащий целые числа, разделенные пробелом. Разместить в динамической памяти элементы, встречающиеся один раз

1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
08.10.2018, 22:42
Цитата Сообщение от SlavikZhelezo Посмотреть сообщение
не могу понять работу процедуры Dispose, как на место удаленного числа поставить нижеследующее
Наверное, речь о DisposeC.
Вариантов традиционно больше одного.
Первый -- держать предыдущий элемент:
Pascal
1
2
3
  if p^.next^.zn>0 then begin
    q:=p^.next; p^.next:=p^.next^.next; Dispose(q);
  end;
В этом случае вариант с головой списка придется обработать отдельно:
Pascal
1
2
3
4
5
6
7
8
9
10
while (s<>nil) and (s^.zn>0) do begin
  q:=s; s:=s^.next; Dispose(q);
end;
if s<>nil then begin
  p:=s^.next;
  while p^.next<>nil do
    if p^.next^.zn>0 then begin
      q:=p^.next; p^.next:=p^.next^.next; Dispose(q);
    end else p:=p^.next;
end;
Другой вариант -- держать указатель на указатель на следующий элемент:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type
  PPNode=^PNode;
  PNode = ^TNode;
  TNode = record
    next: PNode;
    data: Integer;
  end;
 
var
  pp: PPNode; q: PNode;
 
  pp:=@s; { взяли адрес указателя на голову списка }
  while pp^<>nil do { пока указатель по указателю не nil }
    if pp^^.data>0 then begin
      q:=pp^; { сохраним указатель на удаляемый элемент }
      pp^:=pp^^.next; { в указатель запишем адрес следующего элемента }
      Dispose(q); { удалим элемент }
    end else p:=@p^^.next; { перенацелим указатель на поле next текущего элемента }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.10.2018, 22:42
Помогаю со студенческими работами здесь

Не могу вывести элементы из динамической памяти
написал прогу заполняет список 16ю элементами (динамическая память)потом должна их вывести и все.... все легко и просто но вот он их не...

Как поменять элементы в односвязном списке
Мне надо поменять местами элементы max и min,я запуталась, как это надо делать,если есть возможность,помогите.Так же я хотела объединить...

Как в линейном односвязном списке переставить слова в обратном порядке?
Вот программа, которая создает список и выводит его на экран: Type Ukazatel = ^S; S = Record Data : string; Next : Ukazatel ; ...

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

Сгенерировать случайным образом массив целых чисел и разместить его в динамической памяти
Сгенерировать случайным образом массив целых чисел. Разместить массив в динамической памяти. Найти сумму положительных элементов массива.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru