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

Динамический список

09.03.2020, 16:59. Показов 1582. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать и заполнить данными одно-связный линейный список, упорядоченный по "В начало положительные, затем 0, в конец отрицательные" , из N псевдослучайных, от -150 до +100 чисел.

Проблема именно в одном тесте, когда создаю список из одного элемента = 0, а потом добавляю в список еще 0, выдает краш, потому что нет следующего элемента и вот именно это надо переделать как-то или что-то добавить, но я не понимаю как это сделать

// добавить элемент со значением R в соответствии с заданным порядком в список
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
procedure AddR(var ListN, ListK: PElem; r: TInfo); // адреса начала и конца списка и R
var ListC: PElem;  // текущий элемент списка
begin
  if ListN = nil then CreateList(ListN, ListK, r)  // если список пуст
  else
    if r > 0 then AddFirst(ListN, ListK, r)  // добавить в начало
    else
       if r < 0 then AddLast(ListN, ListK, r)  // добавить в конец
      else
         begin // найти после какого
           ListC:=ListN; // с начала списка
           while (ListC^.next^.info) >= r do
             ListC := ListC^.next;
           AddMedium(ListN, ListC, ListK, r)  // добавить после текущего
         end;
end;
 
// добавить новый элемент перед первым
procedure AddFirst(var ListN: PElem; ListK: PElem; r: TInfo);
var Elem: PElem;
begin
  new(Elem);
  Elem^.info:=r;
  Elem^.next:=ListN;
  ListN:=Elem; // теперь он 1-ый
end;
 
 
 
// добавить новый элемент в конец
procedure AddLast(ListN: PElem; var ListK: PElem; r: TInfo);
begin
  new(ListK^.next);
  ListK^.next^.info:=r;
  ListK^.next^.next:=nil;
  ListK:= ListK^.next; 
end;
 
 
// добавить новый элемент в середину после ListC (не в конец)
procedure AddMedium(ListN,ListC,ListK: PElem; r: TInfo);
var Elem: PElem;
begin
  new(Elem);
  Elem^.info:=r;
  Elem^.next:=ListC^.next; // после него то, что было после ListC
  ListC^.next:=Elem; // а он сам после ListC
end;
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2020, 16:59
Ответы с готовыми решениями:

Динамический список
Необходимо создать динамический список со структурой элементов: Учебная группа (№ группы, количество студентов, староста). Заполнить...

Динамический список
1.Организовать связный список из m элементов, используя функцию создания списка спомощью генератора случайных чисел. 2.Вывести список в...

Динамический список, не пойму...
Здравствуйте, есть задание: Сформировать динамический список, элементами которого являются целые числа (в условии...

2
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
09.03.2020, 18:14
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Как я понял, положительные и отрицательные элементы не упорядочены, просто положительные в начале списка, а отрицательные — в конце.
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
type
  TInfo = Integer;
  
  PElem = ^TElem;
  TElem = record
    info : TInfo;
    next : PElem;
  end;
 
procedure Out(List : PElem);
begin
  if List = nil then
    Write('Список пуст.')
  else
    repeat
      Write(#32, List^.info);
      List := List^.next;
    until List = nil;
  WriteLn;
end;
 
function CreateElem(info : TInfo; next : PElem) : PElem;
var Cur : PElem;
begin
  New(Cur);
  Cur^.info := info;
  Cur^.next := next;
  CreateElem := Cur;
end;
 
procedure Add(var List : PElem; info : TInfo);
var Cur : PElem;
begin
  if List = nil then
    List := CreateElem(info, nil)
  else if info < 0 then // в конец
    begin
      Cur := List;
      while Cur^.next <> nil do
        Cur := Cur^.next;
      Cur^.next := CreateElem(info, Cur^.next);
    end
  else // info >= 0 - добавить 0 или положительное число перед 0
    begin
      if List^.info <= 0 then
        List := CreateElem(info, List) // в начало: перед отрицательными (а если это 0, то вообще без разницы в конец или начало)
      else // в начале положительное значение
        begin
          Cur := List;
          while (Cur^.next <> nil) and (Cur^.next^.info > 0) do // ищем когда закончатся положительные
            Cur := Cur^.next;
          Cur^.next := CreateElem(info, Cur^.next);
          
        end;
    end;
end;
  
var
  List : PElem;
begin
  List := nil;
  Out(List);
  Add(List, 0);
  Out(List);
  Add(List, 0);
  Out(List);
  Add(List, 1);
  Out(List);
  Add(List, -1);
  Out(List);
  Add(List, -2);
  Out(List);
  Add(List, 2);
  Out(List);
end.
0
0 / 0 / 0
Регистрация: 11.02.2020
Сообщений: 21
09.03.2020, 23:29  [ТС]
Я уже сам разобрался, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2020, 23:29
Помогаю со студенческими работами здесь

Удаление. Динамический список
Не как не выходит написать код... Требуется процедура удаления по ФИО, т.е мы пишем ФИО, удаляется фио и вместе с этим для фио - дата,...

Линейный динамический список
Задан линейный динамический список, в котором адрес следующего элемента расположен в поле Next. type Person=...... Key:.....//ключ ...

Динамический список в Pascal
Здравствуйте. Изучаю список в паскале и наткнулся на непонятную вещь. Суть задачи: есть программа. Программа умеет создавать новые элементы...

Текст заканчивающийся точкой занести в динамический кольцевой список.
Текст заканчивающийся точкой занести в динамический кольцевой список. вывести на экран монитора текст из кольцевого списка n раз, n ввести...

Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список L2
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru