- •Лабораторная работа №1. Конструирование, анализ кода и отладка программ в интегрированной среде программирования Turbo Pascal.
- •1 Порядок выполнения
- •2 Содержание отчета
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
- •Сортировка вставкой.
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
- •Сортировка вставкой.
- •Сортировка выбором.
- •Сортировка обменом («Пузырьковая сортировка»)
- •Двоичный поиск (или бинарный, или поиск делением пополам)
- •Работа с двумерными массивами (матрицами)
Работа с двумерными массивами (матрицами)
Задача. Дан двумерный массив (матрица) размерностиm*n, элементами которого являются целые числа. Выполнить зеркальное отображение элементов матрицы относительно вертикальной оси симметрии (поменять местами элементы первого столбца с последним, второго с предпоследним и т.д.).
Program VertMirrow;
uses Crt;
const
m=10; {число строк}
n=15; {число столбцов}
type
Tmatr=array[1..m,1..n] of Integer;
TStudentCard = record
SurName : String20; {Фамилия}
Name : String20; {Имя}
FatherName : String20; {Отчество}
Year : Integer; {Год рождения}
HomeAddress: String; {Домашний адрес}
GroupCode : String7; {Шифр группы}
Marks : Tmarks; {Оценки за последний семестр}
end;
Tgroup = array[1..20] of TStudentCard;
var
Matr:TMatr; {исходная матрица}
Finp:Text; {файл исходных данных}
B,i,j:Integer;
GroupRPZ_10_02,
GroupRPZ_09_01 : Tgroup;
procedure PrintMatr;
begin
for i:=1 to m do
begin
for j:=1 to n do Write(Matr[i,j]:5);
Writeln;
end;
Writeln;
end; {PrintMatr}
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;
{чтение исходных значений матрицы из файла}
Assign(Finp,'Finp.dat');
Reset(Finp);
for i:=1 to m do
begin
for j:=1 to n do Read(Finp, Matr[i,j]);
Readln(Finp);
end;
Writeln('Исходная матрица');
PrintMatr;
{Зеркальное отображение матрицы относительно вертикальной оси}
for j:=1 to n div 2 do
{Берем столбцы от первого до среднего}
fori:=1tomdo
{Меняем местами симметричные столбцы}
begin
B:=Matr[i,j];
Matr[j,i]:=Matr[i,n-j+1];
Matr[i,n-j+1]:=B;
end;
Writeln('Преобразованная матрица');
PrintMatr;
end.
ВАРИАНТ №11
Сортировка вставкой.
Принцип метода:
Массив разделяется на две части, отсортированную и не отсортированную. Элементы из не отсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушать в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только один первый элемент, а в качестве не отсортированной – все остальные элементы.
Т.о. алгоритм будет состоять из 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.
ВАРИАНТ №12