Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2009, 08:31   #1
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию Проблемы с рендомизацией си

возникают проблемы с рендомизаций помогите пожалуйста
Код:
main()
  {
    int namber1[7],i,k=0,e=36;
    
    for (i=0;i<7;i++)
    {
      srand((unsigned)time(NULL));
      namber1[i]=rand()%(e-k)+1;
      k++;
      printf("%d\n",namber1[i]);
    }
Во общем генерируются одинаковые числа 30 3 26 9 10 10 9 как избавиться от данной проблемы?точнее как ее решить?))

Последний раз редактировалось dampirik; 04.09.2009 в 08:34.
dampirik вне форума Ответить с цитированием
Старый 04.09.2009, 11:43   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Нужно инициализировать счетчик случайных чисел до начала цикла, например так:
Код:
#include <time.h>
main()
  {
    int namber1[7],i,k=0,e=36;
    
    srand(time(0)); //Инициализация счетчика случайных чисел
    for (i=0;i<7;i++)
    {
      namber1[i]=rand()%(e-k)+1;
      k++;
      printf("%d\n",namber1[i]);
    }
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 04.09.2009, 17:04   #3
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
Вопрос

2Blade
Код:
 ./a.out
25
11
25
11
11
22
9
не помогает... я уже и так и сяк уже пробывал... что-то не пойму вообще в чем загвоздка(
dampirik вне форума Ответить с цитированием
Старый 04.09.2009, 17:13   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
Вопрос

Код:
#include <stdio.h>
#include <stdlib.h> 
#include <time.h>  
main()
  {
    srand((unsigned)time);
    int s=rand();
    int namber1[37],i;
    for (i=1;i<37;i++)
      {
        namber1[i]=s%i;
        printf("%s%d%s%d\n","i = ",i,"         namber1 = ",namber1[i]);
      }
  }
Код:
./a.out
i = 1         namber1 = 0
i = 2         namber1 = 0
i = 3         namber1 = 0
i = 4         namber1 = 0
i = 5         namber1 = 2
i = 6         namber1 = 0
i = 7         namber1 = 5
i = 8         namber1 = 0
i = 9         namber1 = 3
i = 10         namber1 = 2
i = 11         namber1 = 5
i = 12         namber1 = 0
i = 13         namber1 = 2
i = 14         namber1 = 12
i = 15         namber1 = 12
i = 16         namber1 = 0
i = 17         namber1 = 10
i = 18         namber1 = 12
i = 19         namber1 = 10
i = 20         namber1 = 12
i = 21         namber1 = 12
i = 22         namber1 = 16
i = 23         namber1 = 18
i = 24         namber1 = 0
i = 25         namber1 = 12
i = 26         namber1 = 2
i = 27         namber1 = 21
i = 28         namber1 = 12
i = 29         namber1 = 19
i = 30         namber1 = 12
i = 31         namber1 = 13
i = 32         namber1 = 16
i = 33         namber1 = 27
i = 34         namber1 = 10
i = 35         namber1 = 12
i = 36         namber1 = 12
Возможно я чтот-о не так понимаю... но как сделать так чтобы сгенерировались в случайно последовательности цифры от 1 до 36 и не было повторов?
или это делается только через условие типо такого?:
Код:
srand(time(0));
s=rand%36;
for(i=0;i<37;i++)
{
for(y=0;y<36;y++)
{
if (namber1[y]!=s)
namber1[i]=s;
}}
dampirik вне форума Ответить с цитированием
Старый 04.09.2009, 17:40   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

чтобы совсем не было повторов, заполните массив цифрами от 1 до 36, а затем перемешайте их. если хотите случайные числа от 1 до 36, то будьте готовы к тому, что иной раз повториться они таки могут) Blade привёл вам работающий код, у меня вывод был таким:
Цитата:
Сообщение от cmd.exe
29
4
5
4
22
25
23
по-моему достаточно неплохо, как для псевдослучайных чисел)
netrino вне форума Ответить с цитированием
Старый 05.09.2009, 01:06   #6
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Хм... а как перемешать можно... что-то подумал пока не чего в голову не пришло...
dampirik вне форума Ответить с цитированием
Старый 05.09.2009, 01:15   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
Хм... а как перемешать можно... что-то подумал пока не чего в голову не пришло...
Генерируете индекс a. Генерируете индекс b. Меняете местами элементы с этими индексами. И так энное количество раз.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с IE xakzona Помощь студентам 1 16.12.2008 21:53
проблемы с задачками..=)) jenia-girl Паскаль, Turbo Pascal, PascalABC.NET 1 27.11.2008 05:30
Проблемы с массивом Шура Помощь студентам 4 20.11.2008 18:06
Проблемы с Graphics32 lexaltd Мультимедиа в Delphi 0 14.11.2008 23:41
Проблемы с ХРюшкой professional2525 Windows 9 20.05.2008 09:15