Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Delphi Как скрыть, а потом показать кнопку? Дайте код плис когда на кнопку клацаешь кнопка скрывается с формы и тоже самое с показанием кнопки https://www.cyberforum.ru/ delphi-beginners/ thread623398.html Увеличить размер формы программно Delphi
Нужен код чтобы на кнопку жмёшь и прям а*уено стало чтобы прям заскринить... чтобы прям УУХ , чтобы прямь люди обзавидовалис... лан вообщем нужен код чтобы когда на кнопку жмёшь форма увеличивалась в размерах например была ширина 200 и высота 200, а стало ширина 250 и высота 250
Delphi Привязка кнопки к клавише https://www.cyberforum.ru/ delphi-beginners/ thread623347.html
привет всем помогите сделать привязку каждой кнопке к клавише. саму программу написал а вот привязать не могу. чтоб получилось как в телефоне но без т9
Delphi Как выделить программно 1-ый элемент TListBox? Как выделить программно 1-ый элемент TListBox? https://www.cyberforum.ru/ delphi-beginners/ thread623346.html
Delphi Текстовый редактор + своя таблица кодировки (File; //Нетипизированный файл)
Суть темы, научится писать редактор текста (File; //Нетипизированный файл) Начал тут писать немного, но зашел в тупик. Программа примерно должна выглядеть так 1 открываешь файл. (по умолчанию в edit1, edit2(вписаны нужные смещения)) жмем загрузить файл он загружается hex кодом. Как нужные hex коды преобразовать в цифровые и буквенные значения согласно таблице кодировки.
Delphi Изменение списка ComboBox Добрый день, Подскажите: как можно добавлять/удалять строки из списка в ComboBox? До сего момента я решал это следующим замысловатым образом: 1. заполнял Memo 2. экспортировал его строки в ComboBox Может есть более естественный способ? ;) https://www.cyberforum.ru/ delphi-beginners/ thread623236.html
Delphi Шифровка ресурсных файлов https://www.cyberforum.ru/ delphi-beginners/ thread623219.html
Как зашифровать или спрятать в программу ресурсные файлы(у меня это 69 папок и 552 файла объемом 6,14 mb)? Помогите пожалуйста =) Все файлы, это изображение!
Delphi Переход к следующему файлу в папке
Здравствуйте! Подскажите как осуществить переход к следующему файлу в каталоге? Программа берет первый файл в каталоге, переименовывает его, после успешного переименования переходит к следующему файлу. Если представляю процесс переименования, то процесс перехода к следующему файлу не могу себе представить.
Delphi HInstance - что значит? https://www.cyberforum.ru/ delphi-beginners/ thread623141.html
HInstance в Delphi. Что значит HInstance? К примеру в этой функции LoadCursor(HInstance, pChar(5));
Delphi Отметиться все чекбоксы на форме Дайте код плис, когда тыкаешь на кнопу должны отметиться все чекбоксы на форме и такой же код чтобы галочки снялись https://www.cyberforum.ru/ delphi-beginners/ thread623120.html
RadioGroup, какая выбрана кнопка Delphi
Всем Здрасте, есть радиогруп и в ней 4 итем`са, (по умолчанию 0 итемся активирован) нужен код чтобы жмакаешь на кнопку и программа начала проверять какой итемс выбран, если выбран нулевой итемс, то программа должна ничего не делать, а если 1 итемс, то в мемо должно писаться "1" , если выбран второй итемс, то в мемо должно писаться "2", если выбран 3 итемс, то то в мемо должно писаться "3"
Delphi Свойство Enabled есть у класса TControl https://www.cyberforum.ru/ delphi-beginners/ thread623111.html
есть у меня такой код procedure TForm4.CheckBox3Click(Sender: TObject); begin if form4.CheckBox3.Checked=true then begin form4.Button1.Enabled:=true; form4.Button2.Enabled:=true; form4.LabeledEdit4.Enabled:=true; form4.LabeledEdit5.Enabled:=true; form4.RadioGroup1.Enabled:=true;
13105 / 5886 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
13.07.2012, 19:17 0

Линейные списки - Delphi - Ответ 3265429

13.07.2012, 19:17. Показов 1275. Ответов 1
Метки (Все метки)

Лучший ответ Сообщение было отмечено Игорь Л как решение

Решение

Решение на однонаправленном динамическом списке. Реализована сортировка по возрастанию (неубыванию). Сортировка выполняется по порядку следования полей: Фамилия - Имя - Отчество. Каждый элемент списка содержит указатель на структуру, содержащую основные данные. Перестановка элементов во время сортировки заключается в перестановке указателей на основные данные.
Delphi
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
type
  //Основные данные элементов списка.
  TData = record
    F, N, LN : String; //Фамилия, Имя, Отчество.
  end;
  //Указатель на основные данные.
  TPData = ^TData;
 
  //Указатель на элемент списка.
  TPElem = ^TElem;
  //Элемент списка.
  TElem = record
    PData : TPData; //Указатель на основные данные.
    PNext : TPElem; //Указатель на следующий элемент списка.
  end;
 
  //Тип списка.
  TDList = record
    PFirst : TPElem;
    PLast : TPElem;
  end;
 
//Процедуры для работы со списком.
 
//Начальная инициализация списка. Внимание! Эту процедуру можно выполнять
//только в отношении пустого списка. Иначе будут утечки памяти.
procedure ListInit(var aList : TDList);
begin
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Удаление всего списка из памяти и инициализация.
procedure ListFree(var aList : TDList);
var
  PNext, PDel : TPElem;
begin
  if aList.PFirst = nil then Exit;
 
  PNext := aList.PFirst;
  while PNext <> nil do begin
    PDel := PNext;
    PNext := PNext^.PNext;
    if PDel^.PData <> nil then Dispose(PDel^.PData);
    Dispose(PDel);
  end;
 
  ListInit(aList);
end;
 
//Добавление элемента в конец списка.
procedure ListAdd(var aList : TDList; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  New(PElem^.PData);
  PElem^.PData^ := aData;
 
  PElem^.PNext := nil;
  if aList.PFirst = nil then
    aList.PFirst := PElem
  else
    aList.PLast^.PNext := PElem;
  aList.PLast := PElem;
end;
 
//Распечатка списка.
function ListToStr(const aList : TDList) : String;
var
  PElem : TPElem;
  i : Integer;
begin
  Result := '';
  i := 0;
  PElem := aList.PFirst;
  while PElem <> nil do begin
    Inc(i);
    if i > 1 then Result := Result + '; ';
    if PElem^.PData <> nil then
      Result := Result + PElem^.PData^.F + ' '
        + PElem^.PData^.N + ' ' + PElem^.PData^.LN;
    PElem := PElem^.PNext;
  end;
end;
 
//Пузырьковая сортировка по возрастанию.
procedure SortBubbleAsc(const aList : TDList);
var
  //P1 и P2 - указатели на текущий и на следующий элемент.
  //PEnd и P - указатели на правую границу области сортировки.
  P1, P2, PEnd, P : TPElem;
  //Указатель на основные данные элемента списка.
  PData : TPData;
  //F - флаг для пузырьковой сортировки. Показывает - была ли хотябы одна
  //перестановка элементов на текущей итерации (на текущем проходе области сортировки).
  //FRepl - флаг, показывающий, требуется ли перестановка элементов.
  F, FRepl : Boolean;
begin
  //Если список пуст или содержит только один элемент, то выходим.
  if aList.PFirst = aList.PLast then Exit;
 
  //PEnd и P - указатели на правую границу области сортировки.
  //После каждой итерации repeat - until правая граница области
  //сортировки сдвигается на 1 элемент влево.
  PEnd := aList.PLast;
  P := PEnd;
  repeat
    F := False;
 
    P1 := aList.PFirst;
    while P1 <> PEnd do begin
      //Указатель на следующий элемент.
      P2 := P1^.PNext;
      //Определяем, требуется ли перестановка элементов.
      //Логику организуем так, чтобы сортировка проходила по порядку следования
      //полей: Фамилия - Имя - Отчество.
      FRepl := False;
      if P1^.PData^.F > P2^.PData^.F then //Сравнение фамилий.
        FRepl := True
      else if P1^.PData^.F = P2^.PData^.F then
        if P1^.PData^.N > P2^.PData^.N then  //Сравнение имён.
          FRepl := True
        else if P1^.PData^.N = P2^.PData^.N then
          if P1^.PData^.LN > P2^.PData^.LN then //Сравнение отчеств.
            FRepl := True;
      //Если требуется перестановка элементов, то выполянем её.
      //Перестановка элементов заключается в перестановке указателей на
      //основные данные элементов.
      if FRepl then begin
        PData := P1^.PData;
        P1^.PData := P2^.PData;
        P2^.PData := PData;
        F := True; //Раз была перестановка, то устанавливаем флаг F в True.
      end;
      //Если мы дошли до конца области сортировки, то определяем новую правую
      //границу области сортировки - она будет сдвинута на 1 элемент влево
      //относительно прежней правой границы.
      if P2 = PEnd then P := P1;
      //Перемещаемся к следующему элементу.
      P1 := P2;
    end;
    //Смещение правой границы области сортировки на 1 элемент влево.
    PEnd := P;
    //Если на текущей итерации была хотябы одна перестановка элементов,
    //то продолжаем сортировку.
  until not F;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  L : TDList;
  Data : TData;
begin
  //Начальная инициализация списка.
  ListInit(L);
 
  //Создаём несколько элементов и добавляем их в список.
  Data.F := 'Фамилия3';
  Data.N := 'Имя3';
  Data.LN := 'Отчество3';
  ListAdd(L, Data);
 
  Data.F := 'Фамилия2';
  Data.N := 'Имя2';
  Data.LN := 'Отчество2';
  ListAdd(L, Data);
 
  Data.F := 'Фамилия2';
  Data.N := 'Имя1';
  Data.LN := 'Отчество2';
  ListAdd(L, Data);
 
  Data.F := 'Фамилия2';
  Data.N := 'Имя1';
  Data.LN := 'Отчество1';
  ListAdd(L, Data);
 
  Data.F := 'Фамилия1';
  Data.N := 'Имя1';
  Data.LN := 'Отчество1';
  ListAdd(L, Data);
 
  //Показываем исходный список в Мемо.
  Memo1.Lines.Add('--------------------------------------------------');
  Memo1.Lines.Add('Исходный список:');
  Memo1.Lines.Add(ListToStr(L));
 
  //Сортируем элементы по возрастанию.
  SortBubbleAsc(L);
 
  //Показываем список после сортировки.
  Memo1.Lines.Add('Список после сортировки по возрастанию (неубыванию):');
  Memo1.Lines.Add(ListToStr(L));
 
  //Удаление списка из памяти.
  ListFree(L);
end;


Вернуться к обсуждению:
Линейные списки Delphi
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2012, 19:17
Готовые ответы и решения:

Линейные списки
Вечер добрый! Видимо не далась мне тема про списки. Прошу помощи: Список вводится через...

Линейные списки
Имеется линейный список с последовательным хранением , элементами которого являются окружности....

Однонаправленные линейные списки
Помогите с одноправленным линейным списком.Происходит ошибка на этапе выполения.

Списки. Линейные массивы
Дано линейную таблицу A, которая состоит из целых чисел. Записать алгоритм и составить программу,...

1
13.07.2012, 19:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2012, 19:17
Помогаю со студенческими работами здесь

Курсач, тема: линейные списки
Текст помощи для некоторой программы организован как линейный список. Каждая компонента текста...

Линейные списки \ Реализация некоторых функции
Прошу помощи : Имеется линейный список с последовательным хранением , элементами которого являются...

Delphi линейные списки и записи,не могу разобраться
Создать запись &quot;Станция&quot; (хранит номер или название). Создать запись &quot;Поезд&quot; (хранит номер поезда,...

Линейные списки(перевести вроде с Си++ на Delphi [console application])
Здравствуйте, переведите, пожалуйста, программу с вроде Си ++ на Delphi; Си еще не проходили(((.

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru