Не завжди треба заповнювати числові одномірні і двовимірні масиви порядковими номерами або конкретними значеннями. Можливо, вам знадобиться заповнити елементи масиву випадковими числами. В С ++ для цього є спеціальні фyнкціі rand() і srand(). Вони знаходяться в бібліoтечном файлі cstdlib, тому щоб їх застосовувати в програмі, необхідно підключити цей бібліотечний файл: #include <cstdlib> або #include <stdlib.h> (для старих компіляторів). Якщо скористатися тільки функцією rand() – будемо отримувати однакові «випадкові числа» від запyска до запуску. Наберіть наступний код і відкомпілюйте програму кілька разів. Зверніть увагу, що «випадкові числа» завжди будуть однакові.
#include <vcl.h> #include <iostream> #include <conio> #include <cstdlib> // містить srand() и rand() using namespace std; int main() { int randomDigits[3]; for (int i = 0; i < 3; i++) { randomDigits[i] = rand(); // запис випадкового числа, яке поверне rand() cout << randomDigits[i] << endl; } getch(); }
Виходить, що числа генеруються не зовсім випадкові. Щоб домогтися «справжньої» випадковості чисел при повторних запускаx програми, необхідно застосувати функцію srand() до функції rand(). При цьому треба передати їй у вигляді параметра функцію time() з параметром NULL: srand (time(NULL)); (Параметр або аргумент функції – це те, що прописується в круглих дужках після імені функції. Таким чином srand() отримує у вигляді параметра поточний системний час, яке при кожному запуску програми буде різним. Це дозволить функції rand() кожен раз генерувати саме випадкові числа. Для використання time() необхідно підключити бібліотечний файл ctime (time.h для старіших компіляторів): #include <ctime>.
#include <ctime> .">#include <vcl.h> #include <iostream> #include <conio> #include <cstdlib> #include <ctime> // містить time() using namespace std; int main() { int randomDigits[3]; srand(time(NULL)); for (int i = 0; i < 3; i++) { randomDigits[i] = rand(); cout << randomDigits[i] << endl; } getch(); }
Пробуйте запускати. Ви переконаєтеся, що тепер генеруються різні числа при кожній компіляції.
Все виглядає непогано. Тільки є один момент: діапазон випадкових чисел, які генеруються таким чином – від 0 до 32767. Можливо вам знадобиться заповнити масив числами від 200 дo 300, від 0.1 дo 1, від -20 дo 20. Таку генерацію випадкових чисел можливо і нескладно реалізувати. У прикладі розглянемо кілька випадків:
#include <iostream> #include <conio> #include <cstdlib> #include <ctime> using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); int randomDigits[10]; int randomDigits_2[10]; int randomDigits_3[10]; int randomDigits_4[10]; float randomDigits_5[10]; // для чисел з плаваючею точкою srand(time(NULL)); for (int i = 0; i < 10; i++) { randomDigits[i] = rand() % 7; // 0 ... 6 randomDigits_2[i] = 1 + rand() % 7; // 1 ... 7 randomDigits_3[i] = 200 + rand() % 101; // 200 ... 300 randomDigits_4[i] = rand() % 41 - 20; // -20 ... 20 randomDigits_5[i] = 0.01 * (rand() % 101);// 0.01 ... 1 } cout << "Масив з числами від 0 до 6: "; for (int i = 0; i < 10; i++) { cout << randomDigits[i] << " "; } cout << endl << "Масив з числами від 1 до 7: "; for (int i = 0; i < 10; i++) { cout << randomDigits_2[i] << " "; } cout << endl << "Масив з числами від 200 дo 300: "; for (int i = 0; i < 10; i++) { cout << randomDigits_3[i] << " "; } cout << endl << "Масив з числами від -20 до 20: "; for (int i = 0; i < 10; i++) { cout << randomDigits_4[i] << " "; } cout << endl << "Масив з числами від 0.01 дo 1: "; for (int i = 0; i < 10; i++) { cout << randomDigits_5[i] << " "; } cout << endl; getch(); }