Мегаобучалка Главная | О нас | Обратная связь


Лабораторная работа №7



2015-12-13 2117 Обсуждений (0)
Лабораторная работа №7 0.00 из 5.00 0 оценок




“Обработка и преобразование двумерных массивов (матриц)”

 

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

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

7.1.1. Описание двумерных массивов в языке программирования С++.

 

Двумерные массивы, как и одномерные, объявляются непосредственно в разделе описания переменных. Описание статического двумерного массива (матрицы) имеет следующую структуру:

тип имя_матрицы[N1][N2];

где:

тип – указание на любой стандартный или нестандартный тип, которому будут принадлежать элементы матрицы;

имя_матрицы – идентификатор матрицы;

N1 – максимальное количество строк в матрице;

N2 – максимальное количество столбцов в матрице.

 

int X[10][10];

 

#define N 5;

...

float B[N][N];

Обращение к элементам матрицы в программе происходит по индексам, например:

D[i][j]

X[2][0]

Y[i-1][j+2]

Следует обратить внимание, что в языке C++ нумерация строк и столбцов в двумерных массивах начинается с 0.

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

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

for (j=0;j<M;j++)

В теле цикла обращение к элементу массива, который находится в i–й строке и j–м столбце, происходит как A[i][j].

7.1.2. Ввод и вывод двумерных массивов в языке программирования C++.

Ввод элементов осуществляется аналогично вводу элементов одномерного массива, за исключением того, что вместо одного цикла необходимо организовать два:

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

for (j=0;j<M;j++)

{

printf(“введите элемент a[%d][%d]: ”,i,j);

scanf(“%f”,&a[i,j]);

}

где N – количество строк в двумерном массиве a;

M – количество столбцов.

Можно также организовать формирование элементов массива с помощью генератора случайных чисел rand().

Вывод элементов двумерного массива на экран:

Чтобы при выводе матрицы каждая ее строка выводилась на экран с новой строки, необходимо перед или после внутреннего цикла добавить printf с переводом строки:

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

{ for (j=0;j<M;j++)

printf(“%6.2f”,a[i][j]);

printf(“\n”);

}

 

7.1.3. Основные алгоритмы обработки двумерных массивов.

 

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

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

S=0;

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

S=S+A[i][i];

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

for (j=0;j<M;i++)

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

7.1.4 Пример составления алгоритма и программы на языке C++ для обработки и преобразования двумерного массива.

 

Задание:

Дана матрица действительных чисел А(5х5). Найти Amin – минимальный элемент среди элементов, расположенных ниже главной диагонали, и Amax – максимальный элемент среди элементов, расположенных выше главной диагонали, Разделить элементы, расположенных ниже главной диагонали, на Amin, а выше главной диагонали – на Amax.

Решение.

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

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

Далее выполним поиск максимального элемента Amax среди элементов, расположенных выше главной диагонали. Поскольку у элементов, расположенных выше главной диагонали, номер столбца больше номера строки, для поиска максимального элемента среди этих элементов внутренний цикл организуем по переменной j, начиная с i+1: for (j=i+1;j<n;j++). Аналогично при поиске минимального элемента среди элементов, расположенных ниже главной диагонали, будем использовать внутренний цикл по переменной j, начиная с 0 до i–1: for (j=0;j<i;j++).

Затем, используя аналогичные вложенные циклы, выполним деление элементов матрицы на Amax или Amin в соответствии с заданием.

 

 

Блок-схема алгоритма решения данной задачи:

Текст программы на языке C++:

 

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#define n 5

int main()

{

int i,j;

float A[5][5],Amin=1000,Amax=-1000;

clrscr();

randomize();

printf(" Matrix A:\n");

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

{

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

{

A[i][j]=20.0*rand()/RAND_MAX-10;

printf("%7.2f",A[i][j]);

}

printf("\n");

}

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

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

if (A[i][j]>Amax)

Amax=A[i][j];

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

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

if (A[i][j]<Amin)

Amin=A[i][j];

printf("\nMaximum vishe glavnoi diagonali: %.2f",Amax);

printf("\nMimimum nije glavnoi diagonali: %.2f",Amin);

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

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

A[i][j]=A[i][j]/Amax;

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

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

A[i][j]=A[i][j]/Amin;

printf("\n\n New matrix A:\n");

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

{

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

printf("%7.2f",A[i][j]);

printf("\n");

}

getch();

return 0;

}

Результаты работы программы:

Matrix A:

-2.21 -5.59 1.34 -3.15 -7.76

9.17 -8.43 2.54 -5.78 -7.21

-3.46 4.10 -8.32 -9.45 -5.84

9.66 -0.89 -9.07 4.14 8.87

-5.12 -4.09 -7.72 -1.38 -7.78

 

Maximum vishe glavnoi diagonali: 8.87

Mimimum nije glavnoi diagonali: -9.07

 

New matrix A:

-2.21 -0.63 0.15 -0.35 -0.87

-1.01 -8.43 0.29 -0.65 -0.81

0.38 -0.45 -8.32 -1.06 -0.66

-1.07 0.10 1.00 4.14 1.00

0.56 0.45 0.85 0.15 -7.78

 

Практическая часть

 

7.2.1 Требования к выполнению работы:

 

Составить блок-схему алгоритма и программу для решения индивидуального задания.

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

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

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

1. Выполнить анализ задания, сформулировать постановку задачи.

2. Составить блок-схему алгоритма.

3. Составить программу на языке C++. Предусмотреть ввод исходных данных и вывод результатов на экран.

4. Выполнить проверку работоспособности программы на различных исходных данных.

5. Выполнить анализ полученных результатов.

Варианты индивидуальных заданий.

 

Варианты индивидуальных заданий выбираются из таблицы 7 в соответствии с номером студента в списке группы в журнале преподавателя.

 

Таблица 7. Варианты индивидуальных заданий

№ п/п Задание
Дана матрица целых чисел A размером 5х8. Найти в ней количество строк, не содержащих ни одного нулевого элемента.
Дана матрица действительных чисел A размером 6х7. Сформировать массив R1, …, R7, каждый элемент которого равен среднему арифметическому значению элементов соответствующего столбца матрицы A:
Дана матрица действительных чисел E размером 7х10. Получить новую матрицу A путем деления элементов матрицы E на наименьший по модулю элемент.
Дана матрица действительных чисел A размером 8х9. Найти номер столбца и сумму элементов столбца, в котором располагается наименьший элемент.
Дана матрица действительных чисел V размером 6х7. Найти количество столбцов, содержащих хотя бы один нулевой элемент.
Дана матрица целых чисел X(5х8). Выполнить циклический сдвиг элементов каждого столбца матрицы на количество позиций, равное номеру столбца. Найти строку с наибольшей разницей минимального и максимального элемента.
Дана матрица целых чисел B размером 8х7. Найти максимальный элемент среди элементов, расположенных выше главной диагонали.
Дана матрица целых чисел X размером 6х7. Сформировать массив A1,…, A7, каждый элемент которого равен произведению элементов соответствующего столбца матрицы X.
Дана матрица целых чисел E размером 8х8. Найти максимальный элемент среди элементов, которые находятся на главной диагонали.
Дана матрица действительных чисел D размером 5х6. Найти сумму модулей элементов, находящихся ниже главной диагонали.
Дана матрица действительных чисел B размером 4х7. Сформировать массив R1, …, R4, каждый элемент которого равен среднему арифметическому значению элементов соответствующей строки матрицы B:
Дана матрица действительных чисел C размером 8х7. Получить новую матрицу B путем деления элементов матрицы C на наибольший по модулю элемент.
Дана матрица действительных чисел A размером 8х10. Получить новую матрицу C путем деления элементов матрицы A на наибольший по модулю элемент.
Дана матрица действительных чисел M размером 7х7. Сформировать массив S1,…, S6, каждый элемент которого равен сумме элементов соответствующего столбца матрицы M:
Дана матрица действительных чисел A размером 8х9. Найти номер столбца и сумму элементов столбца, в котором располагается наименьший элемент.
Дана матрица действительных чисел A(6x6). Заменить в ней на 0 все элементы, которые встречаются более 1 раза.
Дана матрица целых чисел C размером 10х10. Найти номер строки и сумму элементов строки, в которой располагается наименьший элемент.
Дана матрица действительных чисел F(7х6). Выполнить циклический сдвиг элементов матрицы, расположенных по ее периметру. Количество позиций сдвига вводится в программе с клавиатуры.
Дана матрица действительных чисел D размером 4х8. Сформировать массив M1,…, M4, каждый элемент которого равен минимальному элементу соответствующей строки матрицы D:
Дана матрица действительных чисел A размером 5х7. Сформировать массив S1,…, S5, каждый элемент которого равен сумме элементов соответствующей строки матрицы A:
Дана матрица действительных чисел D размером 6х6. Сформировать массив S1,…, S6, каждый элемент которого равен сумме элементов соответствующего столбца матрицы D:
Дана матрица целых чисел E размером 6х5. Сформировать массив P1,…, P6, каждый элемент которого равен произведению элементов соответствующей строки матрицы E:
Дана матрица целых чисел B размером 6х8. Сформировать массив S1,…, S8, каждый элемент которого равен максимальному элементу соответствующего столбца матрицы B:
Дана матрица целых чисел B размером 6х7. Найти номер строки и произведение элементов строки, в которой располагается наибольший элемент.
Дана матрица действительных чисел C размером 6х6. Сформировать массив M1,…, M6, каждый элемент которого равен минимальному элементу соответствующего столбца матрицы C:
Дана матрица целых чисел D размером 8х5. Сформировать массив P1,…, P5, каждый элемент которого равен произведению элементов соответствующего столбца матрицы D:
Дана матрица действительных чисел A размером 9х9. Найти минимальный элемент среди элементов, которые находятся на главной диагонали.

 

7.3 Контрольные вопросы и практические задания:

 

1. Как выглядит форма объявления двумерных массивов?

2. Каким образом нумеруются элементы двумерного массива?

3. Какие и сколько операторов цикла удобнее использовать при работе с двумерными массивами?

4. Приведите варианты ввода численных значений элементов двумерного массива.

5. Приведите варианты вывода элементов двумерного массива на печать.

6. Приведите алгоритмы определения суммы и произведения элементов двумерного массива.

7. Приведите алгоритмы нахождение максимального и минимального элементов в двумерном массиве.

8. Приведите алгоритмы нахождение среднего значения элементов двумерного массива.


 



2015-12-13 2117 Обсуждений (0)
Лабораторная работа №7 0.00 из 5.00 0 оценок









Обсуждение в статье: Лабораторная работа №7

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (2117)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)