- •Лабораторная работа №1. Конструирование, анализ кода и отладка программ в интегрированной среде программирования Turbo Pascal.
- •1 Порядок выполнения
- •2 Содержание отчета
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
- •Сортировка вставкой.
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
- •Сортировка вставкой.
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
Сортировка обменом («Пузырьковая сортировка»)
Принцип метода:
Слева направо поочередно сравниваются два соседних элемента и, если их взаиморасположение не соответствует заданному условию упорядоченности, то они меняются местами. Далее берутся два следующих соседних элемента и так далее до конца массива.
После одного такого прохода на последней n-й позиции массива будет стоять максимальный элемент («всплыл» первый «пузырек»). Поскольку максимальный элемент уже стоит на своей последней позиции, то второй проход обменов выполняется доn-1-го элемента. Всего требуетсяn-1 проход.
Program BubbleSort;
uses Crt;
const n=20; {Длина массива}
type
TVector=array[1..n] of Real;
TStudentCard = record
SurName : String20; {Фамилия}
Name : String20; {Имя}
FatherName : String20; {Отчество}
Year : Integer; {Год рождения}
HomeAddress: String; {Домашний адрес}
GroupCode : String7; {Шифр группы}
Marks : Tmarks; {Оценки за последний семестр}
end;
Tgroup = array[1..20] of TStudentCard;
var
Vector:TVector;
B :Real;
i,k :Integer;
GroupRPZ_10_02,
GroupRPZ_09_01 : Tgroup;
begin
ClrScr;
GroupRPZ_10_02[1].SurName := 'Vakulanko';
GroupRPZ_10_02[1].Marks.Prog := 3;
GroupRPZ_10_02[1].Marks.Philosofy := 5;
GroupRPZ_10_02[1].SurName := 'Danchenko';
GroupRPZ_10_02[1].Marks.Prog := 3;
GroupRPZ_10_02[1].Marks.Philosofy := 3;
GroupRPZ_10_02[1].SurName := 'Kuznesov';
GroupRPZ_10_02[1].Marks.Prog := 3;
GroupRPZ_10_02[1].Marks.Philosofy := 4;
Writeln('Введите элементы массива');
for i:=1 tj n do Read(Vector[i]); Readln;
{---------------------------------------------}
for k:=n downto 2 do
{"Всплывание" очередного максимального элемента - "пузырька" на k-ю позицию}
for i:=1 tj k-1 do
if Vector[i]>Vector[i+1] then
begin
B:=Vector[i];
Vector[i]:=Vector[i+1];
Vector[i+1]:=И
end;
{--------------------------------------------}
Writeln('Отсортированный массив');
for i:=1 tj n do Write(Vector[i]:8:2);
Writeln;
end.
ВАРИАНТ №9
Двоичный поиск (или бинарный, или поиск делением пополам)
Принцип метода:
Алгоритм двоичного поиска допустимо использовать для нахождения заданного элемента ТОЛЬКО В УПОРЯДОЧЕННЫХ МАССИВАХ. Допустим имеем массив упорядоченный по не убыванию (Vector[i]<=Vector[i+1]).
Исходный массив делится пополам и для сравнения выбирается средний элемент. Если он совпадает с искомым, то поиск заканчивается. Если же средний элемент меньше искомого, то все элементы левее его также будут меньше искомого. Следовательно их можно исключить из зоны дальнейшего поиска, оставив только правую часть массива. Аналогично, если средний элемент больше искомого, то отбрасывается правая часть, а остается левая.
На втором этапе выполняются аналогичные действия с оставшейся половиной массива. В результате второго этапа остается ¼ часть массива. И т.д., пока или искомый элемент будет найден, или длина зоны поиска станет равной нулю (т.е. искомый элемент не найден – отсутствует в массиве).
Program BinSearch;
uses Crt;
const n=20; {Длина массива}
type
TVector=array[1..n] of Real;
TStudentCard = record
SurName : String20; {Фамилия}
Name : String20; {Имя}
FatherName : String20; {Отчество}
Year : Integer; {Год рождения}
HomeAddress: String; {Домашний адрес}
GroupCode : String7; {Шифр группы}
Marks : Tmarks; {Оценки за последний семестр}
end;
Tgroup = array[1..20] of TStudentCard;
var
Vector:TVector; {исходный массив}
X :Real;
L,R :Integer; {Границы зоны поиска}
i :Integer;
GroupRPZ_10_02,
GroupRPZ_09_01 : Tgroup;
begin
ClrScr;
GroupRPZ_10_02[1].SurName := 'Vakulanko';
GroupRPZ_10_02[1].Marks.Prog := 3;
GroupRPZ_10_02[1].Marks.Philosofy := 5;
GroupRPZ_10_02[1].SurName := 'Danchenko';
GroupRPZ_10_02[1].Marks.Prog := 3;
GroupRPZ_10_02[1].Marks.Philosofy := 3;
GroupRPZ_10_02[1].SurName := 'Kuznesov';
GroupRPZ_10_02[1].Marks.Prog := 3;
GroupRPZ_10_02[1].Marks.Philosofy := 4;
Writeln('Введите элементы массива');
for i:=1 to n do Read(Vector[i]); Readln;
Write('Введите искомый элемент');
Readln(X);
{---------------------------------------------}
L:=1; R:=n;
While (L<=R) do {Пока не пересекутся границы}
begin
i:=(L+R)div2; {Индекс среднего элемента}
if Vector[i]<X then
Break {элемент найде - выход из цикла}
else
if Vector[i]<X then L:=i+1
else R:=i-1;
end; {while}
if Vector[i]=X then
Writeln('Искомый элемент найден на позиции ',i:3);
else
Writeln('Искомый элемент не найден');
end.
ВАРИАНТ №10