Лабораторная работа № 5. Обработка матриц

Цель работы:изучение приемов обработки матриц в программах

Объем работы:4 часов

Теоретическая часть

Матрицей называют двумерный массив, т.е. массив, для которого объявлены два индекса. Индексы массива всегда начинаются с 0

Объявление матрицы:

<Тип элемента><Имя>[<Размер1>][<Размер2>]...[={<Список значений >}];

Тип индекса – порядковый – определяет доступ к элементу.

Нумерация индексов ВСЕГДА начинается с 0.

Размер – определяет количество элементов по данному индексу.

Тип элемента – любой кроме файла, в том числе, другой массив.

Массив в памяти не может занимать более 2 Гб.

Описание матриц:

1) Статически, на этапе компиляции

int a[4][5] – матрица целого типа из 4 строк и 5 столбцов индексы меняются первый от 0 до 3, второй от 0 до 4

float matr[10][20] – матрица вещественного типа из 10 строк и 20 столбцов

double x[10][10] – матрица вещественного типа с двойной точностью из 10 строк и 10 столбцов

2) С помощью указателей.

Память под такую матрицу выделяется:

А) статически при инициализации

short **r={{3,5,9,7},{1,4,7,0},{12,5,90,3}} – под массив будет выделена память по количеству определенных элементов (три строки по 4 элемента)

Б) динамически во время выполнения

float **c;

c=new float * [4];

for (int i=0;i<4; i++) c[i]= new float [5];

под массив будет выделена память 4 строки по 5 элементов.

Матрицы расположены в памяти “построчно”, т.е. правые индексы меняется быстрее, чем расположенные левее.

Например: Матрица А[3][4] в памяти выглядит так:

Лабораторная работа № 5. Обработка матриц - student2.ru

Если количество индексов превышает 2, массив называют многомерным.

Точно так же, как и в одномерных массивах для адресации элементов многомерного массива независимо от способа описания можно использовать адресную арифметику.

Пример.Разработать программу вычисления сумм элементов строк матрицы A(4,5). Полученные суммы записать в новый массив B.

Итак, задана матрица, имеющая 4 строки и 5 столбцов (рис. 1, а). Требуется сформировать одномерный массив B из четырех элементов, который будет содержать суммы элементов строк (рис. 1, б). Распечатать результат лучше так, чтобы суммы были выведены после соответствующей строки матрицы, как на рис. 9.

Лабораторная работа № 5. Обработка матриц - student2.ru

Рисунок 9 – Исходные данные (а) и результат (б) примера

Программа должна начинаться со ввода матрицы. Основной цикл программы – цикл по строкам. Переменная цикла i в этом цикле будет изменяться от 0 до 4. Для каждой i-й строки в этом цикле должно выполняться суммирование элементов. Суммирование будем осуществлять методом накопления, для чего перед суммированием обнулим соответствующий i-й элемент массива B, а затем в цикле выполним добавление элементов строки. После завершения цикла суммирования эту строку и ее сумму можно сразу выводить. На рис. 10 представлена схема алгоритма программы (пунктиром выделено суммирование элементов i-й строки).

Лабораторная работа № 5. Обработка матриц - student2.ru

Рисунок 10 – Схема алгоритма программы нахождения сумм элементов строк (пунктиром выделено суммирование элементов i-ой строки)

Ниже приведен текст программы.

#include “stdafx.h”

#include <stdio.h>

int main(int argc, char* argv[])

{float a[4][5], b[4]; int i, j;

puts(“Enter a matrix in the lines:”);

for (i=0;i<4;i++) // вводим матрицу

for (j=0;j<5;j++) scanf(“%f “,&a[i]);printf(“\n”);

for (i=0;i<4;i++) // для каждой строки

{ b[i]=0; //обнуляем накапливаемую сумму

for (j=1;j< 5;j++)

B[i]=B[i]+A[i][j]; //суммируем элементы строки

for (j=1;j< 5;j++)

printf(“%7.2f ”,a[i][j]); //выводим строку

printf(“The sum is equal: %7.2f ”, b[i]); } //выводим сумму

return 0; }

Другие примеры программ, содержащих обработку матриц, приведены в [1].

Порядок выполнения работы

1. Прочитать и проанализировать задание в соответствии со своим вариантом.

2. Разработать схему алгоритма решения задачи.

3. Написать программу.

4. Вызвать среду программирования Turbo Delphi, создать новый проект консольного приложения и ввести текст программы в среду программирования.

5. Подобрать тестовые данные (не менее 3-х вариантов).

6. Отладить программу на выбранных тестовых данных.

7. Продемонстрировать работу программы преподавателю.

8. Составить отчет по лабораторной работе.

9. Защитить лабораторную работу преподавателю.

Требования к отчету

Отчет должен быть выполнен на бумаге формата А4 или А5 в том числе в тетрадях или на тетрадных листах. Если отчет выполняется на отдельных тетрадных листах, то они должны быть аккуратно обрезаны по линии подшивки и скреплены. Неаккуратно выполненные, оборванные или грязные отчеты не принимаются.

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

Каждый отчет должен иметь титульный лист, на котором указывается:

а) наименование факультета и кафедры;

б) название дисциплины;

в) номер и тема лабораторной работы;

г) фамилия преподавателя, ведущего занятия;

д) фамилия, имя и номер группы студента;

е) номер варианта задания.

Кроме того отчет по лабораторной работе должен содержать:

1) схему алгоритма, выполненную вручную или в соответствующем пакете;

2) текст программы;

3) результаты тестирования, которые должны быть оформлены в виде таблицы вида:

Исходные данные Ожидаемый результат Полученный результат
     

4) выводы.

4.4. Контрольные вопросы

1. Что такое «матрица»? В каких случаях используется эта структура данных?

2. Как показать обработку матриц в схеме алгоритма?

3. Какие приемы обработки матриц вы знаете?

4. Какой синтаксис имеет описание матриц?

5. Объясните, почему в вашей программе следует использовать матрицу?

6. Как подбирают тесты для отладки программ, содержащих обработку матриц?


Наши рекомендации