Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект:Изучение Visual Basic


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Русский_Проект:Рассылка Третий выпуск

1 Новости сайта
2 Алгоритмы
3 Функции API

Новости сайта

Примеры
Красивый эффект сворачивания окна
Вызов апплетов Панели Управления разными способами

Алгоритмы

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

Итак,для генерации случайных чисел в VB используется функция Rnd,которая генерирует числа от 0 до 1(причем 1 не входит в этот диапазон,а 0 входит). Т.е. это могут быть числа : 0,3267545; 0,79563; 0,0043678 и т.д. Если же мы будем умножать генерируемое число на 10, то интервал генерируемых чисел будет равняться уже от 0 до 10 (соответственно, если умножать на сто,то интервал генерируемых чисел будет равняться уже от 0 до 100). И вышеназванные числа будут иметь следующий вид: 3,267545; 7,9563; 0,043678.Чаще же всего нам нужны целые числа, без "хвостов". Для этого можно использовать функцию Int,которая преобразует число в целое. Например:
Int(3,267545) = 3
Int(7,9563) = 8
Int(0,043678) = 0
Немного потренировавшись,можно заметить некоторую закономерность,позволяющую вывести универсальную формулу генерации случайного числа в любом интервале от N1 до N2
N=N1+Int(Rnd*(N2-N1+1)
Пример:
N = 5+Int(Rnd*100-5) 'получаем случайное число от 5 до 100
Внимание! Ряд "случайных" чисел будет каждый раз повторяться,если Вы не установите в Form_Load инструкцию Randomize,которая инициализирует датчик случайных чисел:
Private Sub Form_Load ()
Randomize
End Sub

Оформим формулу в виде функции и сохраним в модуле .bas
Public Function GetRandom(Min As Long, Max As Long) As Long
GetRandom = Min + Int(Rnd * (Max - Min + 1))
End Function
, где Min и Max-требуемый диапазон.Теперь можно вызывать функцию
GetRandom(5,100)
Теперь вам не придется писать заново один и тот же кусок кода.Старайтесь собирать часто используемые функции и процедуры в файле .bas,которая со временем будет пополняться вашими новыми находками.Удачи!


Функции API

Функция GetDiskFreeSpaceEx

Для определения количества свободного места для текущего пользователя,общий объем диска и количество свободного места на диске(все байтах) используйте функцию API
 GetDiskFreeSpaceEx:
Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long

Данная функция предпочтительнее старой GetDiskFreeSpace,которая не может правильно определить емкость диска,превышающего 2 гигабайта.
Вообще то,в документации для C++  вместо типа Currency используется cтруктура ULARGE_INTEGER,которое хранит 64-разрядное целое число без знака.VB 6 ой версии не поддерживает такой тип.Но Currency по существу тоже 64-разрядное целое число,только со смещенной запятой на 4 разряда влево для отображения денежных величин.Поэтому,достаточно умножить полученный результат на 10 000 для получение правильных значений

Параметры
lpDirectoryName
Имя директории на диске,информацию относительно которой нужно узнать.Это может быть имя корневой директории или любая другая директория

lpFreeBytesAvailableToCaller
Безнаковое 64-разрядное целое число,содержащее количество свободного места в байтах для текущего пользователя

lpTotalNumberOfBytes
Безнаковое 64-разрядное целое число,содержащее объем диска в байтах

lpTotalNumberOfFreeBytes
Безнаковое 64-разрядное целое число,содержащее общее количество свободного места в байтах


Пример
' Считаем и отображаем количество свободного
' места и общего объема диска C:
Dim BytesFreeToCalller As Currency
Dim TotalBytes As Currency
Dim TotalFreeBytes As Currency
Dim TotalBytesUsed As Currency

    Const RootPathName = "C:\"
 'Извлекаем информацию о диске
    Call GetDiskFreeSpaceEx(RootPathName, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
    'выводим результат, умножая
' возвращаемое значение на 10000,
' чтобы сместить десятичную точку,возвращаемую
'типом Currency вправо
    Me.AutoRedraw = True
    Print " Общий объем диска:", Format$(TotalBytes * 10000, "###,###,###,##0") & " байт"
    Print " Свободно на диске:", Format$(TotalFreeBytes * 10000, "###,###,###,##0") & " байт"
    Print " Доступно на диске:", Format$(BytesFreeToCalller * 10000, "###,###,###,##0") & " байт"
    Print " Занято :", Format$((TotalBytes - TotalFreeBytes) * 10000, "###,###,###,##0") & " байт"

Не стесняйтес,высылайте ваши предложения по адресу vbasic@rambler.ru
Посетите сайт Русский_Проект,где вы найдете другую интересную информацию
Давайте делать рассылку вместе!


http://subscribe.ru/
E-mail: ask@subscribe.ru
Поиск

В избранное