Створення одновимірного масиву в с. Статичний масив: оголошення, заповнення, використання

Масиви надзвичайно важлива тема в C ++. У програмах вони використовуються дуже часто і розібратися в цій темі необхідно досконально. Відразу вас порадую - зрозуміти і навчитися застосовувати масиви досить просто навіть початківцю.

Отже, навіщо ж потрібні масиви і що вони з себе представляють? До теперішнього моменту ви вже добре знаєте, що дані програми зберігаються в оголошених нами. Але буває так, що програмі необхідно зберігати сотні (а то і більше) змінних однотипних даних, а також необхідно з ними працювати - присвоювати значення, змінювати їх і т.д.

Наприклад, треба зберігати порядкові номери рядків. Погодьтеся - будь-якого стане страшно від думки, що треба створити п'ятсот змінних типу int, кожної дати унікальне ім'я і привласнити значення від 1-го до 500-та. (Мені вже страшно :) В такому випадку, масиви нас просто врятують.

Відзначимо основне і перейдемо до практичного прикладу:

  • масив в С ++ - це сукупність певної кількості однотипних змінних, що мають одне ім'я. Наприклад, int array; . Цей запис означає, що ми оголосили масив з ім'ям array , Котриймістить в собі 3 змінні типу int ;
  • змінні масиву називають елементами;
  • кожен елемент має свій унікальний індекс - свій порядковий номер. Використовуючи індекс ми можемо звертатися до конкретного елементу. ВАЖЛИВО - індексація елементів масиву починається з 0 . Так в масиві int array перший елемент має індекс 0 , А останній - 2 . Щоб звернутися, наприклад, до нульового елементу масиву і змінити його значення, треба вказати ім'я масиву та в квадратних дужках вказати індекс елемента - array \u003d 33 .

Розглянемо приклад:

масиви C ++

// в цій програмі створюємо масив з розміром size, // за допомогою циклу for вносимо дані в усі осередки // масиву і відображаємо їх вміст на екран #include using namespace std; int main () (setlocale (LC_ALL, "rus"); const int SIZE \u003d 10; // оголошуємо константу int firstArray; // оголошуємо масив з кількістю елементів SIZE for (int i \u003d 0; i< SIZE ; i++) //заполняем и отображаем значения на экран { firstArray[i] = i + 1; // на первом шаге цикла firstArray присвоить 1 (0 + 1) cout << i << "-я ячейка хранит число " << firstArray[i] << endl; } cout << endl; return 0; }

// в цій програмі створюємо масив з розміром size,

// за допомогою циклу for вносимо дані в усі осередки

// масиву і відображаємо їх вміст на екран

#include

using namespace std;

int main ()

setlocale (LC_ALL, "rus");

const int SIZE \u003d 10; // оголошуємо константу

int firstArray [SIZE]; // оголошуємо масив з кількістю елементів SIZE

for (int i \u003d 0; i< SIZE ; i ++ ) // заповнюємо і відображаємо значення на екран

firstArray [i] \u003d i + 1; // на першому кроці циклу firstArray привласнити 1 (0 + 1)

cout<< i << "-Я осередок зберігає число"<< firstArray [ i ] << endl ;

cout<< endl ;

return 0;

У рядку 12 ми визначаємо целочисленную константу SIZE, Яка буде зберігати розмір масиву (певне нами, кількість його елементів). У рядку 13 оголошуємо масив: вказуємо тип даних, які будуть зберігатися в осередках масиву, даємо ім'я і вказуємо розмір в квадратних дужках.

Важливо, що в квадратні дужки ми можемо записувати тільки цілі константні значення. Треба або відразу вписати ціле число в квадратні дужки при оголошенні масиву ( int firstArray;), Або визначити целочисленную константу до оголошення масиву і ввести в квадратні дужки ім'я цієї константи (як в нашому прикладі).

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

Ось уявіть, що нам необхідно змінити розмір масиву з 10 елементів на 200. У цьому випадку, нам залишається всього на всього змінити значення целочисленной константи, і таким чином у нас автоматично підставить нові значення розміру і в масив, і в усі цикли програми.

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

А якщо масив зовсім невеликий, наприклад на 5 елементів, форматувати його можна відразу при оголошенні:

Так елементу з індексом 0 - firstArray - буде присвоєно значення 11 , А останнього елемента масиву firstArray - значення 1 5 . Є така фішка - ви можете не вказувати розмір масиву в квадратних дужках і зробити такий запис:

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

Так само при початковій ініціалізації елементів масиву, коли масив необхідно очистити від «сміття» (залишкових даних інших програм в пам'яті) краще відразу присвоїти всім елементам значення 0 . Це виглядає так:

Слід запам'ятати, що така ініціалізація можлива тільки для заповнення нулями. Якщо необхідно заповнити елементи масиву будь-якими іншими числами, краще застосовувати цикл. У C ++ 11 (стандарт кодування) при використанні списковому ініціалізації (ініціалізації з фігурними дужками) дозволяється навіть відкинути знак = .

Хочеться показати ще один прийом ініціалізації при створенні масиву. Наприклад, для масиву з 30-ти елементів нам треба внести значення 33 і 44 тільки в осередку з індексом 0 і 1 відповідно, а решта заповнити нулями. Тоді робимо так:

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

Організувати заповнення масиву можна і за допомогою оператора cin:

for (int i \u003d 0; i< size; i++) //заполняем и выводим значения на экран { cout << "Введите значение в ячейку №" << i << " :"; cin >\u003e FirstArray [i]; )

for (int i \u003d 0; i< size ; i ++ ) // заповнюємо і виводимо значення на екран

масиви

масив являє собою сукупність змінних одного типу з загальним для звернення до них ім'ям. У C # масиви можуть бути як одновимірними, так і багатовимірними. Масиви служать самим різним цілям, оскільки вони надають зручні засоби для об'єднання пов'язаних один з одним змінних.

Масивами в C # можна користуватися практично так само, як і в інших мовах програмування. Проте у них є одна особливість: вони реалізовані у вигляді об'єктів.

Для тoго щоб скористатися масивом в програмі, потрібно двоетапна процедура, оскільки в C # масиви реалізовані у вигляді об'єктів. По-перше, необхідно оголосити змінну, яка може звертатися до масиву. І по-друге, потрібно створити екземпляр масиву, використовуючи оператор new.

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 (class Program (static void Main (string args) (// Оголошуємо масив int myArr \u003d new int; // ініціалізувавши кожен елемент масиву вручну myArr \u003d 100; myArr \u003d 23; myArr \u003d 25; myArr \u003d 31; myArr \u003d 1 ; foreach (int i in myArr) Console.WriteLine (i); Console.ReadLine ();)))

Слід мати на увазі, що якщо масив тільки оголошується, але явно не ініціалізується, кожен його елемент буде встановлено в значення, прийняте за умовчанням для відповідного типу даних (наприклад, елементи масиву типу bool будуть встановлюватися в false, а елементи масиву типу int - в 0).

ініціалізація масиву

Крім заповнення масиву елемент за елементом (як показано в попередньому прикладі), можна також заповнювати його з використанням спеціального синтаксису ініціалізації масивів. Для цього необхідно перерахувати включаються в масив елементи в фігурних дужках (). Такий синтаксис зручний при створенні масиву відомого розміру, коли потрібно швидко поставити його початкові значення:

// Синтаксис ініціалізації масиву з використанням // ключового слова new int myArr \u003d new int (10,20,30,40,50); // Синтаксис ініціалізації масиву без використання // ключового слова new string info \u003d ( "Прізвище", "Ім'я", "По батькові"); // Використовуємо ключове слово new і бажаний розмір char symbol \u003d new char ( "X", "Y", "Z", "M");

Зверніть увагу, що в разі застосування синтаксису з фігурними дужками розмір масиву вказувати не потрібно (як видно на прикладі створення змінної myArr), оскільки цей розмір автоматично обчислюється на основі кількості елементів всередині фігурних дужок. Крім того, застосовувати ключове слово new не обов'язково (як при створенні масиву info).

Ключове слово var дозволяє визначити змінну так, щоб лежачий в її основі тип виводився компілятором. Аналогічним чином можна також визначати неявно типізовані локальні масиви. З використанням такого підходу можна визначити нову змінну масиву без вказівки типу елементів, що містяться в масиві. Давайте розглянемо приклад:

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 (class Program (static void Main (string args) (var arr1 \u003d new (1, 2, 3); Console.WriteLine ( "Тип масиву arr1 - (0)", arr1.GetType ()); var arr2 \u003d new ( "One", "Two", "Three"); Console.WriteLine ( "Тип масиву arr2 - (0)", arr2.GetType ()); Console.ReadLine ();)))

Зрозуміло, як і при створенні масиву з використанням явного синтаксису C #, елементи, які вказуються в списку ініціалізації масиву, повинні обов'язково мати один і той же базовий тип (тобто повинні все бути int, string або MyCar).

Визначення масиву об'єктів

У більшості випадків при визначенні масиву тип елемента, що міститься в масиві, вказується явно. Хоча на перший погляд це виглядає досить зрозуміло, існує одна важлива особливість. В основі кожного типу в системі тіпов.NET (в тому числі фундаментальних типів даних) в кінцевому підсумку лежить базовий клас System.Object. В результаті виходить, що в разі визначення масиву об'єктів знаходяться всередині нього елементи можуть бути чим завгодно:

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 (class Program (static void Main (string args) (// Оголошуємо і инициализируем масив об'єктів object arrByObject \u003d (true, 10, "Привіт", 13.7m); // Виведемо в консоль тип кожного члена масиву foreach (object me in arrByObject) Console.WriteLine ( "Тип (0) - (1)", me, me.GetType ()); Console.ReadLine ();)))

Продовжуємо вивчення основ C ++. У цій статті ми розглянемо масиви.

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

Введення в масиви

Візуалізувати масив можна таким чином:

Це набір деяких значень, які зберігаються один за одним, під одним ім'ям. Для отримання цих значень вам не доведеться створювати нових змінних, потрібно тільки вказати індекс під яким зберігається значення в масиві. Наприклад, вам необхідно роздати набір з п'яти гральних карт для покеру, ви можете зберігати ці карти в масиві і для вибору нової карти змінювати тільки номер індексу, замість використання нової змінної. Це дозволить використовувати один і той же код для ініціалізації всіх карт і перейти від такого запису:

Card1 \u003d getRandomCard (); Card2 \u003d getRandomCard (); Card3 \u003d getRandomCard (); Card4 \u003d getRandomCard (); Card5 \u003d getRandomCard ();

For (int i \u003d 0; i< 5; i++) { card[i] = getRandomCard(); }

А тепер уявіть різницю, якщо змінних 100!

синтаксис

Для оголошення масиву необхідно вказати дві речі (крім імені): тип і розмір масиву:

Int my_array [6];

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

Для доступу до елементів масиву використовуються квадратні дужки, але на цей раз ви вказуєте індекс елемента, який хочете отримати:

My_array [3];

Візуалізувати цей процес можна так:


my_array посилається на весь масив цілком, в той час як my_array тільки на перший елемент, my_array - на четвертий. Зверніть увагу, що індексація елементів в масиві починається з 0. Таким чином Звернення до елементів масиву завжди буде відбуватися зі зміщенням, наприклад:

Int my_array [4]; // оголошення масиву my_array [2] \u003d 2; // встановити значення третього (саме третього!) Рівним 2

Оголошення багатовимірних масивів в C ++

Масиви можуть також використовуватися для подання багатовимірних даних, наприклад, таких, як шахівниця або поле для гри в хрестики-нулики. При використанні багатовимірних даних для доступу до елементів масиву будуть використовуватися кілька індексів.

Для оголошення двовимірного масиву необхідно вказати розмірність двох вимірів:

Int tic_tac_toe_board;

Візуалізація масиву з індексами його елементів:

Для доступу до елементів такого масиву буде потрібно два індексу - один для рядка другий для стовпця. На зображенні показані потрібні індекси для доступу до кожного з елементів.

Використання масивів

При використанні масивів вам не обійтися без. Для того, щоб пробігти по циклу ви просто ініціалізіруете нульову зміну і збільшуєте її, поки вона не перевищить розміри масиву - шаблон якраз відповідний для циклу.

Наступна програма демонструє використання циклу для створення таблиці множення і зберігання результату в двовимірному масиві:

#include using namespace std; int main () (int array; // Оголошуємо масив, який виглядає як шахова дошка for (int i \u003d 0; i< 8; i++) { for (int j = 0; j < 8; j++) { array[i][j] = i * j; // Задаем значения каждого элемента } } cout << "Multiplication table:\n"; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { cout << "[ " << i << " ][ " << j << "] = "; cout << array[i][j] << " "; cout << "\n"; } } }

Передаємо масиви в функції

Як бачите, різні елементи мови C ++ взаємодіють один з одним. Як і з циклами, масиви можна використовувати разом з.

Щоб передати масив у функцію досить просто вказати його ім'я:

Int values \u200b\u200b[10]; sum_array (values);

А при оголошенні функції вказати масив як аргумент:

Int sum_array (int values);

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

Так як усередині функції ми не знаємо розмір масиву, необхідно передати розмірність в якості другого аргументу:

Int sumArray (int values, int size) (int sum \u003d 0; for (int i \u003d 0; i< size; i++) { sum += values[ i ]; } return sum; }

Коли ми передаємо багатовимірні масиви, треба вказувати всі розмірності, за винятком першої:

Int check_tic_tac_toe (int board);

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

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

А поки напишемо функцію, яка обчислює суму елементів масиву:

#include using namespace std; int sumArray (int values, int size) (int sum \u003d 0; // цикл зупиниться коли i \u003d\u003d size, тому що індекс останнього елемента \u003d size - 1 for (int i \u003d 0; i< size; i++) { sum += values[i]; } return sum; } int main() { int values; for (int i = 0; i < 10; i++) { cout << "Enter value " \u003c\u003c i \u003c\u003c": "; cin >\u003e Values \u200b\u200b[i]; ) cout<< sumArray(values, 10) << endl; }

Сортування масиву

Вирішимо задачу сортування масиву з 100 чисел, які ввів користувач:

#include using namespace std; int main () (int values \u200b\u200b[100]; for (int i \u003d 0; i< 100; i++) { cout << "Enter value " \u003c\u003c i \u003c\u003c": "; cin >\u003e Values \u200b\u200b[i]; ))

Готово, залишилося тільки впорядкувати цей масив 🙂 Як зазвичай люди сортують масиви? Вони шукають найменший елемент в ньому і ставлять його в початок списку. Потім вони шукають наступне мінімальне значення і ставлять його відразу після першого і т.д.

Все це справа виглядає як цикл: пробігаємо по масиву, починаючи з першого елемента і шукаємо мінімальне значення в решти, і міняємо місцями ці елементи. Почнемо з написання коду для виконання цих операцій:

Void sort (int array, int size) (for (int i \u003d 0; i< size; i++) { int index = findSmallestRemainingElement(array, size, i); swap(array, i, index); } }

Тепер можна подумати про реалізацію двох допоміжних методів findSmallestRemainingElement і swap. Метод findSmallestRemainingElement повинен пробігати по масиву і знаходити мінімальний елемент, починаючи з індексу i:

Int findSmallestRemainingElement (int array, int size, int index) (int index_of_smallest_value \u003d index; for (int i \u003d index + 1; i< size; i++) { if (array[ i ] < array[ index_of_smallest_value ]) { index_of_smallest_value = I; } } return index_of_smallest_value; }

Нарешті, нам треба реалізувати функцію swap. Так як функція змінить оригінальний масив, нам просто треба поміняти значення місцями, використовуючи тимчасову змінну:

Void swap (int array, int first_index, int second_index) (int temp \u003d array [first_index]; array [first_index] \u003d array [second_index]; array [second_index] \u003d temp;)

Для перевірки алгоритму заповнимо масив випадковими числами і відсортуємо. Весь код програми:

#include #include #include using namespace std; int findSmallestRemainingElement (int array, int size, int index); void swap (int array, int first_index, int second_index); void sort (int array, int size) (for (int i \u003d 0; i< size; i++) { int index = findSmallestRemainingElement(array, size, i); swap(array, i, index); } } int findSmallestRemainingElement(int array, int size, int index) { int index_of_smallest_value = index; for (int i = index + 1; i < size; i++) { if (array[ i ] < array[ index_of_smallest_value ]) { index_of_smallest_value = i; } } return index_of_smallest_value; } void swap(int array, int first_index, int second_index) { int temp = array[ first_index ]; array[ first_index ] = array[ second_index ]; array[ second_index ] = temp; } // вспомогательная функция для вывода массива void displayArray(int array, int size) { cout << "{"; for (int i = 0; i < size; i++) { // если элемент не первый выведем запятую if (i != 0) { cout << ", "; } cout << array[ i ]; } cout << "}"; } int main() { int array[ 10 ]; srand(time(NULL)); for (int i = 0; i < 10; i++) { array[ i ] = rand() % 100; } cout << "Original array: "; displayArray(array, 10); cout << "\n"; sort(array, 10); cout << "Sorted array: "; displayArray(array, 10); cout << "\n"; }

Алгоритм сортування, який ми тільки що розглянули, називається сортуванням методом вставки , Це не найшвидший алгоритм, але зате його легко зрозуміти і реалізувати. Якщо вам доведеться сортувати великі обсяги даних, то краще використовувати більш складні і більш швидкі алгоритми.

Будь ласка, призупините роботу AdBlock на цьому сайті.

Масив - це найпростіший складовою тип даних. Коли ми обговорювали змінні, у нас була хороша аналогія з коробкою. Повернемося до неї. Якщо змінна - це один ящик, то масив - це кілька пронумерованих однакових ящиків, які мають одне і те ж ім'я, а розрізняються між собою тільки порядковим номером.

Рис.1 Змінні і масиви. Аналогія з коробками.

На зображенні вище зображено три масиву:

  • цілочисельний масив з 8 елементів з ім'ям arr_int
  • речовинний масив з 11 елементів з ім'ям arr_float
  • символьний масив з 6 елементів з ім'ям arr_char

У масиву, як і у змінної, є свої ім'я та тип даних. Крім того, у масиву ще є одна додаткова характеристика - розмір масиву. Розмір масиву - кількість елементів, які можуть в ньому зберігатися. В нашій аналогії з коробочками це кількість коробок.

Зверніть увагу!

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

Оголошення і ініціалізація масиву

Оголошення масиву дуже схоже на оголошення змінної. Відмінність лише в тому, що слід додатково вказати розмір масиву в квадратних дужках. Ось кілька прикладів:

Лістинг 1.

Int arr_int; double arr_float; float number;

На ім'я масиву накладаються обмеження, аналогічні тим, які накладаються на ім'я змінної.

Правило іменування масивів

Ім'я масиву - будь-яка послідовність символів, цифр і знака нижнього підкреслення «_», яка починається з букви. Регістр букв важливий.

Ось ще кілька прикладів оголошення масивів:

Лістинг 2.

Int grades, order; double prices;

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

Лістинг 3.

Int arr_int \u003d (2, 5, 5, 3, 4); double arr_float \u003d (1.2, -2.3, 4.5, 3.83, 0.01, -0.12, 44.2, 123.7, 23.44, -3.7, 7);

Якщо потрібно присвоїти нульові значення всіх елементів масиву, то можна зробити ось так:

Лістинг 4.

Double arr \u003d (0);

Робота з окремими елементами масиву

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

Давайте, наприклад, виведемо елементи масиву з п'яти елементів на екран.

Лістинг 5.

#include int main (void) (int arr \u003d (2, 4, 3, 5, 5); printf ( "% d% d% d% d% d \\ n", arr, arr, arr, arr, arr); return (0);)

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

Лістинг 6.

#include int main (void) (int arr \u003d (0); for (int i \u003d 0; i< 100; i = i + 1){ arr[i] = 2*i; } for(int i = 0; i < 100; i = i + 1){ printf("%d\t",arr[i]); } return(0); }

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

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

Лістинг 7.

#include #include #include int main (void) (srand (time (NULL)); int count \u003d (0); int rand_number; for (int i \u003d 0; i< 100000; i = i + 1){ rand_number = rand()%3; count = count + 1; } for(int i = 0; i < 3; i = i + 1){ printf("%d - %d\n", i, count[i]); } return 0; }

Зверніть увагу на прийом, який використовується в цій програмі.
У нульовому елементі масиву зберігається кількість випадінь числа 0, в першому елементі - кількість випадінь числа 1, у другому елементі - числа 2. Тобто саме сгенерированное число дозволяє визначити, до якого елементу масиву необхідно додати одиницю. Тому необхідність в операторі вибору switch відпадає. Зручно, чи не так?

Поділитися