Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR.doc
Скачиваний:
2
Добавлен:
27.10.2018
Размер:
147.46 Кб
Скачать

3. Структуровані дані та їх типи. Масиви.Приклади обробки масивів.

Структуровані типи даних визначають впорядковану сукупність скалярних змінних і характеризуються типом своїх компонент. В мові C/C++ допускаються такі структуровані типи даних: строки, масиви, множини, записи, файли а також процедурні типи та об’єкти.

Масив - це структурований тип даних, який складається із фіксованого числа елементів одного типу. Елементами масиву можуть бути дані будь-якого типу, включаючи структуровані. Тип елементів масиву називається базовим. Кількість елементів масиву фіксується при описанні і в процесі виконання програми не змінюється. Доступ до кожного окремого елемента масиву здійснюється шляхом індексування елементів. Індекс елемента масиву по змісту тотожній поняттю індекса компонента вектора. Індекси являють собою вирази будь-якого скалярного типу, окрім дійсного. Крім того в мові С/С++ нема обмеженнь що до значення індексу, відповідальність за те щоб не вийти за межі масиву полягає на програміста.

Для задання масиву використовується наступний способ.

<Тип данних><ім’я змінної’[‘розмір масиву’]’>[,<ім’я змінної>’[‘розмір масиву’]’];

Наприклад :

int A[100];

char c[10],d[16];

Елемент масиву визначається ім’ям масиву та індексом цього елементу, взятим в квадратні дужки : m1[100], m2[15].

Масиви з базовим типом char називаються строками і для їх обробки існують деякі спеціальні функції.

Для задання багатовимірних масивів використовується наступний спосіб

<Тип данних><ім’я змінної’[‘розмір масиву’]’[’[‘розмір масиву’]’]> [, <ім’я змінної’[‘розмір масиву’]’ [ ’[‘розмір масиву’]’]>];

Одновимірні масиви зручно використовувати для представлення векторів, двовимірні - матриць.

Наприклад

int f[9][12];

double r[100][100];

Млжна явно не вказувати розмір масиву а відразу ініціалізувати його, в такому випадку система сама визначить розмір.

char S[]={‘a’,’b’,’c’};

int B[ ][ ]={{0,1,2},{4,5,6}};

також можливий такий варіант

float F[4]={1.0,3,4,5};

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

Елементи масиву розташовуються в пам’яті послідовно один за одним. Багатовимірні масиви розташовуються таким чином, що самий правий індекс зростає першим. Наприклад, двовимірний масив розташовується таким чином, що спочатку йдуть елементи першого рядка, потім другого і т. д.

Для обробки масиву як єдиного цілого використовується ім’я масиву без квадратних дужок.

Масиви не можна порівнювати по значенню елементів як це робиться в паскалі, справа в тому що імя масиву це лише показник на перший байт деякої області памяті де зберігаються данні, тому порівняння по типу M1=M2 на справді порівнюеє не значення елементів а значення самих показників.

Серед найпоширеніших операцій над масивами є ініціалізація (онулення всіх елементів), сортування (упорядкування елементів за певними правилами), пошук елементів масиву, які задовольняють деякі вимоги.

Обробка ж окремих елементів масиву нічим не відрізняється від роботи зі звичайною змінною.Для того щоб взяти значення відповідного елементу масиву треба лише написати наступне

long double A[5][5];

long double f;

….

f=A[2][5];

Таким чином пи присвоємо змінній f значення елемента масиву A з індексом [2][5].

Індексація завжди починається з нуля.

Набагато зручніше використовувати динамічні масиви

Припустимо нам потрібно в середині программи створита масив типу int розміром N на M. Поступимо наступним чином.

int **A;

A=new int*[N];

for(int I=0;I<N;I++) A[I]=new int [M];

такий підхід досволяє створювати масиви навіть у випадках коли память дуже подріблена.

Найбіль використовуваним структурним типом данних після масивів є структури та класи.

struct NameStruct{

данні

};

напрклад

struct Matrix{

long double **M;

int m,n;

};

Приклад класу матриць.

class CMatr{

public:

CMatr(int m,int n);

~CMatr();

long double GetAij(int i,int j);

void SetAij(int i,int j, long double r);

protected:

Matrix *M;

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]