Что нового

[Математика] Программа, работающая с формулой вероятности

Sashqa

Новичок
Сообщения
4
Репутация
0
AutoIt: 3.3.8.1
Версия: 1.0

Категория: Математика

Описание: Совсем простой скрипт, работающий с основной формулой вероятности (P=m/n)

Код/Пример:
Код:
MsgBox(0, 'Орел-Решка', 'Нажми OK, чтобы выбрать правильное решение')
$n = InputBox("Орел-Решка", "Введите количество благоприятных событий")
$m = InputBox("Орел-Решка", "Введите общее количество событий")
$P = $n / $m
If $n < 0 Then
   MsgBox(0, "Орел-Решка", "Событие не может быть отрицательным")
    Exit
ElseIf $m < 0 Then
	MsgBox(0, "Орел-Решка", "Событие не может быть отрицательным")
   Exit
ElseIf $P > 1 Then
	MsgBox(0, "Орел-Решка", " Вероятность события не может превышать еденицу.")
	Exit
Else
MsgBox(64, "Орел-Решка", "P = " & $P)
Exit
Endif

Источник: autoit-script.ru
Автор(ы): Sashqa


Занялся изучением AutoIT вчера и до него практика была только на Pascal ABC и VB и та мизерная. Так вот, чтобы описать три условия мне понадобилось использовать 3 if, в то время как в паскале можно обойтись одним через союз and. Можно ли это реализовать и здесь? Если можно, то разъясните как, пожалуйста.
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Sashqa
Описание if - ссылка

Так вот, чтобы описать три условия мне понадобилось использовать 3 if, в то время как в паскале можно обойтись одним через союз and
Простой вопрос, условие подразумевает 2 варианта ответа, Да или Нет, как вы можете одним условием вызвать 4 ответа? Ещё - такое понятие как семантика вам знакомо? Это подразумевает способ записи при одной и той же логической конструкции. Просто я не увидел у вас 3 if, есть три условия для которых требуется выбрать ответ. Это просто конструкция такая, кстати в Си такая же, только записывается немного по другому. Ещё есть Select, делает тоже самое, но пишется по другому.

Код:
If $n < 0 Or $m < 0 Or $P > 1 Then
    MsgBox(0, "Орел-Решка", "Входные данные не верны.")
Else
	MsgBox(64, "Орел-Решка", "P = " & $P)
Endif
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
От предыдущего события вероятность не изменяется ;).
Т.е событию (допустим это монета) всё равно что было в прошлом, оно его не знает и не запоминает :smile:, поэтому вероятность всегда будет 50/50.

Sashqa [?]
чтобы описать три условия мне понадобилось использовать 3 if, в то время как в паскале можно обойтись одним через союз and. Можно ли это реализовать и здесь?
Код:
If ($n < 0 And MsgBox(0, "Орел-Решка", "Событие не может быть отрицательным")) Or ($m < 0 And MsgBox(0, "Орел-Решка", "Событие не может быть отрицательным")) Or ($P > 1 And MsgBox(0, "Орел-Решка", " Вероятность события не может превышать еденицу.")) Then
	Exit
Else
	MsgBox(64, "Орел-Решка", "P = " & $P)
	Exit
EndIf
 
Автор
S

Sashqa

Новичок
Сообщения
4
Репутация
0
Спасибо за пояснения, я пробовал писать условия, как это сделал AZJIO, но тогда у меня одно из условий вылетало, к примеру n ввожу >0, а m<0, то программа ошибку не выдавала и считала вероятность (вполне возможно, что я где-то накасячил :smile:).
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Sashqa
вполне возможно, что я где-то накасячил
нет, это я вместо Or написал And. Ещё надо добавить StringIsDigit (проверка что цифры) и проверку @error после InputBox.
 
Автор
S

Sashqa

Новичок
Сообщения
4
Репутация
0
Спасибо за подсказки, оптимизировал код.

и проверку @error после InputBox.
А зачем сюда нужно вставлять еще и @error? Если не трудно объясните. Читал справку и статью AZJIO, но так и не понял.

Код:
MsgBox(0, 'Орел-Решка', 'Нажми OK, чтобы ввести данные')
$n = InputBox("Орел-Решка", "Введите количество благоприятных событий")
$m = InputBox("Орел-Решка", "Введите общее количество событий")
$P = $n / $m
If ($n < 0) or ($m < 0) or ($P > 1) or StringIsDigit("0") or not StringIsDigit("string") Then
   MsgBox(0, "Орел-Решка", "Введены недопустимые данные")
    Exit
Else
MsgBox(64, "Орел-Решка", "P = " & $P)
Exit
Endif
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Sashqa
Первая строка принуждает лишний раз кликать на кнопку, этот текст с тем же успехом можно написать в InputBox. Если пользователь отказался иметь дело с игрушкой, нажав "Отмена", то надо делать выход, а не задавать кучу очередных вопросов с радостным предупреждением что вы нашли ошибку в данных. Кроме того параметры InputBox могут принудительно не продолжать если указанное количество символов не введено, то есть либо вводи, либо жми отмену иначе ОК не нажимается. Кстати пустая строка интерпретируется как 0.
Вместо
Код:
StringIsDigit("0")

можно смело писать 1, так как 0 это цифра и функция всегда будет возвращать 1
 
Верх