Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить "случайные" не повторяющиеся числа 
V
    Опции темы
Matematik
Дата 22.9.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Необходимо сгенерировать не повторяющийся код (тип Integer).
Например кол-во секунд прошедших с 01,01,2000. Если я правильно понял то он будет уникален до 2069 года, то что мне и надо.
Только, не пойму как сделать.  smile 
PM MAIL WWW ICQ   Вверх
volvo877
Дата 22.9.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



Matematik, 
Код
DateUtils.SecondsBetween(const ANow, AThen: TDateTime)

Только это вернет тебе Int64...
PM MAIL   Вверх
Akella
Дата 22.9.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



даю намёк: почитай в справке как использовать Random + randomize
PM MAIL   Вверх
sergejzr
Дата 22.9.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Посмотри, мы тут разрабатывали алгоритм для такого. Правда это на Си и на Яве, но смысл должен быть понятен.

Цитата

Алгоритм:
массив из n чисел (n = max - min)
в случайном порядке находится не число, а индекс в этом массиве от 0 - n. Искомое число - число по этому индексу.
Забрали число, на его место ставим последнее, массив таким образом сокращается на один элемент.

Код

#include "iostream.h"
#include<stdlib.h>
int main()
{  
 int min=10;
 int max=100;
 int interval=max-min;
 int * pool = new int[interval];
 
 for(int i=0;i<interval;i++)pool[i]=i; //инициализация
 interval--;
 for(;interval>0;interval--)
 {
     int ind=rand()%interval; //случайный индекс массива
     cout<<min+pool[ind]<<" "<<endl;
         pool[ind]=pool[interval-1]; //последнее число на место "изъятого"
 }
  return 0;
}


Код

/*
Передаем аргументами два числа (a и b) и функция возвращает в случайном порядке все числа, где:
a<=x>=b
x - натуральное число
*/
public class zahlen {
static int interval;
    public static void main(String[] args) {
        int a=1;
        int b=10;
        b++;b++;
        int[] zufallzahlen_array;
        zufallzahlen_array=zufallzahlen(a,b);
        for(int i=1;i<(b-a);i++)
         {
            System.out.print(zufallzahlen_array[i]+" ");
         }
    }
    
    public static int[] zufallzahlen(int a, int b) {
        interval=b-a;
        int[] pool = new int[interval];
        int[] zufallzahlen_array = new int[interval];
        // Initialisierung
            for (int i=0; i<interval;i++) pool[i]=i;
            interval--;                        
             for(;interval>0;interval--)
             {
                 int ind=(int)(Math.random()*interval); //случайный индекс массива
                 zufallzahlen_array[interval] = a+pool[ind];
//                 System.out.println(a+pool[ind]+" ");
                     pool[ind]=pool[interval-1]; //последнее число на место "изъятого"
             }
             return zufallzahlen_array; 
    }
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Matematik
Дата 22.9.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Цитата(Akella @  22.9.2006,  18:30 Найти цитируемый пост)
даю намёк: почитай в справке как использовать Random + randomize 

Почитал, не понял как оно мне поможет. Где гарантия, что я в течении нескольких десятков лет буду получать не повторяющиеся числа?

Цитата(sergejzr @  22.9.2006,  18:39 Найти цитируемый пост)
Посмотри, мы тут разрабатывали алгоритм для такого. Правда это на Си и на Яве, но смысл должен быть понятен.

Понятно, но тоже не понятно ж). Задам я от 0 до maxint, хорошенький массив получится  int * pool = new int[interval];

2 volvo877
да, это подойдет

Это сообщение отредактировал(а) Matematik - 22.9.2006, 19:51
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.