Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 228; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.115 (0.008 с.) |