Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Михайлов.doc
Скачиваний:
4
Добавлен:
05.03.2016
Размер:
197.12 Кб
Скачать

Работа с двумерными массивами (матрицами)

Задача. Дан двумерный массив (матрица) размерности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