Если же вам нужны целые случайные числа в диапазоне от 0 до n, то необходимо использовать операции деления по модулю
rand()%(n+1).
Если же нижняя граница диапазона не 0, а m, то предыдущее выражение примет вид:
rand() %(n+1-m)+m.
Например, вам нужно сгенерировать псевдослучайные числа в интервале от –5 до 5, тогда
rand() % (5+1+5) – 5 = rand() %11 - 5.
В этом примере функция rand() генерирует случайные числа от 0 до 10 и после отнятия 5, они преобразуются в случайные числа от –5 до 5.
К сожалению, функция rand генерирует последовательность чисел, хоть и псевдослучайную, но всегда одинаковую, что делает тестирование программы не совсем корректным. Чтобы эту проблему решить, необходимо воспользоваться функцией srand. Ее прототип:
void srand (unsigned int seed);
Задавая разные значения переменной seed, мы и получим разные последовательности от функции rand. А как задать случайные значения переменной seed? Можно использовать функцию time. Эта функция, будучи вызвана с нулевым указателем в качестве параметра, возвращает количество секунд, прошедших с 1 января 1970 года на данный момент.
Значение этой функции мы можем в качестве параметра передать в функцию srand (при этом выполняется неявное приведение типа) и при каждом запуске программы получать разные псевдослучайные последовательности.
Для использования функций rand и srand нужно подключить заголовочный файл <cstdlib>, а для использования time – файл <ctime> (пример 5).
Пример 5
#include<iostream>
#include<cstdlib>
#include<ctime>
#define RND (rand()/double(RAND_MAX))
using namespace std;
int main()
{ setlocale(LC_ALL,"rus_rus.1251");
srand(time(NULL));
cout << "10 целых случайных чисел в интервале от 1 до 100: " <<
endl;
for(int i=0;i<10;i++) cout << rand() % 100 + 1 << " ";
cout << "\n\n10 вещественных случайных чисел в интервале от –5 до
5: " << endl;
for(int i=0;i<10;i++) cout<< RND*10 - 5<<" ";
}
1. Составить программу, состоящую из двух функций. В главной функции с помощью генератора случайных чисел задать два массива указанного типа. Создать функцию, реализующую алго-ритм вашей задачи, и протестировать ее для обоих массивов. Результаты тестирования вывести на экран монитора в главной функции.
2. Решить поставленную задачу при условии, что один из заданных массивов будет иметь тип int, а второй – double, т. е. создать перегруженную функцию, которая и позволила бы реализовать нужный алгоритм для массивов обоих типов. Результаты тести-рования перегруженной функции вывести на экран монитора в главной функции.
Вариант 1
Заданы вещественные массивы A[6] и В[7]. Найти максимальный и минимальный элемент в каждом из массивов.
Заданы целые массивы Х[5], Y[6]. Найти число нулевых элементов и число отрицательных элементов в каждом из массивов.
Заданы вещественные массивы G[10],R[8]. Найти число элементов >2 и число элементов <1 в каждом из массивов.
Заданы целые массивы C[8],D[12]. Найти сумму положительных элементов и произведение отрицательных элементов в каждом из массивов.
Заданы массивы E[11],F[14].Найти произведение отрицательных и произведение положительных элементов в каждом из массивов.
Заданы массивы K[10],M[12].Найти произведение элементов, расположенных после первого отрицательного элемента в каждом из массивов.
Заданы целые массивы N[8],M[12]. Найти минимальный элемент и сумму элементов, расположенных до него, в каждом из массивов.
Заданы вещественные массивы T[14],R10[]. Изменить массивы так, чтобы значение каждой ячейки было разностью между предыдущим значением и номером ячейки (например T[i]=T[i] – i, где i – номер ячейки массива).
Заданы целые массивы B1[4][3],B2[3][4]. Найти сумму и произведение минимальных элементов в каждой строке в каждом из массивов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.