Масиви в С З 2

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

скачати

Лабораторна робота
На тему: МАСИВИ в С / С + +

Поелементні операції
1. Одномірні (лінійні) масиви
Лінійним масивом у програмі на C + + називається упорядкований набір однотипних змінних, які розташовуються в пам'яті послідовно
SHAPE \ * MERGEFORMAT
5
21
0
12
8
-3
14
-9
25
...
елемент 0
елемент 1
елемент 2
елемент n-1
A [0]
A [1]
A [2]
A [3]
A [4]
A [5]
A [6]
A [n-2]
A [n-1]

Масив є найпростішою структурою даних, що полегшує роботу з великими обсягами інформації шляхом їх упорядкування. У випадку з масивами, впорядкування відбувається за рахунок індексування елементів, тобто звернення до кожного з них за порядковим номером. Показаний на малюнку масив складається з 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 + + можуть бути не тільки лінійними. Досить частим є використання двох - (і більш)-мірних структур. Приміром, прямокутна матриця - типова структура, представимо за допомогою двовимірного масиву; а 3D-тензор може бути записаний як відповідний тривимірний масив.
Багатовимірний масив в C + + організований за принципом «масиву масивів». Загальний формат його оголошення
тип ім'я [N1] [N2] ... [NM];
SHAPE \ * MERGEFORMAT
5
21
0
12
8
-3
14
G [0] [0]
23
55
-1
0
78
44
4
0
9
33
0
-2
0
G [0] [3]
G [1] [0]
G [4] [0]
G [4] [3]

Тут M - число індексів (або розмірність) масиву. Індекси змінюються в межах від 0 до N1 - 1, від 0 до N2 - 1, від 0 до N3 - 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; / / переклад на новий рядок
}
SHAPE \ * MERGEFORMAT
Алгоритм роботи цього фрагмента ілюструється наступною блок-схемою
SHAPE \ * MERGEFORMAT
i = 0
j = 0
G [i] [j]
j + +
(J <4)?
(+)
(-)
(I <5)?
(+)
(-)
i + +
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;
}
//------------------------------------------------ -
Додати в блог або на сайт

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

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


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