Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Excel Генератор случайных ответов на анкету Добавлено: 17.03.10 00:31  

Автор вопроса:  AnsFinder
Здравствуйте, мне нужно написать на VBA в Excel генератор случайных ответов на вопросы анкеты. Количество ответов в разных вопросах разное(от 2 до 8). Сложность в том, что надо сделать так, чтобы я мог сам приблизительно регулировать количество человек определенно ответивших на вопрос.
 Например, вопрос:
С кем Вы отдыхаете?!
1. С семьей
2. С друзьями
3. Один
4. С коллегами по работе
5. Другое
 Нужно чтобы вариант 1 отметило примерно 60% человек и допустим поровну с остальными. Отпишитесь, пожалуйста, у кого какие мысли

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #1 Добавлено: 17.03.10 18:52
такой принцип подойдет?
  1.  
  2. КоличествоВопросов = 5
  3. Вероятность = 7 ' чем больше число, тем больше вероятность ответа на 1 вопрос
  4.  
  5. Randomize
  6. СлучайноеЧисло = Int((КоличествоВопросов + Вероятность) * Rnd)
  7.  
  8. If СлучайноеЧисло <= Вероятность Then
  9.   НомерОтвета = 1
  10. Else
  11.   НомерОтвета = СлучайноеЧисло - Вероятность
  12. End If
  13.  
  14. MsgBox НомерОтвета

Ответить

Номер ответа: 2
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #2 Добавлено: 17.03.10 19:19
еще можно так
  1.  
  2. КоличествоВопросов = 5
  3.  
  4. Randomize
  5. СлучайноеЧисло = Int((1000) * Rnd)
  6.  
  7. If СлучайноеЧисло < 100 Then
  8.   НомерОтвета = 2
  9. Else
  10.   Randomize
  11.   СлучайноеЧисло = Int(((КоличествоВопросов) * Rnd) + 1)
  12.   НомерОтвета = СлучайноеЧисло
  13. End If
  14.  
  15. MsgBox НомерОтвета

Ответить

Номер ответа: 3
Автор ответа:
 AnsFinder



Вопросов: 1
Ответов: 5
 Профиль | | #3 Добавлено: 17.03.10 22:29
Да, как варианты очень даже подойдут. Второй мне больше нравится, потому что в первом точно не поймешь какая же вероятность на выбранный вариант падет, ясно только что больше чем у других, и что чем переменная больше, то тем больше вероятность. Буду благодарен, если кто-нибудь предложит ещё пару своих вариантов.

Ответить

Номер ответа: 4
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #4 Добавлено: 17.03.10 23:15
можно немножко изменить код

заменить это
  1.  
  2. If СлучайноеЧисло < 100 Then



на это
  1.  
  2. If СлучайноеЧисло < Int(60 * КоличествоВопросов) Then

Ответить

Номер ответа: 5
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #5 Добавлено: 17.03.10 23:21
хотя, помойму я напутал со знаком! заместо "<" нужен ">"

Ответить

Номер ответа: 6
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #6 Добавлено: 17.03.10 23:22
а может и нет... )))

Ответить

Номер ответа: 7
Автор ответа:
 AnsFinder



Вопросов: 1
Ответов: 5
 Профиль | | #7 Добавлено: 17.03.10 23:47
да хоть меньше хоть больше, там важна величина интервала, она и будет самой вероятностью, вернее некоторым бонусом к вероятности. А вот это вот зачем?
  1. If СлучайноеЧисло < Int(60 * КоличествоВопросов) Then

Так то вроде всё равно) как задашь так задашь. Лучше даже чтобы цифра была чтоб понятней было)

Ответить

Номер ответа: 8
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #8 Добавлено: 17.03.10 23:56
этой строчкой задается процентное соотношение от количества вопросов
т.е. в данном случае если СлучайноеЧисло < 60% от кол-ва вопросов тогда...

Ответить

Номер ответа: 9
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #9 Добавлено: 17.03.10 23:58
а вот если если СлучайноеЧисло ">" 60% от кол-ва вопросов тогда
тогда это уже 40% от кол-ва )

Ответить

Номер ответа: 10
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #10 Добавлено: 17.03.10 23:59
короче если знак переставлять то и соотношение вероятности тоже изменятся

Ответить

Номер ответа: 11
Автор ответа:
 AnsFinder



Вопросов: 1
Ответов: 5
 Профиль | | #11 Добавлено: 18.03.10 01:47
Ну смотрите, СлучайноеЧисло находится в интервале от 0 до 1000
  1.  
  2. If СлучайноеЧисло < Int(60 * КоличествоВопросов) Then


Допустим количество вопросов 2, тогда условие СлучайноеЧисло < 120. То есть вероятность ответа 2 12% + возможное выпадание числа 2 если СлучайноеЧисло > 120(там поровну вероятность между 1 и 2 вариантами ответов. ((1000-120)/2)/1000 = 44%, итого 44% + 12% = 56%. При увеличении количества вопросов увеличится прирост вероятности на 2 вариант. По-моему это столько путаницы наведет, по мне лучше вместо (60 * КоличествоВопросов) кокретное число задавать. И не могу понять где вы там 60% увидели

Ответить

Номер ответа: 12
Автор ответа:
 AnsFinder



Вопросов: 1
Ответов: 5
 Профиль | | #12 Добавлено: 18.03.10 01:49
и лучше сделать:
  1.  
  2. СлучайноеЧисло = Int(((КоличествоВопросов - 1) * Rnd) + 1)

Ответить

Номер ответа: 13
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #13 Добавлено: 18.03.10 02:08
так, вот формула получения случайного числа из диапазона
  1.  
  2. iRandomNumber = Int((iMax - iMin + 1) * Rnd + iMin)


так что я не совсем понял зачем "КоличествоВопросов - 1) * Rnd) + 1"

а по поводу подсчета ";((1000-120)/2)/1000 = 44%, итого 44% + 12% = 56%"
так вообще... чувство что вот-вот налоговая заявится )

Ответить

Номер ответа: 14
Автор ответа:
 AnsFinder



Вопросов: 1
Ответов: 5
 Профиль | | #14 Добавлено: 18.03.10 12:46
Потому что, если оставить так
  1.  
  2. СлучайноеЧисло = Int(((КоличествоВопросов) * Rnd) + 1)


То при количестве вопросов n, случайное число будет в интервале от 1 до n+1, а варианта n+1 нету, то есть например количество вопросов 2, случайно число от 1 до 3 получится, а надо от 1 до 2, поэтому там "-1"

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам