Масиви в СС

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Лабораторна робота

На тему: МАСИВИ в С / С + +

Поелементні операції

1. Одномірні (лінійні) масиви

Лінійним масивом у програмі на C + + називається упорядкований набір однотипних змінних, які розташовуються в пам'яті послідовно

Масив є найпростішою структурою даних, що полегшує роботу з великими обсягами інформації шляхом їх упорядкування. У випадку з масивами, впорядкування відбувається за рахунок індексування елементів, тобто звернення до кожного з них за порядковим номером. Показаний на малюнку масив складається з n елементів з індексами від 0 до n -1, в який записані числа 5, 21, 0, 12 і т.д.

Будь-який масив в C + + характеризується трьома параметрами: ім'ям, типом елементів і розміром. Як і звичайна змінна, перед використанням масив повинен бути оголошений. Загальна форма запису оголошення:

тіп_елементов імя_массіва [размер_массіва];

Тут тіп_елементов - це будь-який з відомих стандартних типів (int, float, double, char і т.д.), Імя_массіва - унікальне ім'я (ідентифікатор), що використовується для звернення до масиву, размер_массіва - кількість його елементів. У якості останнього параметра в оголошенні може бути використана тільки цілочисельна константа або константне вираз. Приклади оголошень

int A [15]; / / масив з 15 цілочисельних елементів з ім'ям A

float x [3]; / / масив x з 3-х елементів типу float

Оголошення масиву є командою компілятору на виділення пам'яті для зберігання його елементів. Загальна кількість виділеної пам'яті залежить не тільки від кількості елементів, а й від розміру кожного елемента, тобто від його типу. Наприклад, текстовий рядок з 1000 символів (тип char) займе P = 1000 * sizeof (char) = 1000 байтів, а масив з такої ж кількості дійсних чисел подвійної точності (тип double) займе вже у вісім разів більше - P = 1000 * sizeof (double) = 8000 байтів.

Нумерація елементів у масиві починається з нуля. Таким чином, перший елемент масиву має індекс 0, а останній - індекс n -1, де n - розмір масиву. Звернення до елементу здійснюється з використанням імені масиву й індексу елемента в квадратних дужках. Наприклад, запис "x [0] = 5.5;" означає "привласнити значення 5.5 нульового елементу масиву x".

Для роботи з масивами характерним є використання ітераційних циклів for. З їх допомогою організовується виконання однотипних операцій з усіма елементами масиву, зокрема, поелементний введення-виведення, поелементні арифметичні операції та ін Розглянемо це на наступному прикладі.

Приклад 1. Напишіть програму, яка запитує у користувача 10 цілих чисел, і виводить її на екран їх суму.

Рішення. Будемо використовувати масив з ім'ям A і розміром 10 для зберігання введених чисел. Введення даних і підсумовування організуємо поелементно за допомогою циклів for.

//----------- Сума елементів масиву -------------

# Pragma hdrstop

# Include <conio. H>

# Include <iostream.h>

# Pragma argsused

int main (int argc, char * argv [])

{

int A [10]; / / оголошуємо масив з 10 цілих

for (int i = 0; i <10; i + +) / / організуємо цикл по i від 0 до 9

{

cout <<"input A [" <<i <<"] ="; / / запрошення

cin>> A [i]; / / вводимо A [i]

}

int sum = 0; / / оголошуємо змінну

for (int i = 0; i <10; i + +) / / організуємо цикл

sum = sum + A [i]; / / в циклі підсумовуємо елементи

cout <<"\ nSumma:" <<sum; / / виводимо результат на екран

getch (); / / затримка

return 0;

}

//------------------------------------------------ -

Наберіть код цієї програми в середовищі Turbo C + + і запустіть її на виконання. Перевірте правильність одержуваних з її допомогою результатів. Намалюйте блок-схему і поясніть алгоритм її роботи. Поясніть сенс використання додаткової змінної sum в цій програмі.

2. Багатовимірні масиви

Масиви в програмах C + + можуть бути не тільки лінійними. Досить частим є використання двох - (і більш)-мірних структур. Приміром, прямокутна матриця - типова структура, представимо за допомогою двовимірного масиву; а 3 D-тензор може бути записаний як відповідний тривимірний масив.

Багатовимірний масив в C + + організований за принципом «масиву масивів». Загальний формат його оголошення

тип ім'я [N 1] [N 2] ... [NM];

Тут M - число індексів (або розмірність) масиву. Індекси змінюються в межах від 0 до N 1 - 1, від 0 до N 2 - 1, від 0 до N 3 - 1, ..., від 0 до NM - 1, відповідно.

Наприклад, запис int G [5] [4]; означає оголошення двовимірного масиву цілих чисел з ім'ям G і розмірами 5 '4. На рис. праворуч такий масив представлений у вигляді таблиці. Тут перший індекс є номером рядка, другий - номером стовпця таблиці, з діапазонами зміни від 0 до 4, і від 0 до 3, відповідно.

Доступ до елементів багатовимірного масиву в програмі проводиться так само, як і в одновимірному випадку, тобто шляхом зазначення імені масиву і набору індексів у квадратних дужках. Наприклад, операція присвоювання значення 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; / / переклад на новий рядок

}

Алгоритм роботи цього фрагмента ілюструється наступною блок-схемою

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

Приклад 2. Є речова квадратна матриця розміром 4 '4. Напишіть програму, яка обчислює твір елементів в кожній її рядку. Матриця вводиться з клавіатури.

Рішення. Домовимося використовувати для зберігання матриці масив float X [4] [4]. Розрахунок твори реалізуємо згідно з наступним алгоритмом. Введемо допоміжну змінну (наприклад, float P). Зауважимо, що в i-му рядку розташовані елементи X [i] [j], де j змінюється від 0 до 3, включно. Організуємо цикл по j, всередині якого будемо домножать P на X [i] [j]. Тоді на виході з циклу P буде містити шукане твір. Виведемо його на екран і продовжимо розрахунки для наступного рядка. Для правильної роботи алгоритму перед початком розрахунків у кожному рядку матриці необхідно присвоїти P значення 1.

//-------- Твір елементів рядка ----------

# Pragma hdrstop

# Include <conio. H>

# Include <iostream.h>

# Pragma argsused

int main (int argc, char * argv [])

{

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 ();

return 0;

}

//------------------------------------------------ -

Наберіть і відкомпілюйте код цієї програми в Turbo C + +. Перевірте результати, що видаються програмою.

3. Типізовані константи

У розглянутому вище прикладі текст програми містить явні вирази, що задають розміри масиву X. Він оголошений як float X [4] [4], тобто з явним зазначенням розмірності, і далі скрізь по ходу програми цифра 4 використовується явно при записі циклів for.

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

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

Типизированная константа повинна бути оголошена з ключовим словом const, слідом за яким вказується її тип (int, float, double, char, і т.д.), далі, через пробіл, - її ім'я і инициализирует вираз

const тип ім'я = вираз;

Наприклад, запис const int N = 4; означає оголошення целочисленной константи з ім'ям N та значенням 4. У розглянутому вище прикладі N могла бути використана як при оголошенні масиву float X [N] [N], так і скрізь далі замість 4. Така програма буде легко масштабується в силу того, що в ній досить змінити значення N роботи з масивами інших розмірів.

Типизированная константа може бути оголошена в будь-якому місці програми до моменту свого першого використання. Однак гарним стилем вважається оголошення всіх констант на самому початку програмного файлу, після підключення бібліотек директивами # include.

4. Ініціалізація елементів масиву

У розглянутих вище прикладах початкові значення елементів масиву задавалися користувачем з клавіатури. Можна поступити інакше і кожному з елементів присвоїти початкове значення за допомогою оператора «=». Це зажадає досить великої кількості записів - за окремим оператору для кожного з елементів. C + + дає програмісту ще один, більш зручний, спосіб. Масив може бути инициализирован при оголошенні. Для цього в рядку оголошення відразу слідом за вказівкою типу елементів, імені масиву та його розмірів, записується знак присвоювання, і далі в фігурних дужках задаються значення елементів через кому

тип ім'я [розмір N] = {знач1, знач2, ​​знач3, ..., знач N};

Запис означає, що відразу після розміщення масиву в оперативній пам'яті кожного з елементів має бути присвоєно відповідне значення зі списку. Якщо список значень у фігурних дужках коротше, ніж розмір масиву, то що залишилися елементи будуть ініціалізовані значенням за замовчуванням, тобто обнулені.

У наступному прикладі

float mark [5] = {7.3, 4.0, 2.2, 12.1, 8.9};

створюється масив з ім'ям mark, що складається з 5 чисел типу float, які не започатковано значеннями 7.3, 4.0, 2.2 і т.д. Це еквівалентно наступного набору операторів

float mark [5]; mark [0] = 7.3; mark [1] = 4.0; mark [2] = 2.2 і т. д.

Багатовимірний масив також може бути инициализирован в рядку оголошення. Для цього достатньо пам'ятати про те, що багатовимірний масив в C + + - це «масив масивів», про що вже говорилося вище. Приклад

int F [3] [3] = {{3, 0, 2}, (1, 9, 8}, {5, 7, 4}};

Тут створюється двовимірний масив з ім'ям F і розмірами 3 '3, елементи якого отримують початкові значення F [0] [0] = 3, F [0] [1] = 0, F [0] [2] = 2, F [ 1] [0] = 1 і т.д.

Приклад 3. Нехай і - Дві квадратні матриці розміром 3 '3. Потрібно написати програму, розраховують їх твір

Рішення. Шукане твір - Це також матриця 3 '3, елементи якої розраховуються за формулою ( ). Аналогічно Прикладу 1, організуємо підсумовування за допомогою допоміжної змінної s і циклу з k. Для перебору всіх використовуємо два додаткових вкладених один в одного циклу за i і по j. Ці цикли будуть зовнішніми по відношенню до циклу по k.

//-------------- Перемноження матриць --------------

# Pragma hdrstop

# Include <conio.h>

# Include <iostream.h>

# Pragma argsused

const int N = 3; / / використовуємо константу N = 3

int main (int argc, char * argv [])

{

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 ();

return 0;

}

//------------------------------------------------ -

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
54.8кб. | скачати


Схожі роботи:
Масиви Двовимірні масиви
Масиви
Масиви в С З
Масиви в С З 2
Болотні масиви
Програмування масиви та рядки
Масиви у мові Паскаль
Одновимірні і двовимірні масиви
Масиви та покажчики в мові програмування Сі
© Усі права захищені
написати до нас