Лабораторная работа № 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] в памяти выглядит так:
Если количество индексов превышает 2, массив называют многомерным.
Точно так же, как и в одномерных массивах для адресации элементов многомерного массива независимо от способа описания можно использовать адресную арифметику.
Пример.Разработать программу вычисления сумм элементов строк матрицы A(4,5). Полученные суммы записать в новый массив B.
Итак, задана матрица, имеющая 4 строки и 5 столбцов (рис. 1, а). Требуется сформировать одномерный массив B из четырех элементов, который будет содержать суммы элементов строк (рис. 1, б). Распечатать результат лучше так, чтобы суммы были выведены после соответствующей строки матрицы, как на рис. 9.
Рисунок 9 – Исходные данные (а) и результат (б) примера
Программа должна начинаться со ввода матрицы. Основной цикл программы – цикл по строкам. Переменная цикла i в этом цикле будет изменяться от 0 до 4. Для каждой i-й строки в этом цикле должно выполняться суммирование элементов. Суммирование будем осуществлять методом накопления, для чего перед суммированием обнулим соответствующий i-й элемент массива B, а затем в цикле выполним добавление элементов строки. После завершения цикла суммирования эту строку и ее сумму можно сразу выводить. На рис. 10 представлена схема алгоритма программы (пунктиром выделено суммирование элементов i-й строки).
Рисунок 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. Как подбирают тесты для отладки программ, содержащих обработку матриц?