Поняття та алгоритми обробки двовимірних масивів
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
БУКОВИНСЬКИЙ ДЕРЖАВНИЙ ФІНАНСОВО-ЕКОНОМІЧНИЙ УНІВЕРСИТЕТ
Кафедра компютерних наук
Індивідуальне навчально-дослідне завдання
на тему
«Поняття та алгоритми обробки двовимірних масивів»
Виконала:
студентка групи КН-11
Кицун Т.М.
Чернівці - 2014
План
1. Визначення та ініціалізація двовимірних масивів.
. Ознаки розміщення елементів на головній та бічній діагоналі.
. Алгоритми обробки двовимірних масивів.
. Двовимірні масиви в задачах лінійної алгебри.
1. Визначення та ініціалізація двовимірних масивів
Всі ми знаємо, що таке одновимірні масиви. Вони нагадують полицю з книгами. Може бути більше книг на більш довшій полиці або ж менше книг - на більш коротшій полиці. Таким чином, полиця - єдина розмірність, що визначає її ємність, отже, вона є одновимірною. Але що, якщо тепер потрібно використати масив для моделювання сонячних панелей, як показано на рисунку 1? Сонячні панелі, на відміну від книжних полиць, поширюються у двох розмірностях: по довжині і по ширині.
Як можна помітити на рис.1, шість сонячних панелей розташовуються в двовимірному порядку: два ряди по три стовпці. З одного боку, ви можете розглядати таке розташування, як масив з двох елементів, кожен з яких сам є масивом з трьох панелей, іншими словами, як масив масивів. У мові C ++ ви можете створювати двовимірні масиви, але ви не обмежені тільки двома розмірностями. Залежно від необхідності і характеру програми, ви можете також створити в пам'яті багатовимірні масиви.
Ініціалізація двовимірних масивів.
Мова C ++ дозволяє оголошувати багатовимірні масиви, вказавши кількість елементів, яку необхідно зарезервувати по кожній розмірності. Отже, двовимірний масив цілих чисел, що являє сонячні панелі на рис.1, можна оголосити так:SolarPanell [2][3];
Зверніть увагу, що на рис.1 кожному з шести панелей присвоєно також ідентифікатор в межах від 0 до 5. Якби довелося ініціалізувати цілочисельний масив в тому ж порядку, то це виглядало б так:SolarPanell [2][3] = {{0, 1, 2}, {3, 4, 5}};
Як бачите, синтаксис ініціалізації подібний використовуваному при ініціалізації двох одновимірних масивів. Зверніть увагу: це не два масиви, оскільки массив двовимірний, це два його рядки. Якби цей масив складався з трьох рядків і трьох стовпців, його оголошення і ініціалізація виглядали б наступним чином:Threemass [3][3] = {{4, 3, 7}, {1, 2, 5}, {9, 8, 6}};
Такі масиви називаються статичними (static array), оскільки кількість елементів, що в них містяться, а також розмір їх області в пам'яті залишаються незмінними під час компіляції.
ПРИМІТКА. Навіть при тому, що мова C++ дозволяє використовувати модель багатовимірних масивів, в пам'яті масив міститься як одновимірний. Компілятор розкладає багатовимірний масив в області пам'яті, яка розширюється тільки в одному напрямку.
Масив визначається двома розмірами, які укладені в квадратні дужки:massiv [i][j];
Можна вважати massiv двовимірним масивом, схожим на шахову дошку. Іншими словами, можна сказати, що цей масив є масивом масивів. Це масив елементів i, кожен з яких є массивом елементів j. На рис.2 показано, як це виглядає.
двовимірний масив алгоритм матриця
В цілому багатовимірний масив оголошується у програмі в такий спосіб:
<тип> <імя масиву> [ <розмір1>] [ <розмір2>] … [ <розмірN>];
Для того, щоб елементи масиву ми могли вводити з клавіатури, потрібно ввести такий код:<<"n, m="; //запитуємо n(кількість рядків), m(кількість стовпців);>>n>>m; //вводимо n,m;(i=0;i<n;i++)(j=0;i<m;j++)>>a[i][j]; //вводимо елементи масиву;
Аналогічно можна використати оператор rand() для ініціалізації елементів матриці за допомогою генератора псевдовипадкових чисел.
Для виведення двовимірного масиву на екран використовуються наступні оператори:
for(i=0;i<n;i++)
{(j=0;i<m;j++)<<a[i][j]<< ;<<endl;
}
Приклад.
Дано матрицю А розмірності NxN. Заповнити її за допомогою генератора псевдовипадкових чисел в діапазоні [-5; 5]. Знайти суму додатних елементів.
#include <iostream>
#include <conio.h>
#include <clocale>namespace std;main ()
{(LC_CTYPE,rus);A[20][20], i,j,S=0,N;<<"Введіть N: "; //вводимо розмірність матриці;>>N;(i=0;i<N;i++) /*заповнюємо матрицю за допомогою генератора псевдовипадкових чисел;*/(j=0;j<N;j++)[i][j]=rand()%-11-5;<<"Матриця A: "<<endl;(i=0;i<N;i++) //виводимо матрицю на екран;
{(j=0;j<N;j++)
{<<A[i][j]<<" ";
}<<endl;
}(i=0;i<N;i++) //знаходимо додатні елементи і їх суму;
{(j=0;j<N;j++)(A[i][j]>0)
{=S+A[i][j];
}
}<<"Сума додатних елементів - "<<S;();0;
}
. Ознаки розміщення елементів на головній та бічній діагоналі
Багато задач по двовимірним масивам повязана із використанням елементів, що розміщена на головній чи бічній діагоналях матриці або ж вище чи нижче них. На рисунку 3 зображено діагоналі і рівності.
? Якщо елемент знаходиться на головній діагоналі, тоді номер рядка має дорівнювати номеру стовпця (i=j).
? Якщо ж елемент знаходиться на бічній діагоналі, тоді сума індексів має дорівнювати розмірності елементів, від якої відняли 1, тобто має задовольняти рівність «i+j=N-1».
? Якщо елементи знаходяться нижче головної діагоналі, то номер рядка елемента має бути більшим за номер стовпця(i>j).
? Якщо елемент знаходиться вище головної діагоналі, то номер рядка елемента має бути менший за номер стовпця елемента (i<j).
? Якщо потрібні елементи знаходяться над бічною діагоналлю, тоді індекси мають задовольняти таку рівність «i + j +1 < N».
Якщо ж елементи знаходяться нижче головної діагоналі, тоді задовольняється така рівність «i+j+1>N».
Приклад.
Дано матрицю розмірності NxN. Заповнити матрицю, вивести елементи головної та бічної діагоналей. Знайти середнє арифметичне суми їх елементів.
#include <iostream>
#include <conio.h>
#include <clocale>namespace std;main ()
{(LC_CTYPE,"rus");i, j, HD, BD,sum=0;n,ser;A[50][50];<<"n= ";>>n;<<"Введіть елементи матриці A: "<<endl;(i=0;i<n;i++) // знаходимо елементи головної діагоналі(j=0;j<n;j++)>>A[i][j];<<"Елементи головної діагоналі: ";(i=0;i<n;i++)(j=0;j<n;j++)
{(i==j)
{<<A[i][j]<<" ";=sum+A[i][j];
}
}<<endl;<<"Елементи бічної діагоналі: ";(i=0;i<n;i++)(j=0;j<n;j++)(i+j+1==n)
{<<A[i][j]<<" ";=sum+A[i][j];
}<<endl;=sum/n;<<"Середнє геометричне суми елементів діагоналей = "<<ser;();0;
}
. Алгоритми обробки двовимірних масивів
Існує багато різноманітних задач з використання двовимірних масивів. Що ж можна робити з двовимірними масивами. Ось перелік декількох операцій:
? створення нового масиву за заданим алгоритмом;
? пошук елементів масиву за заданими параметрами;
? визначення, чи задовольняє двовимірний масив або окремі його елементи певній властивості;
? виконання певних операцій над компонентами двовимірного масиву (переставляння рядків і стовпців, множення матриць, знаходження окремих елементів тощо).
.Двовимірні масиви в задачах лінійної алгебри.
В лінійній алгебрі двовимірні масиви зазвичай називають матрицями. Над матрицями як і над числами, можна виконувати ряд дій, причому всі з них можливо запрограмувати. (Знаходження визначника, множення матриць, піднесення до степеня, транспонування тощо). Наведемо один приклад використання двовимірних масивів в лінійній алгебрі.
Приклад.
Дано дійсну матрицю А розмірності nxn. Транспонувати матрицю та вивести її на екран. Помножити транспоновану матрицю на введене з клавіатури число k та вивести готову матрицю на екран.
#include <iostream>
#include <conio.h>
#include <clocale>
#include <math.h>namespace std;main ()
{(LC_CTYPE,"rus");i, j, k, n;A[50][50];<<"n= ";>>n;<<"k= ";>>k;<<"Введіть елементи матриці A: "<<endl;(i=0;i<n;i++) //вводимо початкову матрицю;(j=0;j<n;j++)>>A[i][j];<<"Транспонована матриця: "<<endl;(i=0;i<n;i++) //виводимо транспоновану матрицю;
{(j=0;j<n;j++)
{<<A[j][i]<<" "; /*для цього достатньо вивести матрицю в зворотному порядку*/
}<<endl;
}(i=0;i<n;i++) //множимо матрицю на число k;
{(j=0;j<n;j++)
{[i][j]=A[j][i]*k;
}
}<<"Помножимо транспоновану матрицю на число k: "<<endl;(i=0;i<n;i++) //виводимо готову матрицю на екран;
{(j=0;j<n;j++)
{<<A[i][j]<<" ";
}<<endl;
}();0;
}
Використана література
1.Лафоре Р. "Объектно-ориентированное программирование в С++" <http://vk.com/wall-54530371_254> (2004)
.С. Рао "Освой самостоятельно C++ за 21 день" <http://vk.com/wall-54530371_6846> (2013)
."Учимся программировать на С++ вместе с Джоном Смайли" <http://vk.com/wall-54530371_7695> (2014)
.А.І. Скицько, «Лінійна алгебра та аналітична геометрія»(2003)
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Контрольная работа
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2017 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ