Автор: Пользователь скрыл имя, 24 Декабря 2012 в 16:50, контрольная работа
Операционная система WINDOWS является базовой и необходимой составляющей ПО компьютера, без нее компьютер работать не может. Операционная система – комплекс программ, обеспечивающих взаимодействие всех аппаратных и программных частей компьютера между собой и взаимодействие пользователя и компьютера.
Приведенный ниже синтаксис
описывает имя, аргументы и текст
программы, составляющие тело процедуры
Function.
Синтаксис:
[Public I Private] [Static] Function Имя [(СписокАргументов)]
[As Тип]
[Инструкции]
[Имя = Выражение]
[Exit Function]
[Инструкции]
[Имя = Выражение] End Function
Синтаксис инструкции Function содержит те
же элементы, что и sub. Инструкция Exit Function
приводит к немедленному выходу из процедуры
Function.
Подобно процедуре Sub, процедура Function является
самостоятельной процедурой, которая
может получать аргументы, выполнять последовательность
инструкций и изменять значения своих
аргументов. Однако в отличие от процедуры
sub, когда требуется использовать возвращаемое
функцией значение, .процедура Function может
применяться в правой части выражения,
как и любая другая встроенная функция,
например, cos.
Процедура Function вызывается в выражении
по своему имени, за которым следует список
аргументов в скобках.
Для возврата значения из функции следует
присвоить значение имени функции. Любое
число таких инструкций присвоения может
находиться в любом месте процедуры.
Переход в подпрограмму и возвращение
из подпрограммы
В VBA от первоначальных версий BASIC сохранилась
конструкция подпрограммы GoSub- Return, которая
в настоящее время редко используется.
Для полноты изложения вкратце напомним
синтаксис этой инструкции.
Синтаксис:
GoSub строка
строка
Return
Аргумент строка может быть любой меткой
строки или номером строки. В качестве
метки строки может быть любая комбинация
символов, начинающаяся с буквы и заканчивающаяся
двоеточием.
Допускается использование инструкций
GoSub и Return в любом месте процедуры, но GoSub
и соответствующая инструкция Return должны
находиться в одной процедуре. Подпрограмма
может содержать несколько инструкций
Return. Первая обнаруженная инструкция Return
приводит к передаче управления назад
к инструкции, непосредственно следующей
за последней выполненной инструкцией
GoSub.
Вызов процедуры
Вызов процедуры sub из другой процедуры
можно произвести несколькими способами.
Первый способ вызова процедуры Sub: ИмяПроцедуры
СписокФактическихПараметров
ИмяПроцедуры |
Имя вызываемой процедуры |
||
СписокФактическихПараметров |
Список аргументов, передаваемых процедуре. Он должен соответствовать списку, заданному в процедуре по количеству и типу |
||
Если требуется использовать
несколько процедур с одинаковыми
названиями, при их вызове после
имени процедуры через точку
надо указывать имя модуля, на котором
они расположены. А именно, ИмяМодуля.ИмяПроцедуры
СписокФактическихПараметров
Второй способ вызова процедуры sub производится
с помощью инструкции Call.
ИмяПроцедуры (СписокФактическихПараметров)
Обратите внимание, что в этом случае список
фактических параметров заключается в
скобки. В первом способе скобки не использовались.
VBA позволяет вводить фактические параметры
через имена аргументов в любом порядке
и опускать необязательные (optional). При
этом после имени аргумента ставятся двоеточие
и знак равенства, после которого помещается
значение аргумента (фактический параметр).
Приведенный ниже пример показывает основные
способы передачи параметров в процедуры.
Dim с As Double ',
'
' с - глобальный параметр '
Function F(ByVal x As Integer) As Integer
F = x ^ 2
End Function
Sub Assistant(ByVal a As Integer, ByVal b As Integer)
'
' Процедура, находящая сумму двух чисел
и выводящая
' результат в диалоговом окне
'
с = а + b
'
MsgBox CStr(c)
End Sub
'
Sub Main ()
'
' Процедура, находящая сумму двух чисел
и выводящая
' результат в диалоговом окне
Dim x, у As Double
' x, у — переменные, используемые в качестве
фактических параметров
' Вызов процедуры с конкретными числами
как фактическими параметрами
'
Assistant 1, 3
' Первоначальное присвоение переменным
значений,
' с последующим вызовом процедуры
'
х = 1: у = 1 Assistant x, у + 2
' Использование функции как фактического
параметра
'
х = 1: у = 3
Assistant F(x), у
'
' Вызов процедуры с указанием фактических
параметров по имени
'
Assistant a:=l, b:=3
End Sub
Приведем пример процедуры с необязательными
параметрами. Процедура СторонаТреугольника
позволяет найти длину недостающей стороны
прямоугольного треугольника, где переменные
А и В отведены под длины катетов, а переменная
с — под гипотенузу. Например, формула
=СторонаТреугольника(;В2;С2)
вычисляет катет А по введенным в ячейки
В2 и С2 длинам катета В и гипотенузы С.
При работе с необязательными переменными
необходимо использовать функцию isMissing,
возвращающую значение True, если соответствующий
аргумент не был передан в процедуру, и
False в противном случае.
Function СторонаТреугольника(Optional A,
Optional В, Optional С)
If Not (IsMissing(A)) And Not (IsMissing(В)) Then
СторонаТреугольника = Sqr(А ^ 2 + В ^ 2)
End If
If Not (IsMissing(A)) And Not (IsMissing(C)) Then
СторонаТреугольника = Sqr(С ^ 2 - А ^ 2)
End If
If Not (IsMissing(B)) And Not (IsMissing(C)) Then
СторонаТреугольника = Sqr(C ^ 2 - В ^ 2)
End If
End Function
Назначение значений по умолчанию необязательным
параметрам
Для необязательного параметра можно
определить значение по умолчанию. В следующем
примере, если значение параметра ь не
передано в функцию, то ему присваивается
указанное по умолчанию значение 8.
Function Сумма (a As Double, Optional b As Double = 8)
Сумма = a + b End Function
Использование неопределенного количества
параметров
Как правило, количество передаваемых
параметров в процедуру совпадает с количеством
определенных у этой процедуры параметров.
Однако ключевое слово ParamArray предоставляет
возможность ввода в процедуру произвольного,
заранее не указанного числа параметров
(например, как это происходит при использовании
функции рабочего листа СУММ (sum)). В качестве
примера приведем процедуру, которая выполняет
то же действие, что и функция рабочего
листа СУММ. Отличием функции СуммаПользователя
от СУММ является то, что в ней в каждое
поле ввода диалогового окна мастера функций
можно вводить только либо число, либо
ссылку на ячейку, а не на диапазон, как
при работе с функцией СУММ.
Function СуммаПользователя(ParamArray Массив())
s = 0
For Each a In Массив
s = s + а Next a
СуммаПользователя = s
End Function
Рекурсивные процедуры
В VBA возможно создание рекурсивных процедур,
т. е. процедур, вызывающих самих себя.
Стандартным примером рекурсивной процедуры
является процедура вычисления факториала,
т. е. функции, возвращающей результат
произведения первых п натуральных чисел,
где п — аргумент функции. Для этой функции
имеется стандартное обозначение:
Fact(n) =n!, где Fact (0) =1.
Ясно, что
Fact(n) = n Fact (n - 1}
Основываясь на данном соотношении, приводимая
ниже рекурсивная функция вычисляет значение
факториала.
Function Fact(n As Integer) As Integer
If n<l Then
Fact = 1 Else
Fact = Fact(n - 1) n
End If
End Function
Другим стандартным примером применения
рекурсивных функций является нахождение
наибольшего общего делителя двух целых
чисел по алгоритму Евклида. Наибольший
общий делитель (нод) двух целых чисел
— это наибольшее целое, на которое делятся
оба числа. Например, HOД(10, 14} = 2 и НОД (15,
31} = 1.
Алгоритм Евклида состоит в следующем:
Function НОД(Целое1 As Long, Целое2
As Long) As Long
If Целое2 Mod Целое1 = 0 Then
НОД = Целое1 Else
НОД = НОД(Целое2, Целое1 Mod Целое2)
End If
End Function
Несмотря на элегантность рекурсивных
процедур, применять их надо с осторожностью,
т. к. неаккуратное использование может
привести к проблемам с памятью — многократный
вызов такой процедуры быстро исчерпывает
стековую память.
Область определения
переменной
Область определения переменной задает
область, в которой может быть использована
переменная. В VBA имеется три соответствующих
уровня переменных:
Время жизни переменной
Личная (private) переменная сохраняет свое
значение только пока выполняется процедура,
в которой эта переменная описана. При
завершении процедуры значение переменной
теряется, и при повторном запуске процедуры
его надо заново инициализировать. Переменные,
описанные при помощи инструкции Static,
сохраняют свое значение по выходу из
процедуры, но пока работает программа.
Задача:
а) Переведите числа. 101001110011,11011112®8, 10,16
101001110011,11011112 = 101 001 110 011, 110 111 100 = 5163,6748
101001110011,11011112 =
1010011100111101111 : 27
= 1*218+0*217+1*216+0*215+0*214+
+2048+256+128+64+32+8+4+2+1=
101001110011,11011112 = 1010 0111 0011 1101 1110 = 539еf