Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2015, 10:02   #1
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию Функция rand()

Объясните пожалуйста как работает функция rand(). Допустим нужно найти кол-во элементов равное 0 в динамическом массиве который состоит из вещ-ых чисел. Вот код этой программы, который работает вроде правильно, но я не понимаю в каком интервале генерируются числа. Как будет выглядеть функция допустим от -10 до 10.
Код:
#include <stdio.h>  
#include <time.h>  
#include <conio.h>  
#include <stdlib.h>     
#include <locale.h>   
int main(void) 
{
  setlocale(LC_ALL, "rus");  
  srand(time(0)); 
  int n,k;
  float *max,*p; 
  p = (float * )malloc(100*sizeof(float)); //выделяем память для массива
  if (!p)              //проверка выделилась ли память
  {
	  printf("Память исчерпана.\n");
	  exit(1);
  }
  printf("Введите размерность массива: ");
  scanf("%i",&n);			//ввод размера массива
    for (int i = 0; i<n; i++)		//цикл от 0 до введенного значения n
  {
	  *(p+i) = (float)rand()/100;	//заполнение элементов массива "случайными" числами
	  printf("%9.2f ",*(p+i)); //одновременно с заполнением вывод их на экран
  }
	k=0;
    for (int i = 0; i<n; i++)
  {
	  if (*(p+i)==0) //проверка условия..  
		  k++; 
  }
  printf("\n");     //один отступ вниз
  printf("Кол-во элементов равных нулю: %d \n",k); //вывод значения 
  free(p);	//освобождение памяти
  getch();
}
axel__ вне форума Ответить с цитированием
Старый 09.06.2015, 10:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

rand() дает случайное число между 0 и RAND_MAX (http://www.cplusplus.com/reference/cstdlib/RAND_MAX/).
Деление на 100 дает диапазон [0, 327.62]
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2015, 11:22   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,390
По умолчанию

rand() * 100 / RAND_MAX
Вроде так будет в диапазоне от 0 до 100
waleri вне форума Ответить с цитированием
Старый 09.06.2015, 12:59   #4
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
rand() * 100 / RAND_MAX
Вроде так будет в диапазоне от 0 до 100
Но мне нужно чтобы были именно вещественные числа
axel__ вне форума Ответить с цитированием
Старый 09.06.2015, 13:03   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

зачем ты поключил это ?

#include <time.h>
RAFA91 вне форума Ответить с цитированием
Старый 09.06.2015, 13:05   #6
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
зачем ты поключил это ?

#include <time.h>
Чтобы работала функция srand(time(0)); Если ее не будет, будут выдаваться одни и те же значения
axel__ вне форума Ответить с цитированием
Старый 09.06.2015, 13:07   #7
axel__
Пользователь
 
Регистрация: 23.05.2015
Сообщений: 15
По умолчанию

Код:
(float)rand() * 100 / RAND_MAX;
Вот так правильно работает, но как сделать чтоб в диапазон попадал 0 ?
axel__ вне форума Ответить с цитированием
Старый 09.06.2015, 14:44   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,390
По умолчанию

Вычесть из результата разнинцу между нулем и нижней границей.
waleri вне форума Ответить с цитированием
Старый 15.06.2015, 17:50   #9
Иван Перов
Новичок
Джуниор
 
Регистрация: 15.06.2015
Сообщений: 12
По умолчанию

rand()%100;
вот так от 0 и до 99
Иван Перов вне форума Ответить с цитированием
Старый 15.06.2015, 19:08   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,390
По умолчанию

Цитата:
Сообщение от Иван Перов Посмотреть сообщение
rand()%100;
вот так от 0 и до 99
Угу, только распределение не будет равномерным, кроме как для случая, когда искомый диапазон кратен MAX_RAND
waleri вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция rand() goluzov Общие вопросы C/C++ 11 05.02.2013 08:41
Функция rand Mehanizator Помощь студентам 2 13.08.2011 13:02
функция генерации случайных чисел rand() в main pufystyj Общие вопросы C/C++ 4 08.02.2011 21:09
rand в c++, Якъ Помощь студентам 3 11.11.2010 17:05
rand() ????? Revenholm Общие вопросы C/C++ 7 25.04.2009 17:47