Студопедия — Лабораторная работа № 5. Составление программ обработки двумерных массивов
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Лабораторная работа № 5. Составление программ обработки двумерных массивов






 

Цель работы: овладеть навыками алгоритмизации и программирования структур с вложенными циклами, особенностями обработки двумерных массивов, способами их ввода и вывода.

 

Краткие теоретические сведения

Массивы в программах C++ могут быть не только линейными. Довольно частым является использование двух - (и более) -мерных структур. К примеру, прямоугольная матрица – типичная структура, представимая с помощью двумерного массива.

Многомерный массив в C++ организован по принципу «массива массивов» (рис. 6). Общий формат его объявления:

тип имя[N1][N2]…[NM];

 

Рис. 6. Пример двумерного массива

Здесь M – число индексов (или размерность) массива. Индексы изменяются в пределах от 0 до N1 – 1, от 0 до N2 – 1, от 0 до N3 – 1,..., от 0 до NM – 1, соответственно.

К примеру, запись int G[5][4]; означает объявление двумерного массива целых чисел с именем G и размерами 5´ 4. Доступ к элементам многомерного массива в программе производится так же, как и в одномерном случае, то есть путем указания имени массива и набора индексов в квадратных скобках. Например, операция присваивания значения 0 последнему элементу будет записана как G[4][3] = 0.

При работе с многомерными массивами удобно использовать вложенные циклы for. С их помощью можно выполнить заданное действие с каждым из элементов массива путем перебора всех значений индексов. Приведенный ниже фрагмент программного кода выводит на экран все элементы массива G.

for(int i=0; i< 5; i++) // цикл по строкам i

{

for(int j=0; j< 4; j++) // цикл по строкам j

cout < < G[i][j] < < “\t”; // выводим G[i][j]

cout < < endl; // перевод на новую строку

}

Алгоритм работы этого фрагмента иллюстрируется следующей блок-схемой (рис. 7).

 

Рис. 7. Блок – схема вывода элементов массива на экран

Здесь внешний цикл по I последовательно пробегает все значения от 0 до 5. При каждом i запускается внутренний цикл по j от 0 до 4. В теле этого цикла на экран выводятся значение элемента G[i][j] и знак табуляции (горизонтальный отступ). Внутренний цикл продолжается до тех пор, пока не будут перебраны все значения j, то есть не будет выведена вся i -я строка. По завершении внутреннего цикла, экранный курсор перемещается на новую строку манипулятором endl, и далее внешний цикл продолжает свою работу, последовательно выводя на экран другие строки массива.

 

Задание

1. Изучить: правила организации вложенного цикла с учетом порядка перебо-

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

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

3. Составить программу решения задачи.

 

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

 

Условие: Имеется вещественная квадратная матрица размером 4´ 4. Напишите программу, вычисляющую произведение элементов в каждой ее строке. Матрица вводится с клавиатуры.

#include < conio.h>

#include < iostream.h>

void main(void)

{

float X[4][4]; // объявляем массив 4´ 4

for(int i=0; i< 4; i++)

for(int j=0; j< 4; j++)

{

cout < < " input X[" < < i < < ", " < < j < < " ] = ";

cin > > X[i][j]; // вводим элементы матрицы

}

cout < < " \n Results: \n";

for(int i=0; i< 4; i++) // цикл по строкам

{

float P = 1.0; // вспомогательная переменная

for(int j=0; j< 4; j++) // цикл по элементам в строке

P = P * X[i][j]; // домножаем P на X[i][j]

cout < < " \n proizvedenie " < < i < < " -i stroki = " < < P; // выводим результат на экран

}

getch(); }

Условие: Дана квадратная матрица размером N x N. Переставить элементы верхнего треугольника матрицы с соответствующими элементами нижнего треугольника.

Начальные данные:

1. константа n, которая определяет размер матрицы;

2. двумерный массив размерности n;

3. параметр i для цикла по строкам;

4. параметр j для цикла по столбцам;

5. параметр r для промежуточной информации.

Результат вычисления: новая матрица с переставленными элементами.

#include< stdio.h>

#include< conio.h>

#include< iostream.h>

void main(void)

{ const n = 2;

int i, j, a[n][n];

int r;

clrscr();

printf (" Введи элементы матрицы: \n");

for (i = 0; i < = n-1; i++)

for (j = 0; j < = n-1; j++)

{ printf(" a(%d, %d)= ", i, j);

scanf(" %d", & a[i][j]);

}

cout < < " Введена матрица: \n";

for (i = 0; i < n; i++)

{ for (i = 0; j < n; j++)

printf(" %d ", a[i][j]);

printf(" \n");

}

for (i = 0; i < = n/2; i++)

for (j = i; j < = n-1-i; j++)

{ r = a[i][j];

a[i][j] = a[n-1-i][j];

a[n-1-i] [j]=r;

}

cout < < " \n\nМатрица после перестановки: \n";

for (i = 0; i < = n-1; i++)

{ for (j = 0; j < = n-1; j++)

printf(" %d ", a[i][j]);

printf(" \n");

}

getch();

}

Условие: Пусть и – две квадратные матрицы размером 3´ 3. Требуется написать программу, рассчитывающую их произведение

Искомое произведение – это также матрица 3´ 3, элементы которой рассчитываются по формуле ().

 

#include < conio.h>

#include < iostream.h>

const int N = 3; // используем константу N=3

void main(void)

{ float A[N][N] = { {1, 1, 1},

{2, 2, 2},

{3, 3, 3} }; // исходная матрица A

float B[N][N] = { {1, 2, 3},

{1, 2, 3},

{1, 2, 3} }; // исходная матрица B

float C[N][N]; // матрица произведения С

for(int i=0; i< N; i++) // цикл по строкам С

{

for(int j=0; j< N; j++) // цикл по столбцам С

{

float s = 0.0; // вспомогательная переменная

for(int k=0; k< N; k++) // цикл суммирования по k

s += A[i][k]*B[k][j]; // добавляем к s новое слаг-ое

C[i][j] = s; // записываем s в C[i][j]

}

}

cout < < " Results: \n"; // далее выводим C на экран

for(int i=0; i< N; i++)

{

for(int j=0; j< N; j++)

cout < < C[i][j] < < " \t";

cout < < endl;

}

getch();

}

 

Задания для самостоятельного выполнения

1. Для заданного двумерного числового массива подсчитать количество строк, состоящих только из ненулевых элементов.

2. Для заданного двумерного числового массива подсчитать количество столбцов, состоящих только из отрицательных элементов.

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

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

5. Для заданного двумерного числового массива подсчитать количество таких столбцов, у которых максимальный элемент этого столбца единственный.

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

7. Дана целочисленная матрица размера M x N. Найти количество ее строк столбцов, все элементы которых различны.

8. Дана квадратная матрица. Найти максимальное значение из элементов, расположенных в левом нижнем углу.

9. Дана квадратная матрица порядка M. Найти суммы элементов ее диагоналей, параллельных главной побочной (начиная с одноэлементной диагонали A[1, M]1|A[1, 1]2).

10. Дана квадратная матрица порядка M. Заменить нулями элементы, лежащие одновременно выше ниже главной диагонали (включая эту диагональ) и выше ниже побочной диагонали (также включая эту диагональ).

11. Дана квадратная матрица порядка M. Зеркально отразить ее элементы относительно [горизонтальной оси симметрии] [вертикальной оси симметрии] [главной диагонали] [побочной диагонали] матрицы.

12. Дана квадратная матрица порядка M. Повернуть ее на 90о, 180о, 270о в положительном направлении.

13. Дана матрица размера N x M. Вывести количество строк столбцов, элементы которых монотонно возрастают, убывают.

14. Дана матрица размера N x M. Найти минимальный, максимальный среди элементов тех строк столбцов, которые упорядочены либо по возрастанию, либо по убыванию.

15. Дана матрица размера N x m. Поменять местами строки столбцы, содержащие минимальный и максимальный элементы матрицы.

16. В матрице А (m, n) найти строку с максимальной суммой элементов и строку с минимальной суммой элементов. Далее сформировать вектор В (2, m), у которого бы элементы чередовались с максимальной и минимальной строками.

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

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

1. Указать основные правила организации вложенных циклов.

2. Указать способы выхода из внутреннего цикла.

3. Как организовать вывод матрицы в общепринятом виде?

4. Как организовать вывод нижней треугольной матрицы в общепринятом виде?

5. Как организовать ввод матрицы размером N x M элементов?

6. Верно ли утверждение, что индекс массива должен иметь тип float.








Дата добавления: 2014-11-10; просмотров: 4746. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Методика исследования периферических лимфатических узлов. Исследование периферических лимфатических узлов производится с помощью осмотра и пальпации...

Роль органов чувств в ориентировке слепых Процесс ориентации протекает на основе совместной, интегративной деятельности сохранных анализаторов, каждый из которых при определенных объективных условиях может выступать как ведущий...

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

Studopedia.info - Студопедия - 2014-2023 год . (0.011 сек.) русская версия | украинская версия