Министерство образования и науки Российской Федерации
Алтайский государственный технический университет
им. И. И. Ползунова
Кафедра «Информационные системы в экономике»
о лабораторной работе № 6
по теме: «Программирование с использованием массивов и подпрограмм»
Выполнил :
Проверил : ассистент каф. ИСЭ
Содержание
1 Постановка задачи………………………………………………….…………………………..3
2 Описание алгоритма……………………………………………….………………………….. 3
3 Описание программы……………………………….…………………………………….…….3
Приложение А Текст программы………………………………………………………….…….7
Приложение Б Тесты…………………………………………………………………..………..10
1. Постановка задачи
Дана целая прямоугольная матрица размерности NxM. Найти среднее арифметическое элементов каждого столбца и упорядочить столбцы по возрастанию этих элементов. (При сортировке использовать метод прямого включения).
2. Описание алгоритма
Структурная схема алгоритма представлена на рисунках 1,2,3,4.
Текст программы представлен в приложении А. Тестовый пример представлен в приложении Б.
3. Описание программы
В программе используется константа const Size=15 – максимальная размерность матрицы.
В программе используются типы:
MatrI = array[0..Size,0..Size] of Integer;
- тип для матрицы А;
MatrASred = array[0..Size] of Integer;- тип для матрицы С –матрицы для запоминания среднего арифметического элементов столбцов А.
В процедуре Sort упорядочивания методом прямого включения используются следующие переменные:
i,j,k :integer - счетчики,
MNew :integer - переменная, необходимая для перестановки столбцов ,
x:integer - Вспомогательная переменная
В процедуру из основной программы передаются массивы A и Sr (как параметры - переменные), а также размерность матрицы N и M (как параметры - значения).
В процедуру ввода матрицы MatrixInput матрица A: MatrI передается как параметр – переменная, размерность N,M: integer передается как параметр – значение. В процедуре используются счетчики цикла i,j : integer.
В процедуру вывода матрицы MatrixOutput матрица A: MatrI передается как параметр – значение, размерность N,M : integer также передается как параметр – значение. В процедуре используются счетчики цикла i,j : integer.
В основной программе используются переменные
i,j :integer - Счетчики цикла,
N,M:integer;- Размерность матрицы N x M,
A: MatrI - Вводимая матрица,
Sr: MatrASred - матрица, содержащая среднее арифметическое каждого столбца.
|
||||||||||
|
Текст программы
Program Lab6;
Uses Crt;
const Size=15;
type
MatrI = array[0..Size,0..Size] of Integer;
MatrASred = array[0..Size] of Integer;
{---------------------------------------------------------------------------}
{Процедура ввода матрицы}
Procedure MatrixInput(Var A: MatrI; N,M : integer);
var
i,j : integer;
begin
if ((N<=0) or (M<=0)) then
begin
writeln('Количество строк или столбцов не может быть равно нулю.');
exit;
end;
if ((N>Size) or (M>Size)) then
begin
writeln('Матрица должна иметь размерность не более(15x15).');
exit;
end;
writeln('Введите матрицу A построчно:');
for i:=1 to N do
for j:=1 to M do
read(A[i][j]);
end;
{--------------------------------------------------------------------------}
{Процедура вывода матрицы}
Procedure MatrixOutput(A: MatrI; Sr:MatrASred ; N,M :integer);
var
i,j : integer;
begin
{Выводим}
writeln('Упорядоченный массив, содержащий среднее арифметическое значение столбцов:');
for i:=1 to M do
write(Sr[i],' ');
writeln;
{Выводим матрицу}
writeln('Упорядоченная матрица A:');
for i:=1 to N do
begin
for j:=1 to M do write(A[i][j],' ');
writeln;
end;
end;
{---------------------------------------------------------------------------}
{Процедура упорядочивания методом прямого включения}
Procedure Sort(var A: MatrI;var Sr:MatrASred ; N,M :integer);
var
i,j,{счетчики}
k, {счетчик}
MNew, {вспомогательная переменная, необходимая для перестановки столбцов}
x:integer; {Вспомогательная переменная}
begin
{сортировка методом прямого включения}
for i:=2 to M do
begin
MNew:=Sr[i];
Sr[0]:=MNew; {чтобы при сортировке не выходить за пределы массива}
j:=i;
while (MNew > Sr[j-1]) do {Найден элемент с меньшим ключом}
begin
for k:=1 to N do {Переставляем элементы в исходной матрице}
begin
x:= A[k][j];
A[k][j]:=A[k][j-1];
A[k][j-1]:=x;
end;
Sr[j]:=Sr[j-1];
j:=j-1;
end;
Sr[j]:=MNew;
end;
end;
{--------------------------------------------------------------------------}
Var i,j, {Счетчики цикла}
N,M:integer; {Размерность матрицы N x M}
A: MatrI; {Вводимая матрица}
Sr: MatrASred; {Строка, содержащая среднее арифметическое каждого столбца}
Begin
clrscr;
{ввод данных}
writeln('Введите количество строк:');
readln(N);
writeln('Введите количество столбцов:');
readln(M);
{Вызов процедуры ввода матрицы}
MatrixInput(A,N,M);
{Поиск среднего арифметического}
for i:=1 to M do
begin
{Складываем в цикле элементы столбца}
for j:=1 to N do
Sr[i]:=A[j][i]+Sr[i];
{Определяем среднее арифметическое столбца}
Sr[i]:=round(Sr[i]/N);
end;
{Выводим среднее арифметическое столбцов}
writeln('Среднее арифметическое значение столбцов:');
for i:=1 to M do
write(Sr[i],' ');
writeln;
{Вызов процедуры сортировки матрицы А}
Sort(A,Sr,N,M);
{Вывод результата}
MatrixOutput(A,Sr,N,M);
End.
Приложение Б
Тест
Введите количество строк:
4
Введите количество столбцов:
6
Введите матрицу A построчно:
1 2 3 4 5 6
3 5 5 3 5 5
2 2 2 2 2 2
2 3 6 3 0 3
Среднее арифметическое значение столбцов:
2 3 4 3 3 4
Упорядоченный массив, содержащий среднее арифметическое значение столбцов:
4 4 3 3 3 2
Упорядоченная матрица A:
3 6 2 4 5 1
5 5 5 3 5 3
2 2 2 2 2 2
6 3 3 3 0 2
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.