Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мое (Восстановлен) - копия.doc
Скачиваний:
3
Добавлен:
20.09.2019
Размер:
532.99 Кб
Скачать

1 .Начальное состояние Рисунок 4.2

Рисунок 4.2 – Начальное состояние

2. Пузырьковая сортировка начинается с конца

Для этого вначале сравниваем указатель на последний элемент(cur1^.Remuneration_Amount) с предпоследним(cur^.Remuneration_Amount),если предпоследний элемент больше последнего(см. Рисунок 4.3),то они меняются местами:

if MainForm.cur1^.Remuneration_Amount> cur^.Remuneration_Amount then

begin

S:=MainForm.cur1.Remuneration_Amount;

MainForm.cur1^.Remuneration_Amount:= cur^.Remuneration_Amount;

cur^.Remuneration_Amount:=S;

spt:=MainForm.cur1^.S;

MainForm.cur1^.S:=cur^.S;

cur^.S:=spt;

end;

e nd;

Рисунок 4.3 – Сравнение последнего с предпоследним

Хоть в нашем случае они оказывают равными,но все равно значения меняются местами Рисунок 4.4

Р исунок 4.4 – Идет сортивка-элементы меняются мстами

3 .

Рисунок 4.5 – Идет сортировка-Шаг 3

4 .

Рисунок 4.6 – Идет сортировка-элементы меняются местами

5 . Последующие значения стоят на своих местах,только нам осталось поменять местаи последний с предпоследним,так как предпоследний оказывается больше последнего Рисунок 4.7

Рисунок 4.7 – Завершение сортировки по возрастанию

Теперь по-шагово рассмотрим сортировка по убыванию,она идетнично сортировке по возрастанию,за исключением что самый «тяжелый» элемент будет стоять вначале,а самый «легкий» в конце.

1.Начальное состояние Рисунок 4.2

2. Пузырьковая сортировка начинается с конца

Для этого вначале сравниваем указатель на последний элемент(cur1^.Remuneration_Amount) с предпоследним(cur^.Remuneration_Amount),если предпоследний элемент меньше последнего(см. Рисунок 4.8),то они меняются местами:

if MainForm.cur1^.Remuneration_Amount> cur^.Remuneration_Amount then

begin

S:=MainForm.cur1.Remuneration_Amount;

MainForm.cur1^.Remuneration_Amount:= cur^.Remuneration_Amount;

cur^.Remuneration_Amount:=S;

spt:=MainForm.cur1^.S;

MainForm.cur1^.S:=cur^.S;

cur^.S:=spt;

end;

e nd;

Рисунок 4.8 – Идет сортировка – элементы меняются местами

3 .

Рисунок 4.9 – Идет сортировка – элементы меняются местами

4 .

Р исунок 4.10 - Идет сортировка – элементы меняются местами

5.

Р исунок 4.11 - Идет сортировка – элементы меняются местами

6.Конечное состояние

Рисунок 4.12 – Конечное состояние

Добавление в список.

procedure Insert;

begin

MainForm.Cur1:=MainForm.first1;

count:=0;

while MainForm.cur1<>NIL do

begin

MainForm.cur2:=MainForm.cur1^.S;

if (StrToInt(FileForm.Edit1.Text)=MainForm.cur1^.Remuneration_Amount) then

begin

count:=1;

while MainForm.cur2^.Next<>NIL do

begin

MainForm.cur2:=MainForm.cur2^.Next;

end;

New(MainForm.cur2^.Next);

MainForm.cur2:=MainForm.cur2^.Next;

MainForm.cur2^.Surname:=FileForm.Edit2.Text;

MainForm.cur2^.Name:=FileForm.Edit3.Text;

MainForm.cur2^.Patronymic_Name:=FileForm.Edit4.Text;

MainForm.cur2^.Code:=FileForm.Edit6.Text;

MainForm.cur2^.City:=FileForm.Edit5.Text;

MainForm.cur2^.Sing_of_termination:=0;

MainForm.cur2^.Next:=NIL;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

if count=0 then

begin

MainForm.cur1:=MainForm.first1;

while MainForm.cur1^.L<>NIL do

begin

MainForm.cur1:=MainForm.cur1^.L;

end;

New(MainForm.cur1^.L);

MainForm.cur1:=MainForm.cur1^.L;

MainForm.cur1^.Remuneration_Amount:=StrToInt(FileForm.Edit1.Text);

MainForm.cur1^.L:=NIL;

New(MainForm.cur2);

MainForm.cur1^.S:=MainForm.cur2;

MainForm.cur2^.Surname:=FileForm.Edit2.Text;

MainForm.cur2^.Name:=FileForm.Edit3.Text;

MainForm.cur2^.Patronymic_Name:=FileForm.Edit4.Text;

MainForm.cur2^.City:=FileForm.Edit5.Text;

MainForm.cur2^.Code:=FileForm.Edit6.Text;

MainForm.cur2^.Sing_of_termination:=0;

MainForm.cur2^.Next:=NIL;

end;

end;

1 .Так как у меня по умолчанию сортировка по возрастанию,то я буду рассматривать добавление при данной сортировки. Начальное состояние структуры показано на Рисунок 4.13.

Рисунок 4.13- Начальное состояние

2. Рассмотри два случая когда значение Remuneration_Amount есть и когда ещё такого значения Remuneration_Amount нет. Рассматриваем когда Remuneration_Amount:=400, добавление будет на первом уровне Рисунок 4.14

Р исунок 4.14 – Добавили элемента когда Remuneration_Amount:=400

3.А сейчас рассмотрим когда значение Remuneration_Amount:=250 есть.

Е сли if (StrToInt(FileForm.Edit1.Text)=MainForm.cur1^.Remuneration_Amount) совпадают, то добавляем на второй уровень Рисунок 4.15

Рисунок 4.15 –Добавление элемента когда Remuneration_Amount:=250

Удаление.

procedure Delete;

var

Remuneration_Amount : Word; // Сумма вознаграждения

Surname : TString; // Фамилия

Name : TString; // Имя

Patronymic_Name : TString; // Отчество

Code : TString; // Код ХД

City : TString; // Город в котором находится отделнение

CountCur : Boolean; // Проверка существует ли такая запись

begin

Remuneration_Amount:=StrToInt(FileForm.Edit1.Text);

Surname:=FileForm.Edit2.Text;

Name:=FileForm.Edit3.Text;

Patronymic_Name:=FileForm.Edit4.Text;

City:=FileForm.Edit5.Text;

Code:=FileForm.Edit6.Text;

CountCur:=False;

MainForm.Cur1:=MainForm.first1;

while MainForm.cur1<>NIL do

begin

if (Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) then

begin

MainForm.cur2:=MainForm.cur1^.S;

while MainForm.cur2<>NIL do

begin

if (Remuneration_Amount=MainForm.cur1^.Remuneration_Amount) and

(Surname=MainForm.cur2^.Surname) and

(Name=MainForm.cur2^.Name) and

(Patronymic_Name=MainForm.cur2^.Patronymic_Name) and

(Code=MainForm.cur2^.Code) and

(City=MainForm.cur2^.City) then

begin

CountCur:=True;

{Логическое удаление записи из структуры}

MainForm.cur2^.Sing_of_termination:=1;

end;

MainForm.cur2:=MainForm.cur2^.Next;

end;

end;

MainForm.cur1:=MainForm.cur1^.L;

end;

if CountCur then

MessageBox(0,'Запись удалена','Собщение',MB_OK)

else

MessageBox(0,'Данной записи не существует в структуре','Удаление не возможно',MB_OK);

end;

end.

Мы можем удалять по различным параметрам(по сумме вознаграждения, по фамилии, по имени, по отчеству, по коду ХД, по городу в котором находится отделение). Удалим запись с Remuneration_Amount:=900 Рисунок 4.16

Р исунок 4.16 – Нашли элемент с Remuneration_Amount:=900

2 .Удаляем его, тогда у предпоследнего элемента станет cur1=NIl Рисунок 4.17

Рисунок 4.17 – Конечное состояние