Архив метки: случайное число

Массив разных случайных чисел

С++Задача:

Заполнения массива случайными неповторяющимися элементами числами (язык Си)

Решение:

Алгоритм решения заполнения массива содержит три цикла: в первом цикле выбираем номер заполняемого элемента (переменная i); внутри первого цикла выполняется второй цикл (do…while), который будет выполняться еще раз, если потребуется повтор; внутри цикла (do…while) выполняются еще три действия: вычисляется значение нового элемента, переменной x задается значение «не повторять» и запускается третий цикл – сравнения вычисленного значения со всеми предыдущими (цикл for по переменной j).

Листинг решения:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#define N 20 //количество элементов в массиве
#define Povtor 1 //есть ли повторения

inline void rus() // Русификация вывода в консольное окно
{
setlocale( LC_CTYPE, ".1251" );
setlocale( LC_MONETARY, ".1251" );
}
void randomize()
{
srand(time(0));
}

unsigned int random(int range)
{
return (rand() % range);
}

int main()
{
char c[N];
int i, j, x,range;

rus();
randomize();
printf("Заполнение одномерного массива символами \n");
printf("в случайном порядке. Символы не должны повторяться. \n");
printf("Коды символов расположены в диапазоне от 33 до 90.\n");

range = 90-33+1;
*c=random(range) + 33; // Первый элемент

for (i=1;i<N; i++) // Цикл заполнения элементов,
{ // i – номер очередного элемента
do
{
*(c+i)=random(range) + 33; // Новое значение
x = !Povtor; // Считаем, что повтор поиска не нужен
for(j=0; j<i; j++) // Цикл сравнения со всеми предыдущими
if (*(c+i)==*(c+j))
{
x = Povtor; // Элементы совпали, надо повторить поиск
break;
}
}
while (x==Povtor);
}
// Вывод одномерного массива символов
printf("Распечатка массива \n");
for (i=1; i<N; i++) //заметьте еще раз, проверяется условие i<N
printf("%c",(*(c+i)));
return 0;
}

Можно также реализовать функцию, проверяющая повторился ли элемент y в массиве x или нет, к примеру может иметь следующий вид (считаем, что количество элементов в массиве x равно n).

Листинг примера функции для поиска повторяющегося элемента

int povtor(int *x, int n, int y)
{ int Povtor, i;
Povtor = 0;
for (i=0;i<n;i++) {if (x[i]==y) Povtor=1;}
return Povtor;
}

Генерация случайного числа в С++

Генерация случайного числа

С++

Для генерации случайных чисел используется стандартная функция, которая генерирует случайные числа в С  — rand() ;

// Инициализация генератора случайных чисел
    srand(time(0));
//Генерация случайного числа диапазон от 0 до 10;
int r;
r = rand() % 10;

Для получения отрицательных случайных чисел, например от -10 до 10, можно использовать вот такой код

// Генератор случайного числа в диапазоне от -10 до 10
    r= rand()%20 - 10 ;

Для получения любого диапазона  случайных чисел A до B, можно использовать вот такой код

// Генератор случайного числа в диапазоне от A до B
    r= rand()%(B-A) - A ;