Написати функції:
Використовуючи ці функції написати таку програму:
Результат роботи

Код програми з функціями
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
// Прототипи функцій
void RandVect(vector<int>& v, int n, int a, int b); // Заповнення вектора
void PrintVect(vector<int> v); // Виведення вектора
int FindFirst(vector<int> v); // Пошук першого елемента, що задовольняє умову
int main() {
srand(time(0)); // Ініціалізація генератора випадкових чисел
// Введення параметрів
int a, b, n;
cout << "Введіть межі діапазону (a b) та кількість елементів (n): ";
cin >> a >> b >> n;
vector<int> vect; // Оголошення вектора
RandVect(vect, n, a, b); // Заповнення вектора
PrintVect(vect); // Виведення вектора
int ind = FindFirst(vect); // Пошук елемента
if (ind == -1) {
cout << "Error: елемент не знайдено";
} else {
cout << "Значення: " << vect[ind] << ", Індекс: " << ind;
}
return 0;
}
// Функція заповнення вектора випадковими числами
void RandVect(vector<int>& v, int n, int a, int b) {
v.resize(n); // Встановлення розміру вектора
for (int i = 0; i < n; i++) {
v[i] = a + rand() % (b - a + 1); // Генерація випадкового числа
}
}
// Функція виведення вектора
void PrintVect(vector<int> v) {
cout << "Вектор: ";
for (int num : v) {
cout << num << " ";
}
cout << endl;
}
// Функція пошуку першого елемента, що задовольняє умову (приклад - перший додатній)
int FindFirst(vector<int> v) {
for (int i = 0; i < v.size(); i++) {
if (v[i] > 0) { // Умова для пошуку (у цьому прикладі - перший додатній)
return i;
}
}
return -1; // Якщо елемент не знайдено
}
#include <iostream>
#include <random> // Нова бібліотека для генераторів
#include <vector>
using namespace std;
// Прототипи функцій
void RandVect(vector<int>& v, int n, int a, int b);
void PrintVect(vector<int> v);
int FindFirst(vector<int> v);
int main() {
// Введення параметрів
int a, b, n;
cout << "Введіть межі діапазону (a b) та кількість елементів (n): ";
cin >> a >> b >> n;
vector<int> vect;
RandVect(vect, n, a, b);
PrintVect(vect);
int ind = FindFirst(vect);
if (ind == -1) {
cout << "Error: елемент не знайдено";
} else {
cout << "Значення: " << vect[ind] << ", Індекс: " << ind;
}
return 0;
}
void RandVect(vector<int>& v, int n, int a, int b) {
random_device rd; // Джерело ентропії
mt19937 gen(rd()); // Генератор Mersenne Twister
uniform_int_distribution<int> dist(a, b); // Рівномірний розподіл
v.resize(n);
for (int i = 0; i < n; i++) {
v[i] = dist(gen); // Генерація випадкового числа
}
}
// Інші функції залишаються без змін
void PrintVect(vector<int> v) {
cout << "Вектор: ";
for (int num : v) {
cout << num << " ";
}
cout << endl;
}
int FindFirst(vector<int> v) {
for (int i = 0; i < v.size(); i++) {
if (v[i] > 0) {
return i;
}
}
return -1;
}
| Критерій | rand() | Mersenne Twister (mt19937) |
|---|---|---|
| Якість випадковості | Низька, передбачувані послідовності | Висока, дуже хороша статистична якість |
| Період | ~32,000 чисел | 219937-1 (дуже великий) |
| Швидкість | Швидкий | Трохи повільніший, але все ще швидкий |
| Розподіл | Нерівномірний (потрібна нормалізація) | Ідеально рівномірний з uniform_int_distribution |
| Ініціалізація | srand(time(0)) | random_device + конструктор mt19937 |
| Застосування | Прості задачі, де якість не важлива | Криптографія, симуляції, наукові розрахунки |
Основні переваги Mersenne Twister:
Недоліки: