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

Удаление из линейного списка

16.06.2018, 07:08. Показов 1193. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Есть программа
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
Program CityList;
 
Uses
  Crt;
  
type
 
  // Запись элемента списка
  PCity = ^TCity;
  TCity = record
    City: String;   // Данные - город
    Next: PCity;    // Указатель на следующий элемент списка
  end; 
 
var
  Head: PCity;   // Голова (первый элемент) списка
   
// Процедура добавления элемента в конец списка  
procedure AddElementToList(aCity: String);
var
  P, T: PCity;
begin
  // Обрабатываем случай, когда список пустой
  if Head = nil then begin
    New(Head);               // Вставляемый элемент будет головой. Выделяем память под него
    Head^.City := aCity;     // Записываем данные
    Head^.Next := nil;
  end
  else begin
    // Ищем последний элемент в списке
    P := Head;
    while P^.Next <> nil do P := P^.Next;
    
    // Выделяем помять под новый элемент и помещаем его в конец списка
    New(T); 
    T^.City := aCity;
    T^.Next := nil;
    P^.Next := T;
  end;
end;  
 
// Процедура вывод списка на экран
procedure VisualList;
var
  P: PCity;
begin
  P := Head;  
  while P <> nil do begin // Обходим каждый элемент списка начиная с головы
    WriteLn(P^.City);     // Выводим на экран каждый элемент
    P := P^.Next;
  end;
end;
 
// Процедура очистки списка
procedure ClearList;
var
  P, T: PCity;
begin
  P := Head;  
  while P <> nil do begin // Обходим каждый элемент списка начиная с головы
    T := P^.Next;
    Dispose(P);           // Освобождаем память, занимаемую элементом
    P := T;
  end;
  Head := Nil;
end;
  
// Загрузка из файла списка  
procedure LoadList(aFileName: String); 
var
  F: TextFile;  
  City: String;
begin
  AssignFile(F, aFileName);    
  Reset(F);                      // Открываем файл с данными для чтения
  
  while not EOF(F) do begin      // Считываем каждую строку файла
    ReadLn(F, City);               
    AddElementToList(City);      // Добавляем элемент (считанный из файла город) в список
  end;
   
  CloseFile(F);                  // Закрываем файл
end;   
 
// Удаление элементов списка, которые не начинаются на "А"
procedure DeleteElementNotA; 
var
  P, T, S: PCity;
begin
  P := Head;  
  while P <> nil do begin // Обходим каждый элемент списка начиная с головы
    
    if P^.City[1] <> 'А' then begin         // Если город начинается на А
      if T <> nil then T^.Next := P^.Next   // Связываем предыдущий элемент с последующим (относительно удаляемого элемента) 
      else Head := P^.Next;                 // Обрабатываем случай, когда удаляется голова списка
      S := P^.Next;            
      Dispose(P);                           // Освобождаем память удаляемого элемента
      P := S;
    end
    else begin
      T := P;                               // Запоминиаем предыдущий элемент
      P := T^.Next;                         // Переходим к следующему элементу списка   
    end;    
  end;
end;   
  
begin
  ClrScr;                                   // Очиска экрана
  
  LoadList('data.txt');                     // Загружаем в список все города из файла
   
  WriteLn('Элементы списка до обработки: ');  
  VisualList;                               // Выводим список на экран
  
  WriteLn;
  WriteLn('Элементы списка после обработки: '); 
  DeleteElementNotA;                        // Удаляем из списка города, что не начинаются на А
  VisualList;                               // Выводим список на экран
  
  ClearList;                                // Очищаем список и освобождаем память
  
  ReadLn;
end.
считывает города в файл после чего удаляет те что не на А
дело в том, что если в файле вообще нет городов на А, то прога вылетает
помогите плиз пофиксить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2018, 07:08
Ответы с готовыми решениями:

Печать линейного списка
Не выводит на экран список. program grdf; uses crt; const maxlen=5; type elemtype=string; list=record elems:array of...

Создание линейного однонаправленного списка
Здравствуйте. Суть проблемы: В файле имеются исходные данные - список фамилий и телефонов, например, таких: Ivanov ...

Проблема с созданием линейного списка.
Создать процедуру создания списка с 5-ти елементов, и процедуру для вывода информационных полей из этого списка. type pp=^elem; ...

3
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8656 / 4492 / 1669
Регистрация: 01.02.2015
Сообщений: 13,902
Записей в блоге: 12
16.06.2018, 08:57
В процедуре DeleteElementNotA не инициализируется переменная T. Она не должна работать.
Нужно переработать процедуру.
0
Заблокирован
16.06.2018, 08:58
Т к этому времени кто, мусор?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8656 / 4492 / 1669
Регистрация: 01.02.2015
Сообщений: 13,902
Записей в блоге: 12
16.06.2018, 09:06
Есть несколько способов удаления элемента из списка.

Наверное, есть смысл сделать удаление из двух частей:
- сначала в цикле удаляются подходящие элементы в начале списка (переменная Head),
- а потом последующие элементы, т.к. их удаление не требует модификации Head.

Есть ещё способ, но он не самостоятельный и требует особого рассмотрения случая с последним элементом и вдобавок копирует информационную часть элемента списка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.06.2018, 09:06
Помогаю со студенческими работами здесь

Процедура ввода данных и формирования линейного списка
Подскажите пожалуйста,пишу программу на динамику,но не пойму где ошибка тут. Procedure INPUT_AND_FORM_SPIS; Var { Описание...

Процедура перемещения 1-го элемента в конец линейного списка
1. Процедура перемещения 1-го элемента в конец линейного списка

Записать последовательность чисел в виде линейного списка
Дали задание: Вводится последовательность чисел и записывается в памяти в виде линейного списка. Определить число элементов в списке, не...

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

как узнать адрес последнего элемента линейного односвязного списка?
как узнать адрес последнего элемента списка? uses crt; type pe=^elem; elem=record num:integer; q:pe; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru