Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 13.05.2012
Сообщений: 30
1

Список целых чисел

19.11.2012, 16:04. Показов 2104. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
199
200
201
202
203
204
205
206
207
208
209
210
211
unit Ulist; // модуль со основными процедурами и вспомогательными функциями
interface
uses SysUtils;
type
  EListEmpty = class(Exception)
  end;
  PNode = ^Node;  //Указатель на узел списка.
    List  = PNode;  //Список узлов.
    T = integer;    //Тип элементов списка.
    Node = record   //Узел списка.
        key: T;       //Элемента списка.
        next: PNode;  //Указатель на следующий узел списка (служебное //поле).
    end;
procedure AddR(i: T);
//Операция ДобавитьСправа. Добавляет в список L элемент а справа.
procedure AddL(i: T);
//Операция ДобавитьСлева. Добавляет в список L элемент a слева.
function H(var L: List): T;
//Операция Голова. Удаляет из списка голову и возвращает её значение. 
function H_(var L: List): T;
//Операция ГоловаСправа. Удаляет из списка голову справа и возвращает её значение.
function Tail(var L: List): List;
//Операция Хвост. Выделяет из списка L хвост и возвращает указатель на него.
function Tail_(var L: List): List;
//Операция ХвостСправа. Выделяет из списка L хвост справа и возвращает указатель на него.
procedure Empty(L: List);
//Операция Опустошить. Опустошает список.
procedure Merge(var L,T: List);
//Операция Соединить. К списку L добавляет список N справа.
function Number(L: List):Cardinal;
//Операция Элементов. Возвращает количество элементов в списке.
procedure DeleteList(L: List);
var
Ls: List;
implementation
{----Вспомогательные операции--------------------------------}
//-----------------------------------------------------------------------------
function Next(a: PNode):PNode;
//Возвращает указатель на узел списка, следующий
//за узлом с адресом а.
begin
    if a = nil then begin Result:= nil; exit end
    else Result:= a^.next;
end;
function Last(L: List):PNode;
//Возвращает указатель на последний узел списка.
begin
    Result:= L;
    if L = nil then exit //список пуст
        else while Result^.next <> nil do
                    Result:= Next(Result);
end;
function PredLast(L: List; var p: PNode):PNode;
//Возвращает указатель на последний узел списка и предпоследний через p.
begin
 Result:= L;p:= L;
   if L = nil then exit;//В списке нет элементов.
   if L^.next = nil then exit//В списке один элементов.
   else  while Result^.next <> nil do//В списке два и более элементов.
     begin
       p:= Result;
   Result:= Next(Result)
 end;
end;
//-------------------------------
//Основные процедуры
//-------------------------------
procedure Empty(L: List);
//Операция Опустошить. Опустошает список.
  var p: List;
    begin
      p := nil;
      while L <> nil do
        begin
          p := L;
          L := L^.next;
          dispose(p);
        end;
    end;
procedure AddL(i: T);
//Операция ДобавитьСлева. Добавляет в список L элемент a слева.
var pA, pB, pC:pNode;
begin
  pA:=Ls;
   pB:=nil;
 pC:=nil;
  new(pB);
  pB^.key:=i;
  pB^.next:=nil;
  if pA<>nil then pB^.next:=pA;
  Ls:=pB;
end;
procedure AddR(i: T);
//Операция ДобавитьСправа. Добавляет в список L элемент а справа.
var pA, pB, pC:pNode;
begin
pA:=Ls;
pB:=nil;
pC:=nil;
while pA<>nil do
begin
pB:=pA;
pA:=pA^.next;
end;
new(pC);
if pB<>nil then pB^.next:=pC else Ls:=pC;
pC^.key:=i;//i параметр процедуры
pC^.next:=nil;
end;
function Number(L: List): Cardinal;
//Операция Элементов. Подсчитывает и возвращает количество элементов в cписке.
begin
Result:= 0;
while L <> nil do begin
    L:= Next(L);
    inc(Result);
end;
end;
function H(var L: List): T;
//Операция Голова. Удаляет из списка голову и возвращает её значение. 
  var p: PNode;
    begin
      if L = nil then
        begin
          raise EListEmpty.Create('Список пуст!');
          exit
        end;
      Result := L^.key;
      New(p);
      p := L;
      L := L^.next;
      dispose(p);
      if Number(L) = 0 then L := nil;
    end;
function H_(var L: List): T;
//Операция ГоловаСправа. Удаляет из списка голову справа и возвращает её значение. 
var pred,lst: PNode; //Указатели на предпоследний и последний узлы списка
    begin
      if L = nil then
        begin
          raise EListEmpty.Create('Список пуст!');
          exit;
        end;
      Result := Last(L)^.key;//возвратили элемент списка, находящийся в голове
      lst := PredLast(L,pred);
      if pred = lst then
        begin
          L := nil;
          dispose(pred);
          exit;
        end;
      pred^.next := nil;
      dispose(lst);
    end;
function Tail(var L: List): List;
//Операция Хвост. Выделяет из списка L хвост и возвращает указатель на него. 
  var  pred: PNode;
  begin
    Result:= nil;
    if L = nil then
      begin
        raise EListEmpty.Create('Список пуст!');
        exit;
      end;
    if Number(L) > 1 then
      begin
        Result := L;
        L := Last(L);
        PredLast(Result,pred);
        pred^.next := nil;
      end
    else raise EListEmpty.Create('В списке один элемент!');
  end;
function Tail_(var L: List): List;
//Операция ХвостСправа. Выделяет из списка L хвост справа и возвращает указатель на него.
  begin
    Result:= nil;
    if L = nil then
      begin
        raise EListEmpty.Create('Список пуст!');
        exit;
      end;
    if Number(L) > 1 then
      begin
        Result := L^.next;
        L^.next := nil;
      end
    else raise EListEmpty.Create('В списке один элемент!');
  end;
procedure DeleteList(L: List);
//Удаляет список
  begin
    while L <> nil do H(L);
  end;
procedure Merge(var L,T: List);
//Операция Соединить. К списку L добавляет список N справа.
  begin
    if (L = nil) and (T = nil) then
      begin
        raise EListEmpty.Create('Списки пусты!');
        exit;
      end;
    if (L = nil) or (T = nil) then
      begin
        raise EListEmpty.Create('Один из списков пуст!');
        exit;
      end;
    Last(L)^.next:= T;
    T:= nil;
  end;
end.
Добавлено через 3 минуты
Скажите пожалуйста, как объяснить строчку 169 и 170, в функции Tail(Что она реализует)?
Delphi
1
2
        PredLast(Result,pred);
        pred^.next := nil;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2012, 16:04
Ответы с готовыми решениями:

Односторонний список для хранения целых чисел
Cоздайте односторонний список для хранения целых чисел. Cоздайте программу, которая позволит вам...

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

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

Записи. Сформировать список целых чисел, вводя данные с клавиатуры
Помогите составить программу &quot;Сформировать список целых чисел, вводя данные с клавиатуры&quot;. На...

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

Ввести список целых чисел,предусмотреть проверку правильности ввода,отсортировать по убыванию.
Помогите с написанием программы. нужно Ввести список целых чисел. Предусмотреть проверку...

Даны два целых числа А и В (A<B). Найти произведение всех целых чисел от А до В включительно
помогите

Определите x,y,z где, x - множество целых чисел от 5 до 33, y - мн-во простых чисел, z - мн-во составных чисел
Определите x,y,z где,x-множество целых чисел от 5 до 33, y-множество простых чисел, z-множество...

Сформировать множество целых чисел и выделить из него подмножество чисел, кратных 7
Сформировать множество целых чисел и выделить из него подмножество чисел, кратных 7. кто знает что...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru