Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Використання псевдовипадкових чисел
Для генерації псевдовипадкових чисел можна використовувати функцію rand, яка повертає значення цілого типу в діапазоні від 0 до максимального значення типу int. Кожне звертання до функції у процесі виконання програми викликає генерування нового псевдовипадкового числа з рівномірним законом розподілу. Приклад використання функції rand:
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); for (int i = 0; i < 10; ++i) cout << rand() << endl; }
Функція rand починає генерування значень з єдиного встановленого початкового значення. Тому при виконання програми кожного разу будемо отримувати одну і ту саму послідовність псевдовипадкових чисел. Для того, щоб послідовності чисел були різними, необхідно встановлювати їх початкове значення. Для цього можна використовувати функцію time, яка повертає поточний час. Для генерації випадкових чисел в довільному діапазоні значень використовуються операцію %. Наприклад, необхідно отримати 10 чисел в діапазоні від 5 до 15:
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); for (int i = 0; i < 10; ++i) cout << 5 + rand() % 10 << endl; }
Масиви 7.1. Властивості масивів в мові програмування С++ Масиви належать до складених (агрегованих) типів даних. За визначенням масив – це організована певним чином сукупність даних одного типу (елементів масиву). Основні властивості масивів в мові програмування С++: 1) масив займає неперервну ділянку оперативної пам'яті; 2) всі елементи масиву мають однаковий тип і спільне ім’я; 3) тип елементів масиву може бути довільним простим або складеним; 4) елементи масиву розташовані в пам'яті послідовно за порядком зростання індексів; 5) індекс першого елементу масиву завжди дорівнює нулю; 6) до елементів масиву можна звертатись за допомогою індексів і вказівників; 7) ім’я масиву є константним вказівником на його перший елемент; 8) масив може бути одновимірним і багатовимірним. Одновимірні масиви Одновимірний масив – це лінійна послідовність однотипних елементів. Такі масиви часто називають математичним терміном вектор. Кожен елемент масиву має свій порядковий номер (індекс), який визначає розташування цього елемента в масиві. Як і звичайні змінні, масиви перед використанням необхідно явно оголошувати. Це виконується за допомогою такої синтаксичної конструкції:
тип_елементів ім’я_масиву [ кількість_елементів ];
тут тип елементів – довільний допустимий простий або складений тип, ім’я масиву – ідентифікатор, що відповідає правилам запису імен, квадратні дужки – обов’язкова ознака масиву, кількість елементів – константа чи константний вираз, що визначає розмірність даного масиву. Для кожного масиву компілятор виділяє неперервну ділянку пам'яті, обсяг якої дорівнює добутку
кількість_елементів × sizeof(тип_елементів)
При оголошенні масивів можна відразу виконувати ініціалізацію їх елементів. Застосовують дві форми ініціалізації: з зазначенням кількості елементів масиву і без зазначення кількості елементів масиву. У першому випадку масив оголошується звичайним чином, після чого в фігурних дужках записують константні значення елементів масиву, починаючи від першого (тобто елемента з індексом нуль). При цьому кількість заданих значень не повинна перевищувати вказану розмірність масиву, але може бути меншою за неї – тоді для перших елементів масиву, для яких вказані значення, присвоюються ці значення, решті присвоюється нуль. Цю властивість мови програмування С++ зручно використовувати для присвоєння нульових значень елементам масиву.
int a[5] = { 1, 2, 3, 4, 5 }; // 1 2 3 4 5 int b[5] = { 1, 2, 3 }; // 1 2 3 0 0 int c[5] = { }; // 0 0 0 0 0
Якщо в оголошенні масиву виконується його повна ініціалізація, тобто вказані початкові значення для всіх елементів масиву, то кількість елементів масиву можна не опустити. Розмірність масиву визначається кількістю елементів – ініціалізаторів. Розмірність масиву, оголошеного без зазначення кількості елементів, можна визначити за допомогою операції sizeof:
кількість_елементів = sizeof(ім’я_масиву) / sizeof(тип_елементів)
Операція sizeof(ім’я_масиву) повертає розмір (обсяг в байтах) усієї ділянки пам'яті, яку займає масив, незалежно від того, наскільки він заповнений. Визначимо кількість елементів в масиві, оголошеному без зазначення його розмірності:
int a[] = { 1, 2, 3, 4, 5 }; int n = sizeof(a) / sizeof(int); for (int i = 0; i < n; ++i) cout << a[i] << endl;
Елемент масиву є змінною, яка має тип, заданий в оголошенні масиву, і синтаксично може використовуватися у будь якому місці програми, де може бути записане дане такого типу. Звертання до елементу масиву виконується по його номеру (індексу) таким чином:
ім’я_масиву [ індекс_елемента ]
де індекс елемента може бути довільним виразом, який має значення цілого типу і задає порядковий номер елемента в масиві (нумерація починається з нуля). Компілятор не контролює відповідність значень індексів до розміру масиву. Некоректні звертання до елементів масиву можуть призвести до аварійного завершення роботи програми або краху системи. Заповнити масив з 100 елементів цілими випадковими числами в діапазоні від 0 до 1000. Знайти найбільший елемент масиву і середнє значення елементів масиву.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); const int NUM = 100; // кількість елементів масиву const int MIN = 0; // мінімальне значення елементів масиву const int MAX = 1000;// максимальне значення елементів масиву int a[NUM], i, m; double avg; for (i = 0; i < NUM; ++i) a[i] = MIN + rand() % MAX; for (i = 0, m = 0, avg = 0; i < NUM; ++i) { avg += a[i]; if (a[i] > m) m = a[i]; } avg /= NUM; cout << "avg = " << avg << endl; cout << "max = " << m << endl; }
Заповнити масив з 10 елементів цілими випадковими числами від -10 до 10. Вивести на екран спочатку додатні елементи масиву, потім – від’ємні. Замінити від’ємні елементи масиву на їх модулі.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); const int NUM = 10; const int MIN = -10; const int MAX = 10; int a[NUM], i; for (i = 0; i < NUM; ++i) a[i] = MIN + rand() % (MAX - MIN); for (i = 0; i < NUM; ++i) if (a[i] >= 0) cout << a[i] << " "; for (i = 0; i < NUM; ++i) if (a[i] < 0) { cout << a[i] << " "; a[i] = -a[i]; } cout << endl; for (i = 0; i < NUM; ++i) cout << a[i] << " "; }
Знайти кількість елементів масиву (у відсотках), більших середнього арифметичного. Масив заповнимо дійсними випадковими числами від 0 до 1.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time (NULL))); const int NUM = 1000; double a[ NUM ], avg; int i, n; for (i = 0, avg = 0; i < NUM; ++i) { a[ i ] = (rand() % 1000) / 1000.; avg += a[ i ]; } avg /= NUM; cout << avg << endl; for (i = 0, n = 0; i < NUM; ++i) if (a[ i ] > avg) n++; cout << (double) n / NUM * 100 << endl; }
Поміняти місцями максимальний і мінімальний елементи масиву.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); const int N = 10; int a[ N ], min, max, i, t; for (i = 0, min = 0, max = 0; i < N; ++i) { a[ i ] = rand() % 10; if (a[ i ] > max) max = i; if (a[ i ] < min) min = i; cout << a[i] << " "; } cout << endl; t = a[ min ]; a[ min ] = a[ max ]; a[ max ] = t; for (i = 0; i < N; ++i) cout << a[i] << " "; cout << endl; }
Є послідовність цілих випадкових чисел в діапазоні від 0 до 9. Знайти кількість кожного з чисел, тобто кількість нулів, одиниць, двійок і так далі, в цьому масиві.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); const int N = 1000; // кількість чисел int a[ 10 ] = { }, i; for (i = 0; i < N; ++i) a[ rand() % 10 ] ++; for (i = 0; i < 10; ++i) cout << i << " " << a[i] << endl; }
В математиці, многочленом чи поліномом однієї змінної називається вираз вигляду
де сі є сталими коефіцієнтами (константами), а х – змінна.
Сума многочленів є многочленом. Степінь суми многочленів дорівнює максимуму степенів доданків:
Знайти значення полінома для довільного х і суму двох поліномів.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); const int NMAX = 100; double p1[ NMAX ] = { 1, 2, 3 }; double p2[ NMAX ] = { 2, 3, 4, 5, 6 }; double p3[ NMAX ] = { }; int np1 = 3; int np2 = 5; int np3, i; double x, s; x = 1.1; for (i = 0, s = 0; i < np1; i++) s += p1[ i ] * pow(x, (double) i); cout << s << endl; for (i = 0, s = 0; i < np2; i++) s += p2[ i ] * pow(x, (double) i); cout << s << endl; np3 = np1 > np2? np1: np2; for (i = 0; i < np3; i++) { p3[ i ] = p1[ i ] + p2[ i ]; cout << p3[ i ] << " "; } for (i = 0, s = 0; i < np3; i++) s += p3[ i ] * pow(x, (double) i); cout << endl << s << endl; }
Вивести на екран таку послідовність чисел: 1 1 2 1 2 3 1 2 3 4
#include <iostream> using namespace std; int main() { int i, j, n; cin >> n; // кількість рядків for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) cout << j << " "; cout << endl; } } Багатовимірні масиви Мова С++ інтерпретує багатовимірний масив як масив масивів, тобто масив, елементами якого є масиви меншої вимірності. Матриця цілих чисел, яку оголошено таким чином:
int matr[ 10 ][ 5 ];
є масивом з десяти елементів, кожен з яких, в свою чергу, є одновимірним масивом з п’яти елементів, що мають цілий тип. Тобто, матриця складається з десяти рядків, в кожному з яких п’ять цілочислових елементів. Для збереження цієї матриці в оперативній пам'яті буде виділено неперервну ділянку пам'яті обсягом 10 * 5 * sizeof(int) байтів. При цьому спочатку в пам'яті розташований перший рядок, після нього – другий, і так далі. В оголошеннях багатовимірних масивів в окремих квадратних дужках вказується кількість елементів для кожного з вимірів. Багатовимірні масиви можна ініціалізувати в оголошеннях. Наприклад
#include <iostream> using namespace std; int main() { int i, j, a[ 2 ][ 3 ] = { 1, 2, 3, 4, 5, 6 }; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) cout << a[ i ][ j ] << " "; cout << endl; } }
В оголошеннях з ініціалізацією для багатовимірних масивів дозволено опускати розмірність найстаршого виміру. Оголошення масиву з попереднього прикладу можна записати так:
int a[ ][ 3 ] = { 1, 2, 3, 4, 5, 6 };
Кількість рядків матриці обчислюється як частка від ділення кількості даних у списку ініціалізації на відому кількість елементів в одному рядку матриці. Ще один варіант виконання ініціалізації – використання такої додаткових фігурних дужок для виділення рядків даних. Як і для одновимірних масивів, ініціалізація може бути не повною. Елементам масиву без ініціалі заторів будуть присвоєні нульові значення.
int a[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; int b[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };
Для доступу до елементів багатовимірного масиву за допомогою індексної форми звертання в окремих квадратних дужках вказують значення індексів для кожного з вимірів. Знайдемо суму елементів в кожному з рядків матриці і кожному стовпчику матриці, заповненої випадковими числами.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); const int NROWS = 3; // кількість рядків const int NCOLS = 4; // кількість стовпчиків int a[ NROWS ][ NCOLS ]; int i, j, s; for (i = 0; i < NROWS; i++) { for (j = 0; j < NCOLS; j++) { a[ i ][ j ] = rand() % 10; cout << a[ i ][ j ] << " "; } cout << endl; } // Сума елементів в кожному рядку for (i = 0; i < NROWS; i++) { for (j = 0, s = 0; j < NCOLS; j++) s += a[ i ][ j ]; cout << "Row # " << i << ": " << s << endl; } // Сума елементів в кожному стовпчику for (i = 0; i < NCOLS; i++) { for (j = 0, s = 0; j < NROWS; j++) s += a[ j ][ i ]; cout << "Col # " << i << ": " << s << endl; } }
В кінотеатрі 15 рядів по 12 крісел. Ряди поділені на 3 сектора: місця у 1 – 5 рядах коштують 10 гривень, 6 – 14 рядах – 20 гривень, 15 ряді – 100 гривень. Імовірність продати білет на місце в 1 – 5 ряді складає 0,8, на 6 – 14 ряді – 0,4, на 15 ряді – 0,2. Виконати імітаційне моделювання процесу продажу квитків. Знайти загальну вартість проданих квитків і вартість проданих квитків для кожного з секторів.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); const int NROWS = 15; // кількість рядків const int NCOLS = 12; // кількість стовпчиків int a[ NROWS ][ NCOLS ]; int b[ NROWS ] = { 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 100 }; double c[ NROWS ] = { 0.8, 0.8, 0.8, 0.8, 0.8, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2 }; int i, j, s; // Заповнимо кінотеатр глядачами for (i = 0; i < NROWS; i++) { for (j = 0; j < NCOLS; j++) { if (rand() % 10 < c[ i ] * 10) a[ i ][ j ] = 1; else a[ i ][ j ] = 0; cout << a[ i ][ j ] << " "; } cout << endl; } // Знайдемо вартість проданих квитків for (i = 0, s = 0; i < NROWS; i++) for (j = 0; j < NCOLS; j++) s += a[ i ][ j ] * b[ i ]; cout << s << endl; // Вартість проданих квитків по кожному з секторів int sum[ 3 ] = { }; for (i = 0, s = 0; i < NROWS; i++) for (j = 0; j < NCOLS; j++) switch (i) { case 0: case 1: case 2: case 3: case 4: sum[ 0 ] += a[ i ][ j ] * b[ i ]; break; case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: sum[ 1 ] += a[ i ][ j ] * b[ i ]; break; case 14: sum[ 2 ] += a[ i ][ j ] * b[ i ]; break; } for (i = 0; i < 3; i++) cout << i << ": " << sum[ i ] << endl; } Символьні рядки Мова С++ не спеціального типу для оголошення символьних рядків, символьний рядок розглядається як особливий вид масиву символів. Елементи масиву мають тип char, значеннями є коди символів. Останнім символом рядка має бути нуль-символ (‘\0’), код якого дорівнює нулю. При оголошенні рядки можна ініціалізувати рядковими константами (записуються в подвійних лапках), при цьому останній нуль-символ додається автоматично. Якщо розмір масиву не заданий, для нього виділяється на один елемент більше кількості символів в рядку. Додатковий (останній) елемент зберігає нульовий символ – ознаку кінця рядка.
Створимо два рядка символів, виведемо їх на екран, знайдемо кількість символів в них.
#include <iostream> #include <ctime> using namespace std; int main() { srand(unsigned(time(NULL))); char s1[ 20 ] = "Hello s1"; char s2[ ] = "Hello s2"; int i; for (i = 0; s1[ i ]; i++) cout << s1[ i ]; cout << endl; i = 0; while (s2[ i ]) cout << s2[ i++ ]; cout << endl; // Кількість символів в рядку 1 i 2 i = 0; while (s1[ ++i ]); cout << i << endl; i = 0; while (s2[ ++i ]); cout << i << endl; }
Вказівники
|
|||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 165; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.187.103 (0.113 с.) |