Лабораторная работа - Программирование с использованием массивов и подпрограмм - файл n9.doc

Лабораторная работа - Программирование с использованием массивов и подпрограмм
скачать (332.3 kb.)
Доступные файлы (10):
func_RowEvenItem.dia
labrab_6_v_11.bak
labrab_6_v_11.exe
labrab_6_v_11.o
labrab_6_v_11.pas
proc_input.dia
proc_output.dia
n8.dia
n9.doc139kb.09.12.2009 22:34скачать
n10.doc228kb.10.12.2009 19:31скачать

n9.doc



Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего

профессионального образования

Алтайский государственный технический университет

им. И. И. Ползунова
Заринское представительство

Кафедра «Информационные системы в экономике»

отче о лабораторной работе №6

по теме: «Программированиес использованием массивов и подпрограмм»

Вариант 11
Выполнил: ст. гр. Зр-з ПИЭ – 91

Хрущ А. А.

Проверил преподаватель:

________________________

Оценка .

Подпись .

Дата .

г. Заринск- 2009

Содержание
1. Постановка задачи…………………………………………………3
2. Описание алгоритма……………………………………………….3
3. Описание программы……………………………………………...3
Приложение А. Текст программы…………………………………...8
Приложение Б. Тестовый пример……………………………………11

1 Постановка задачи

Дана  целая  прямоугольная  матрица  размерности  NxM. Найти  количество  четных  элементов  в  каждой  строке  и  упорядочить  строки  по  убыванию  этих  элементов. (При  сортировке  использовать  метод  прямого  выбора).

2. Описание алгоритма

Текст программы предоставлен в приложении А. Тестовый пример предоставлен в приложении Б. Структурная схема алгоритма представлена на рисунке 1, схема процедуры input на рисунке 2, схема процедуры output на рисунке 3, схема функции RowEvenItem на рисунке 4.

3. Описание программы

Программа предназначена для вычисления количества четных элементов в каждой строке и упорядочивания строк в порядке убывания этих элементов, программа представлена в совокупности отдельных процедур и функций и основной (вызывающей) программы. Вначале запрашиваются входные данные, затем производятся необходимые вычисления и вывод результата.

В программе используются следующие типы:

matr = array[1..50, 1..50] of integer – тип многомерный массив целых чисел(матрица)

И переменные

mat: matr; // массив (именно этот массив обрабатывается)

a: array[1..50] of integer; // вспомогательный масси для сортировки

rows, cols: integer; // количество строк, столбцов

i, j, k, y: integer; // счетчики циклов, индексы для обращени к элементам массивов

n, m, x, b: integer; // вспомогательные переменные (для сортировки, счетчики)




Рисунок 1. Схема основной программы


Рисунок 2. Схема процедуры Input.


Рисунок 3. Схема процедуры Output.



Рисунок 4. Схема функции RowEvenItem
Приложение А. Текст программы.

program lab_6_v_11; // заголовок программы

uses crt; // подключение стандартного модуля для работы с экраном

type // объявляем тип

matr = array[1..50, 1..50] of integer; // двухмерный массив целых чисел

var // объявляем переменные

mat: matr; // массив (именно этот массив обрабатывается)

a: array[1..50] of integer; // вспомогательный масси для сортировки

rows, cols: integer; // количество строк, столбцов

i, j, k, y: integer; // счетчики циклов, индексы для обращени к элементам массивов

flag: boolean; // логическая перемення для определения был ли хоть один обмен

n, m, x, b: integer; // вспомогательные переменные (для сортировки, счетчики)
// процедура ввода матрицы
procedure input(var mt: matr; var n, m: integer);

var

i, j: integer;

begin

flag := false;

repeat // цикл с проверкой правильности ввода матрицы, если неправильно то программа предложит ввести размерность снова

begin

write('Введите количество строк <= 30 и > 0 ');

readln(n);

write('Введите количество столбцов <=50 и > 0 ');

readln(m);

if (n > 0) and (n <= 50) and (n <> m) and (m > 0) and (m <= 50) then // проверка правильности ввода матрицы

begin

flag := true;

end

else

writeln('Некорректные параметры матрицы '); // вывод сообщения о неправильности ввода

end;

until flag = true; // условие завершения цикла проверки

begin // начало цикла ввода элементов матрицы

for i := 1 to n do

for j := 1 to m do

begin

writeln('Введите [', i,', ',j, '] элемент ');

readln(mt[i, j]); // ввод элементов матрицы

end;

end;

end; // конец процедуры
// ----------------- процедура вывода матрицы ------ //
procedure output(var mt: matr; var n, m: integer);

var

i, j: integer;

begin

for i := 1 to n do

begin

for j := 1 to m do

write(mt[i, j]:2); // вывод строки матрицы

writeln; // перевод курсора на следующую строку

end;

end; // конец процедуры вывода
{Функция для поиска четных значений в строке и их подсчета

для последующего использования в одномерном массиве и сортировке}
function RowEvenItem(var mt: matr; var n, m: integer): integer;

var //объявляем локальные переменные, они основной программой не используются

i, j, r: integer; // локальные переменные целочисленного типа

begin // начало кода функции

r := 0; // Обнуляем счетчик

for j := 1 to m do // цикл перебора всех элементов строки

begin

if not(odd(mt[n, j])) then // условие накрутки счетчика (проверка четности

inc(r);

end; // конец цикла

RowEvenItem := r; // присваем функции новое значение

end; // конец функции
{ --------- начало основной программы ------------}
BEGIN // вход в программу

input(mat, rows, cols); // обращение к процедуре ввода матрицы

writeln(' Исходная матрица'); // вывод сообщения

output(mat, rows, cols); // обращение к процедуре вывода матрицы

for i := 1 to rows do // цикл заполнения дополнительного массива

begin

y := i;

a[i] := RowEvenItem(mat, y, cols); // каждый элемент массива это результат функции

writeln('Кличество четных в данной строке ', a[i]:2); // просто чтоб знать в какую строку сколько четных забито

end; // конец цикла

for i := 1 to rows-1 do // сортируем вспомогательный массив

begin

k := i;

x := a[i];

for j := i+1 to rows do

begin

if a[j] > x then // при справедливом условии переменные получают новые значения

begin

k := j;

x := a[k];

for y := 1 to cols do { а также меняются местами строки в массиве }

begin { соответствующие индексам в одномерном массиве}

b := mat[i, y];

mat[i, y] := mat[j, y];

mat[j, y] := b;

end;

end;

end;

a[k] := a[i]; // заканчиваем обмен местами в одномерном массиве

a[i] := x; //

end;

writeln('Полученная матрица');

output(mat, rows, cols); // вывод полученной матрицы

readln; // задержка экрана с результатами

end. // выход из программы!!!


Приложение Б. Тестовый пример.

Запускаем фаил lab_rab_6_v_11.exe

вводим данные матрицы

программа выдет ответ:

Исходная матрица

1 2 3 2

3 2 2 2

2 2 2 2

Количество четных в данной строке 2

Количество четных в данной строке 3

Количество четных в данной строке 4

Полученная матрица 

2 2 2 2

1 2 3 2

3 2 2 2



Учебный материал
© bib.convdocs.org
При копировании укажите ссылку.
обратиться к администрации