Другие операции с числами
Int
Функция Int нужна для преобразования из дробного числа в целое. Функция не занимается округлением, она просто отбрасывает всю дробную часть. С другой стороны если преобразуется отрицательное дробное число, то отбрасывая дробную часть, правило возвращаемого значения в большую отрицательную сторону.
Пример:
? Int(2.9) ? Int(5.1) ? Int(-2.1) ? Int(-5.6) Sleep
Возвращаемое значение:
2
5
3
6
Frac
Функция Frac возвращает дробную часть числа.
Пример:
? Frac(2.85) Sleep
Возвращаемое значение: 0.85000000
Fix
Функция Fix возвращает целую часть числа.
Пример:
? Fix(-2.85) Sleep
Возвращаемое значение: -2
Sgn
Функция Sgn возвращает знак числа.
Если значение меньше нуля, то вернет -1
Если значение больше
нуля, то вернет 1
Если значение равно нулю, то
вернет 0
Пример:
? Sgn(-2.5) Sleep
Возвращаемое значение: -1
Log
Функция Log возвращает натуральный логарифм числа.
Пример:
Function LogBaseX(Byval Number As Double, Byval BaseX As Double) As Double LogBaseX = Log( Number ) / Log( BaseX ) End Function Print "The log base 5 of 25 is:"; LogBaseX ( 25 , 5 ) Print "The log base 2 of 16 is:"; LogBaseX ( 16 , 2 ) Sleep
Возвращаемое значение: 2 и 4
Exp
Функция Exp возвращает экспоненту.
Пример:
Dim r As Double Dim p As Double Dim t As Double Dim a As Double Input "Please enter the initial investment (principal amount): "; p Input "Please enter the annual interest rate (as a decimal): "; r Input "Please enter the number of years to invest: "; t a = p * Exp ( r * t ) Print "" Print "After";t;" years, at an interest rate of";_ r * 100; "%, your initial investment of"; p; " would be worth";a Sleep
Abs
Функция Abs возвращает абсолютное значение числа.
Пример:
? Abs(-17) ? Abs(1.567) Sleep
Возвращаемое значение: 17 и 1.567
Rnd , Randomize
А теперь о самой интересной и самой используемой в играх функции RND. Данная
функция генерирует случайное дробное число от 0 до 1. Однако не следует думать,
что чисел может быть только два. Между 0 и 1 дробных чисел великое множество. И
при правильном использовании можно выстроить любой диапазон для генерации чисел.
У функции один необязательный и мало используемый параметр. Если этот параметр
будет равен 0 , то функция возвратит последнее генерируемое этой функцией число.
На самом деле нет ничего случайного в программировании, так же как и в жизни
впрочем. Функция генерирует псевдослучайное число на основе другого числа, путем
хитрых математических операций. Однако если число, на основе которого создается
генерируемое, будет хотя бы очень слабо предсказуемо, для человека оно выглядит
случайным. Лучше всего для числа, на основе которого происходит генерация,
подходит время с его миллисекундами. Именно поэтому желательно перед тем как
запускать генератор RND , нужно установить начальное малопредсказуемое число с
помощью функции Randomize. Эта функция имеет два параметра:
- Начальное число которое будет установлено для генератора RND
- Алгоритм генерации. У каждого языка программирования стараются делать свой алгоритм генерации. FreeBasic может использовать как свой, так и алгоритм cтарой версии FreeBasic , языка Qbasic и языка C .
Для первого параметра Randomize чаще всего используют функцию Timer, возвращающую кол-во времени, прошедшего с момента запуска системы. Используют функцию Randomize один раз , чаще всего в начале кода. Если вы не захотите использовать функцию Randomize, то при каждом запуске программы значения будут одинаковые. Запустите несколько раз каждый из кодов ниже:
Randomize Timer ? Rnd Sleep
? Rnd Sleep
Для того, чтобы можно было получать случайные целочисленные значения,
нужно просто генерируемое число умножить на целое число, которое будет
ограничивать диапазон генерации и преобразовать его в целое с помощью функции
INT:
Пример:
Randomize Timer For a As Integer = 1 To 20 ? Int(10*Rnd) Next Sleep
Пример выше генерирует числа от 0 до 9. Если нужно чтобы генерация была не с нуля, а скажем с единицы, то можно применить такой метод:
Randomize Timer For a As Integer = 1 To 20 ? Int(10*Rnd)+1 Next Sleep
Теперь число генерируется от 1 до 10.
Следующий пример генерирует числа в диапазоне от 5 до 10 включительно:
Randomize Timer For a As Integer = 1 To 20 ? Int(6*Rnd)+5 Next Sleep
Всего доброго!
содержание | назад | вперед