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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неслучайный выбор ячейки из массива 
:(
    Опции темы
SlaUr
Дата 18.1.2007, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



Здраствуйте,Форумчане.

У меня есть проблема есть массив [1..9,1..9] в этом массиве будут хранится числа скажем от -100 до +100 (это не важно) и мне нужно выбрать из этого массива ячейку так , чтобы чем число в ячейке меньше тем была бы более вероятность выборки этой ячейки,но все равно нужно чтобы ячейки выбирались случайным образом.Все дело в вероятности выборки ячейки массива.Вероятность выборки даже самого большого числа тоже должна быть(но меньше).
И еще бы иметь возможность менять вероятность (ну это наверное вообще невозможно :-)  )
Вообще-то это наверное из области математики но вышку я изучал давно и все позабыл :-(.


Существует ли какой-нибудь готовый метод или подскажите более подходящий  алгоритм .
 Пока на ум ничего стоящего не приходит.Заранее спасибо.


p.s. Хочу для приемной дочери сделать программу для зубрежки таблицы умножения (14 лет а таблицу умножения не знает - всегда под рукой калькулятор )



Это сообщение отредактировал(а) SlaUr - 18.1.2007, 02:27
PM MAIL   Вверх
VaiMR
Дата 18.1.2007, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.11.2006

Репутация: нет
Всего: 2



А как расположены числа в массиве?
Если по порядку то все это реализовать достаточно просто, а если рандомно, то алгоритма (мне кажется) существовать даже не может.
PM MAIL ICQ   Вверх
Yanis
Дата 18.1.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(SlaUr @  18.1.2007,  03:03 Найти цитируемый пост)
14 лет а таблицу умножения не знает - всегда под рукой калькулятор

smile

Добавлено @ 09:55 
SlaUr
А просто псевдослучайные числа не подходят разве? Всё ж зубрёжка smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
SlaUr
Дата 18.1.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



Обьясняю подробнее 
В этот массив заносится количество правильных ответов (+1 за правильный и -1 за неправильный)
Массив это и есть таблица умножения где хранятся результаты ответов.И по моему неправильные ответы долбить нужно чаще чем правильные (разве это не так?)
Решение я уже где то насчупываю но еще пока нет времени хорошенько подумать.  


зы Не понял что значит псевдослучайные числа.

Это сообщение отредактировал(а) SlaUr - 18.1.2007, 10:02
PM MAIL   Вверх
CatATonik
Дата 18.1.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 12.1.2007
Где: Москва

Репутация: 6
Всего: 8



С математикой тоже бедаsmile но можно такой вариант:
Создаешь список элементов массива вида 
TItem = record
  Value: Integer;
  Row: Integer;
  Col: Integer;
end;

Сортируешь по значению (Value).

Делишь список длиной L на N частей, например 10.

Дальше пишешь:

Код

Idx := 0;
N := 10;
for I := 1 to N do
begin
  Idx := Idx + Random((List.Count div N) * I);
end;
Idx := Idx div N;


По моему получится то что нужно.




Это сообщение отредактировал(а) CatATonik - 18.1.2007, 10:03
PM MAIL   Вверх
SlaUr
Дата 18.1.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



CatATonik, пока ничего не понял(алгоритм) будет время обдумаю ваше предложение
PM MAIL   Вверх
CatATonik
Дата 18.1.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 12.1.2007
Где: Москва

Репутация: 6
Всего: 8



Не я бред написал, предложение снимается. Сорри.

Это сообщение отредактировал(а) CatATonik - 18.1.2007, 10:38
PM MAIL   Вверх
dumb
Дата 18.1.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



можно как-нибудь так(сорри, лениво совсем синтаксис расписывать):
1. i = random(9), j = random(9), k = 0 (кол-во "промахов")
2. считаем средний по всей таблице балл, например -10 smile
3. если k > 5(например), то идем на п.5
4. сравниваем X[i,j] со средним баллом - если выше, то инкремент k и идем на шаг 1.
5. заставляем решать выбранное smile
PM MAIL   Вверх
CatATonik
Дата 18.1.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 12.1.2007
Где: Москва

Репутация: 6
Всего: 8



Во, возвращает случайный результат, где 0 <= GetRandom(Range) <= Range, с соответствющим уменьшением вероятности получить Range:

Код

function GetRandom(Range: Integer): Integer;
var
  I, X, C: Integer;
begin
  C := Random(Range * Range div 2 + Range div 2);
  X := 0;
  I := 0;
  while X < C do
  begin
    Inc(I);
    Inc(X, I);
  end;

  Result := Range - I;
end;




Это сообщение отредактировал(а) CatATonik - 18.1.2007, 12:07
PM MAIL   Вверх
SlaUr
Дата 19.1.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 3
Всего: 5



Придумал я свой алгоритм.
1.Числа в массиве 1-100.(ограничить)
2.Условный ноль - 50
3.Правильный ответ -1 , неправильный +1
4.Подсчитываем общее количество очков допустим получилось 1000
5.Создаем временный динамический одномерный массив на 1000 элементов
в нем (будут хранится координаты нашего изначального массива)
6 .равномерно распределяем наши набранные очки в динамическом массиве
(допустим координаты [5,6] имеет число 60 ,значит в динамическом массиве мы 60 раз 
равномерно заносим эти координаты)
7.Все Random(1000) - это ответ(координаты вопроса).   

Думаю что я нашел верный вариант,или будут возражения?

Это сообщение отредактировал(а) SlaUr - 19.1.2007, 08:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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