Информатика: Методические указания к лабораторным работам № 1-5. Функции. Обработка символьных данных. Организация работы с файлами, страница 6

Если же вам нужны целые случайные числа в диапазоне от 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]. Найти максимальный и минимальный элемент в каждом из массивов.

Вариант 2

Заданы целые массивы Х[5], Y[6]. Найти число нулевых элементов и число отрицательных элементов в каждом из массивов.

Вариант 3

Заданы вещественные массивы G[10],R[8]. Найти число элементов >2 и число элементов  <1 в каждом из массивов.

Вариант 4

Заданы целые массивы C[8],D[12]. Найти сумму положительных элементов и произведение отрицательных элементов в каждом из массивов.

Вариант 5

Заданы массивы E[11],F[14].Найти произведение отрицательных и произведение положительных элементов в каждом из массивов.

Вариант 6

Заданы массивы K[10],M[12].Найти произведение элементов, расположенных после первого отрицательного элемента в каждом из массивов.

Вариант 7

Заданы целые массивы N[8],M[12]. Найти минимальный элемент и сумму элементов, расположенных до него, в каждом из массивов.

Вариант 8

Заданы вещественные массивы T[14],R10[]. Изменить массивы так, чтобы значение каждой ячейки было разностью между предыдущим значением и номером ячейки (например T[i]=T[i]i, где i – номер ячейки массива).

Вариант 9

Заданы целые массивы B1[4][3],B2[3][4]. Найти сумму и произведение минимальных элементов в каждой строке в каждом из массивов.