- •1. Кроки для створення виконання програми
- •2. Змінні та константи
- •3. Символьні масиви і рядки
- •4. Директиви препроцесора
- •Тема 2: введення-виведення даних план
- •Аргументи для setiosflags і resetiosflags
- •2. Функція printf
- •2. Операції відношення
- •3. Логічні операції
- •4. Додаткові операції
- •5. Порозрядні операції
- •Тема 4: організація циклів план
- •1. Організація циклів за допомогою while і do...While
- •2. Організація циклів із використанням оператора for
- •3. Оператори switch і goto
- •Тема 5: створення функцій план
- •1. Створення функцій
- •2. Видимість змінних
- •3. Передача значень
- •4. Повертаємі значення і прототипи функцій
- •Тема 6: зовнішні пристрої і символьне введення/виведення план
- •1. Загальна концепція
- •2. Функції символьного введення-виведення
- •3. Символьні функції
- •4. Рядкові функції
- •5. Числові функції
- •6. Функції роботи з датою та часом
- •Тема 7: масиви план
- •1. Одномірні масиви, їхня ініціалізація
- •2. Сортування масивів
- •3. Розміщення одномірного масиву в пам’яті
- •4. Багатомірні масиви і їхнє розміщення в пам’яті
- •Тема 8. Вказівки і посилання план
- •1. Вказівки
- •2. Масиви і вказівки
- •Тема 9: робота з файлами план
- •1. Загальна характеристика роботи з файлами
- •2. Послідовні файли
- •Можливі режими доступу
- •3. Файли довільного доступу (із випадковим доступом)
- •Тема 10. Структури план
- •1. Загальна характеристика структури
- •2. Масиви структур
- •3. Використання масивів, як елементів структур
- •2. Робота зі структурами є універсальною, передбачено додавання записів до файлу (флаг ios:app). Для підрахунку кількості структур на диску приведемо наступні рядки програми:
- •Список літератури
2. Сортування масивів
Приклад сортування масиву:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
// Функція заповнення масиву випадковими числами 0-99
void zap(int ara[])
{
int i;
randomize();//(не має місця у Visual C++)
for (i = 0; i < MAX; i++)
ara[i] = rand()%100;
return;
}
// Функція виведення масиву
void print(int ara[])
{
int i;
for (i = 0; i < MAX; i++)
cout << ara[i] << "\n";
return;
}
// Функція сортування масиву
void sort(int ara[])
{
int temp, i, j;
for (i = 0; i < (MAX - 1); i++)
{
for (j = i + 1; j < MAX; j++)
{
if (ara[i] > ara[j])
{
temp = ara[j];
ara[j] = ara[i];
ara[i] = temp;
}
}
}
return;
}
void main ()
{
int ara[MAX];
zap(ara);
cout << "Вихідний масив:\n";
print(ara);
sort(ara);
cout << "Результат сортування:\n";
print(ara);
}
3. Розміщення одномірного масиву в пам’яті
Для C++ ім’я масиву є дійсною адресою, по якій в пам’яті знаходиться перший елемент масиву. Припустимо, що ви визначаєте масив з ім’ям amo:
int amo[6]={4,1,3,7,9,2};
Н а рисунку 3 показано, як масив розміщується в пам’яті.
Рис.3. Розміщення масиву amo у пам’яті.
Відповідно до рисунку масив починається з адреси 4050, реальна адреса змінних встановлюється під час завантаження скомпільованої програми. Можна звертатися до масиву за допомогою звичайних правил з індексами або за допомогою зміни адреси масиву.
Записи amo[3] і (amo+3)[0] ідентичні.
У кожній із таких рядків відбувається звертання до 4-го елемента масива.
(amo+0)[3]
(amo+2)[1]
(amo-2)[5]
(1+amo)[2]
При виведенні рядків із символьних масивів робота з їхніми елементами шляхом зміни адрес більш корисна, ніж процедура з масивами цілих чисел.
Приклад:
char nam[]={’T’,’e’,’d’,’\0’,’E’,’v’,’a’,’\0’,
’S’,’a’,’m’,’\0’};
Номер елемента |
Значення |
[0] |
T |
[1] |
Е |
[2] |
D |
[3] |
\0 |
[4] |
E |
[5] |
V |
[6] |
A |
[7] |
\0 |
[8] |
S |
[9] |
A |
[10] |
M |
[11] |
\0 |
cout <<nam; //Надрукує Ted
cout <<nam+4; //Надрукує Eva
cout <<nam+8; //Надрукує Sam
Особливості:
Незважаючи на те, що C++ автоматично не заносить у пам’ять нулі (або які-небудь інші значення), якщо ви під час оголошення ініціалізуєте декілька елементів (але не усе), інші заповнюються нулями.
На відміну від інших мов, C++ дозволяє вам привласнити значення незарезервовані членам масиву. Але це не варто робити, тому що ви зіпсуєте інші дані або код.
Так
не можна: int
cout[];
Так можна int cout[]={1,2,3};
Використання визначальних констант (#define) має переваги. При недостачі елементів у масиві можна змінити тільки один рядок у #define.