- •Лабораторная работа №1. Конструирование, анализ кода и отладка программ в интегрированной среде программирования Turbo Pascal.
- •1 Порядок выполнения
- •2 Содержание отчета
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
- •Сортировка вставкой.
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
- •Сортировка вставкой.
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
Сортировка вставкой.
Принцип метода:
Массив разделяется на две части, отсортированную и не отсортированную. Элементы из не отсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушать в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только один первый элемент, а в качестве не отсортированной – все остальные элементы.
Т.о. алгоритм будет состоять из n-1 – го прохода (n– размерность массива), каждый из которых будет включать четыре действия:
Взятие очередного i-го не отсортированного элемента и сохранение его в дополнительной переменной.
Поиск позиции jв отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов.
Сдвиг элементов массива от i-1-го доj-1-го вправо, чтобы освободить найденную позицию вставки.
Вставка взятого элемента в найденную j-ю позицию.
Program InsertionSert;
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,j,k : Integer;
GroupRPZ_10_02,
GroupRPZ_09_01 : Tgroup;
begin
ClrSrc;
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;
{-----------------------------------------}
for i:=2 to n do
begin
B:=Vector[i]; {взятие неотсортированного элемента}
{цикл поиска позиции вставки}
j:=1;
while (B>Vector[j]) do
j:=j+1;
{после окончания цикла индекс jфиксирует позицию вставки}
{цикл сдвига элементов для освобождения позиции вставки}
for k:=i-1 downto j do
Vector[k+1]:=Vector[k];
{Вставка взятого элемента в найденную позицию}
Vector[j]:=B;
end;
{------------------------------------------}
Writeln('Отсортированный массив');
for i:=1 to n do Write(Vector[i]:8:2);
Writeln;
end.
ВАРИАНТ №7
Сортировка выбором.
Принцип метода:
Находим (выбираем) в массиве элемент с минимальным значением на интервале от 1-го до n-го (последнего) элемента и меняем его местами с первым элементом. На втором шаге находим элемент с минимальным значением на интервале от 2-го доn–го элемента и меняем его местами со вторым элементом. И т.д. до n-1-го.
Program SelectionSort;
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;
Min :Real;
Imin,S,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;
{---------------------------------------------}
for s:=1 to n-1 do
begin
{Поиск минимального элемнта в диапазоне от s-го элемента до n-го}
Min:=Vector[s];
Imin:=S;
for i:=S+1 to n do
if Vector[i]<Min then
begin
Min:=Vector[i];
Imin:=i
end;
{Обмен местами минимального и s-го элемента}
Vector[Imin:=Vector[s]];
Vector[s]:=Min;
end;
{----------------------------------------------}
Writeln('Отсортированный массив');
for i:=1 to n do Write(Vector[i]:8:2);
Writeln;
end.
ВАРИАНТ №8