Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информашка).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
142.34 Кб
Скачать

1

В переменной может храниться 1 значение или множество значений. Переменную, в которой хранится множество значений, называется индексированной.

Массив- именной набор индексированных ячеек. Ячейки также называют элементами или индексированными переменными.

У каждого массива 5 характеристик:

1-имя, 2-размерность,3- число элементов,4- № 1ого элемента, 5-тип элементов.

1.Правилаименования массива аналогичны правилам имменования элементов.

2.Одномерные массивы напоминают 1 строку таблицы, каждая ячейка которой содержит какие-то данные.Многомерные имеют больше изменений.Их можно сравнивать с таблицами, имеющими множество строк и столбцов.

3.Нумерация элементов подчиняется правилам:

-по умолчанию нумерация эл-тов массива начинается с 0. 1ый по счету эл-т, получит индекс 0, 2ой -1.

-В объявлении отд. Массива можно явно указать индекс его 1ого и посл. эл-тов, разделив их ключевым словом TO

-Если Вы хотите, чтобы индексы всех массивов начинались с 1, добавьте в раздел объявлений модуля (вне процедур, ф-ий) команду OptionBase1

5.Подчиняется тем же правилам, которые рассмотрели раннее для переменных.

-По умолчанию массив получит тип Variant.

Не всегда кол-во эл-тов и размерность массива известны до начала работы программы.

VBA умеет работать с динамическими массивами, параметры кот. можно менять в ходе вып-я программы.

2.

Одномерные массивы-совместимость значений некоторого простого типа (целого, вещественного, символьного, текстового, логического), перенумерованных в каком-то порядке и имеющих общее имя. Для выделения конкретного эл-та массива необходимо указать ему порядковый №.

ПР: 89, -65, 9, 0, -1.7

x[1]=89, x[2]=-65, x[3]=9, x[4]=0, x[5]=-1.7

Последовательность чисел может образовывать одномерный массив размерностью(кол-вом эл-тов) 5 с именем х.

Значение порядкового № эл-та массива называется индексом эл-та массива.

ПР

Можно ссылаться на эл-т x[4],эл-т x[i],эл-т x[j+4] массива х, если i=2, j=1.

Эти индексы определяют соответственно x[4], x[2], x[5].

Для объявления массивов используется оператор Dim.

Объявить массив можно 2умя способами:

-Заключить в указании общего количества эл-тов.

ПР

Dim My array(30) as Single

Объявленный массив My array содержит 31 эл-т (+0). С индексами от 0-30.

-Границы заданы явно.

ПР

Dim My array2( 1-25)

Массив My array2 содержит 25 эл-тов. Границы заданы явно, 1ый эл-т получит индекс 1. Тип массива не указан. В массиве можно хранить любые данные.

3.

Двумерные массивы (матрицы) имеют 2 измерения. Матрицу можно представить ввиде таблицы с неск. строками и столбцами.

Для того, чтобы объявить двумерный массив надо воспользоваться командой Dim с указанием размерности каждого из измерений.

Пр

Dim My array A(10,1) As Single.

Dim My array B(1 to 25, 1 to 5) As Single

Dim X (1 to 5, 1 to 3) As Single

1 2 3

1 x(1,1) x(1,2) x(1,3)

2 x(2,1) x(2,2) x(2,3)

3 x(3,1) x(3,2) x(3,3)

4 x(4,1) x(4,2) x(4,3)

5 x(5,1) x(5,2) x(5,3)

Эл-т массива X(3,2) находится на пересечении 3ей строки и 2ого столбца массива.

4.

Чтобы воспользоваться динамическим массивом сначала нужно объявить пустой массив, а потом задать размерность массива командой ReDim.

Dim My array()

n=InputBox (“Введите кол-во сотрудников»)

ReDim My array (1 to n, 1 to 2)

В итоге, если на запрос программы «введите кол-во сотрудников», мы введем число 15, то будет создан двумерный массив размерностью 15х2.

5.

Наиболее удобный способ обработки массива- использование цикла, а именно цикла со счетчиком.

ПР Написать программу, кот. предлагает пользователю ввести 10 фамилий, сохраняет их в массиве, а потом выводит в окнах сообщений.

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

My array (I) = InputBox(“Введите фамилию №» &i)

Next I (конец цикла)

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

MsgBox(“Фамилия №”&i& my”_” &array(i))

6

Наиболее удобный способ обработки массива- использование цикла, а именно цикла со счетчиком.

ПР Написать программу, кот. предлагает пользователю ввести 10 фамилий, сохраняет их в массиве, а потом выводит в окнах сообщений.

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

My array (I) = InputBox(“Введите фамилию №» &i)

Next I (конец цикла)

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

MsgBox(“Фамилия №”&i& my”_” &array(i))

Алгоритмы обработки одномерных массивов:

-Нахождение суммы (произведения) одномерных массивов.

A[i], где i=1,2,...,n

P-результат реш-я задачи.

Алгоритм нах-я произведения заключается в добавлении переменной Р (произведению) значение элемента при каждом выполнении тела цикла.

Public Sub Provized()

Dim A() As Single

Dim n As Integer

n=InputBox (“Введите кол-во эл-тов”)

ReDim A(n)

Public Sub Provized()

Dim A() As Single

For i=1 to n

A(i)=InputBox (“Введите A(”&i&”)=»)

Next I

P=1

For i=1 to n

P=P*A Next I

MsgBox “Произведение=”&P

End Sub

Данный алгоритм можно преобразовать в алг. Суммы эл-тов массива. Для этого: Нужно первый P присвоить значение 0, а умножение заменить сложением.

7

Наиболее удобный способ обработки массива- использование цикла, а именно цикла со счетчиком.

ПР Написать программу, кот. предлагает пользователю ввести 10 фамилий, сохраняет их в массиве, а потом выводит в окнах сообщений.

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

My array (I) = InputBox(“Введите фамилию №» &i)

Next I (конец цикла)

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

MsgBox(“Фамилия №”&i& my”_” &array(i))

Алгоритмы обработки одномерных массивов:

-Определение кол-ва эл-тов массива, удовлетворяющего нек. Усл-ю.

ПР

Определить кол-во эл-тов массива, значение кот. совпадает со значением нек. Величины.

Исх данные:

n-кол-во эл-тов массива

A(i)-значение эл-тов массива

i=1,2,...,n

b-величина , с кот. вычисляется кол-во совпадений среди эл-тов массива

Результат k-кол-во эл-тов, равных b

Алгоритм заключается в послндовательной проверке условия A[i]=b для всех эл-тов массива, если оно выполняется, то к переменной, в кот. накапливается кол-во , добавляется 1.(т.е. Опр-е кол-ва-суммирование единиц)

Public Sub Kol()

Dim A() As Single

Dim n,k As Integer

Dim b As Single

n=InputBox(“Введите кол-во эл-тов»)

ReDim A(n)

Public Sub Kol()

For i=1 to n

A(i)= InputBox («введите A(“&i&”)=”)

Next I

k=0

b=(“Введите число для сравнения”)

For i=1 to n

If A(i)=b Then k=k+1

Next I

MsgBox “Кол-во эл-тов массивов, совпадающих с ”&b”=&k

8

Наиболее удобный способ обработки массива- использование цикла, а именно цикла со счетчиком.

ПР Написать программу, кот. предлагает пользователю ввести 10 фамилий, сохраняет их в массиве, а потом выводит в окнах сообщений.

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

My array (I) = InputBox(“Введите фамилию №» &i)

Next I (конец цикла)

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

MsgBox(“Фамилия №”&i& my”_” &array(i))

Алгоритмы обработки одномерных массивов:

-Получение нового массива из эл-тов исходного массива, удовл. Нек. Усл-ю.

ПР

Сформулировать массив b из эл-тов массива А, больших некоторого заданного значения Р .

Каждый эл-т массива нужно будет сравнивать с нек. Величиной Р. Если эта переменная > , чем, Р, тогда знач-е этогоэл-та нужно написать в массив В.

Результат-массив В.

Public Sub Primer()

Dim A(), B(), p As Single

Dim n As Integer

n=InputBox («Введите кол-во эл-тов», «Окно ввода»)

ReDim A(1 to n), B(1 to n)

For i=1 to n

A(i)=InputBox(“Введите A(“&i&”)=»)

Next I

p=InputBox (“введите значение р=”)

For i=1 to n

If i=1 to n

If A(i)>p Then B(k)=A(i):k=k+1 или k=k+1:B(k)=A(i)

Next I

While <=k

Debug.Print “B (“B(“&i&”)=”& B(i)

i=i+1

Wend

End Sub

9

Наиболее удобный способ обработки массива- использование цикла, а именно цикла со счетчиком.

ПР Написать программу, кот. предлагает пользователю ввести 10 фамилий, сохраняет их в массиве, а потом выводит в окнах сообщений.

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

My array (I) = InputBox(“Введите фамилию №» &i)

Next I (конец цикла)

Dim My array (1 to 10) As String

For i=1 to 10 (вывод фамилий)

MsgBox(“Фамилия №”&i& my”_” &array(i))

Алгоритмы обработки одномерных массивов:

-Поиск макс(мин) элемента и его номера в массиве.

Будем считать что эл-т массива с инд k является макс(мин)

Перед циклом поиска макс эл-та присвоим k значение 1, те предположим, что 1ый эл-т макс.

Затем в цикле поиска сравниваем все эл-ты поочередно с макс. Если какой-то эл-т массива больше макс, то присваиваем переменной макс значение.

В результате переменная макс будет содержать макс эл-т массива, а переменная k № этого эл-та.

Public Sub poisk_Max()

Dim A(), max As Single

Dim n,k As Integer

n=InputBox (“n=”)

ReDim A(1 to n)

For i=1 to n

A(i)=InputBox (“Введите А(«&i&»)=”)

Next I

k=1: max=A(k)

For i=2 to n

If A(i)>max Then

max=A(i)

k=i

End if

Next I

Debug.Print k&” эл-т максимальный.Его значение=»& max

10

Сортировка представляет собой процесс упорядочения элементов в массиве в порядке возрастания или убывания их значений. Например, массив X из n элементов будет отсортирован в порядке возрастания значений его элементов, если X1 ≤ X2 ≤...≤ Xn, и в порядке убывания, если X1 ≥ X2 ≥ ... ≥ Xn.

Существует большое количество алгоритмов сортировки, но все они базируются на трех основных:

сортировка обменом;

сортировка выбором;

сортировка вставкой.

Представим, что нам необходимо разложить по порядку карты в колоде. Для сортировки карт обменом можно разложить карты на столе лицевой стороной вверх и менять местами те карты, которые расположены в неправильном порядке, делая это до тех пор, пока колода карт не станет упорядоченной.

Для сортировки выбором из разложенных на столе карт выбирают самую младшую (старшую) карту и держат ее в руках. Затем из оставшихся карт вновь выбрать наименьшую (наибольшую) по значению карту и помещают ее позади той карты, которая была выбрана первой. Этот процесс повторяется до тех пор, пока вся колода не окажется в руках. Поскольку каждый раз выбирается наименьшая (наибольшая) по значению карта из оставшихся на столе карт, по завершению такого процесса карты будут отсортированы по возрастанию (убыванию).

Для сортировки вставкой из колоды берут две карты и располагают их в необходимом порядке по отношению друг к другу. Каждая следующая карта, взятая из колоды, должна быть установлена на соответствующее место по отношению к уже упорядоченным картам.

11

Возможны случаи, когда внутри тела цикла необходимо повторять нек. Последовательность операторов, те организовать внутр цикл.

Глубина вложения цикла может быть различна.

ПР (вложенного цикла со счетчиком) S=0

For i=1 to 5

For j=1 to 3

S=S+A(i,j)

Next j

Next I

12

Возможны случаи, когда внутри тела цикла необходимо повторять нек. Последовательность операторов, те организовать внутр цикл.

Глубина вложения цикла может быть различна

ПР (Опр-е суммы эл-тов в каждой строке массива)

A=5 2 3 4

1 0 -1 4

8 9 7 6

Алг. Обработки состоит в след:

В исх. Массиве надо по очереди суммировать эл-ты в каждой строке.

Полученный результат записывать в массив SUM

13

Возможны случаи, когда внутри тела цикла необходимо повторять нек. Последовательность операторов, те организовать внутр цикл.

Глубина вложения цикла может быть различна

-Определение мин эл-та каждого столбца

В массиве А содержащем 3 строки, 4 столбца определить в каждом столбце мин эл-т

А(3,4)

мин (4)

Алгоритм решения задачи состоит в след:

В исходном массиве А перед началом обработки очередного столбца, мин является эл-т находящийся в 1ой строке данного столбца

Min(j)=A(1,j)

Затем по очереди рассматриваются все эл-ты столбца и каждый сравнивается с мин эл-том.

Если встречается эл-т меньше мин, то его объявляют мин эл-том и продолжают просмотр столбца дальше.

14

В массиве А в кот (n,m) заменить все эл-ты заданной строки на цифру 5

Массив будем заполнять с помощью датчиков случайных чисел.

Исх данные:

n-кол-во строк

m-кол-во столбцов

k-№ строки

1<=k<=n

Rnd[(число)]-функция датчик случ. Чисел.

Эта ф-я представляет равномернораспр. Случ. Число [0,1]

Если этот аргумент (число)

не задан или >0, то порождается др. случ. Число

Перед тем, как получить посл-ть случ. Чисел нужно вызвать вот такую ф-ю Randomize

для инициализации последовательности.

Чтобы получить целочисл. Посл-ть равномернораспр-х случ. Чисел в интервале[min,max]

используется преобразование:

Int((Max-Min+1)*Rnd)+Min

15

В заданном массиве В(5,6) вычислить к-во отрицательных эл-тов

Исх данные: массив В

k-кол-во отр. Эл-тов

В(i,j)<0

k=k+1

Массив будет заполнен случ. Числами интервала [-8,10]

Int(10-(-8)+1)*Rnd-8

Int(19*Rnd)-8

17

Нек эл-ты упр-я лучше всего исп-ть для ввода или отобр-я текста, другие для доступа к прил-ям и данным так, будто эти прил-я явл. частью более круп. прил-я.

Методы в ВБА применяются чаще всего для пол-я св-в объектов.

Св-ва формы можно задавать как в режиме разработки в окне св-в, так и в режиме исп-я прил-я по ср-вам написания кода.

Эл-ты выбора:

-флажок

-радиокнопки

-список

-поле со списком.

флажок:

Если он установлен, то его св-во Value=true

Если нет, то Value=falce

Св-во флажка можно уст-ть как в окне св-в в режиме конструктора, так и программное.

сами по себе исп-ся спец. конструкций для языка флажки приносят мало пользы.Эффективно с ними можно работать, исп-я операторы принятия решений.

с флажком можно сопоставить св-во change.Оно вып-ся всякий раз при уст-ки\снятии флага. 31.05.11

Радиокнопки:

исп-ся группами.В группе может быть выбрана 1 кн.

все радиокн. расп-ны на одной форме и авт. объединены в 1 группу.

если на форме нужно исп-ть неск. групп радиокн. то их разделяют эл-тами упр-я или рамкой Frame.

Радиокн. размещенные в пределах рамки обрабатываются отд. от кнопок на др. рамках или формах.

Поле со списком:

исп-ся для хранения списков значений.

Перед исп-ем поле следует заполнить знач-ями. для добавления новых значений исп-ся метод AddItem(добавить эл-т)

Обычно вызов этого метода помещается в обработчик события инициализации форм.

ДЛя очистки списка исп-ся метож Clear.

После того как пользователь выбрал 1 из параметров поля узнать выбр. знач-е можно воспользовавшись св-вом Value.

После того как пользователь сделал выбор из поля со списком выбр. знач-е обрабатывается по нажатию какой либо кнопки.

Список:

исп-ся для представления списков данных.

принцип работы с ним анаогичен ComboBox.

ToggleButton-выключатель.кнопка кот может сущ-ть в 2ух сост-ях(вкл\выкл)

Image-изобр-е исп-ся для вывода на форму изобр-я

AutoSize- автоматический размер.

рисунку мб предназначено какое нить событие.

18. Функция MsgBox для вывода диалогового окна.

процедура/функция MsgBox

Функция MsgBox предназначена для вывода сообщения, адресованного пользователю, и ожидания реакции пользователя в виде числового кода нажатой кнопки:

K= MsgBox (Msg,Buttons,Caption,HelpFile,Context])

Единственным обязательным параметром функции MsgBox является текст сообщения Msg. Если задан только он, то в диалоговом окне наряду с сообщением Msg появляется только кнопка <OK>. Ничего другого, кроме как нажать единственную кнопку, пользователю не остается — крестик и тот не доступен. Числовой код, соответствующий нажимаемой кнопке в данном случае равен 1 (системная константа vbOK).

Если вы хотите ограничиться только выводом сообщения, то к функции MsgBox можно обратиться как к оператору:

MsgBox Msg

Параметр buttons, представленный целочисленным значением, определяет, какие кнопки и пиктограммы должны быть размещены в диалоговом окне. Формируется оно как сумма четырех слагаемых, первое из которых определяет совокупность кнопок, второе — тип иконки, третье определяет порядковый номер кнопки по умолчанию, четвертое — режим модальности. К последнему слагаемому прибегают крайне редко.

MsgBox возвращает результат и может встречаться в операторе присваивания. Такой способ использования MsgBox позволяет установить обратную связь начинающего разработчика программного обеспечения в системе Visual Basic с первыми разрабатываемыми программами. Даже почти не применяя никаких визуальных элементов, вы можете писать программы с целью изучения языковых конструкций Visual Basic, его встроенных функций и так далее. Вы можете, например, просто произвести какие-либо вычисления, а их результаты вывести на экран в диалоговом окне процедуры/функции MsgBox.

Самое замечательное в процедуре/функции MsgBox заключается в том, что она может возвращать значение. Возвращаемое функцией MsgBox значение является одной из предопределенных констант и связано с той кнопкой, на которой щелкнул пользователь. Приведем синтаксис функции MsgBox (из справочной системы):

Функция MsgBox принимает следующие именованные аргументы: prompt — обязательный аргумент (о чем свидетельствует отсутствие квадратных кнопок вокруг этого аргумента); строковое выражение (string expression), которое является собственно сообщением или вопросом; имеет максимальную длину около 1024 символов (в зависимости от ширины используемых символов); для вывода в окне сообщения специальных символов, например, кавычек, необходимо использовать специальные символы посредством вызова функции Chr с кодами этих символов, например, Chr (34); если сообщение содержит более одной строки, для разбиения его на строки необходимо использовать символы 13 (символ возврата каретки) и 10 (символ перехода на одну строку) в виде строки Chr (13) & Chr (10).

buttons — необязательный параметр; численное выражение, которое является суммой значений, определяющих число и тип отображаемых в окне сообщения кнопок, стиль используемого в окне значка, номера кнопки по умолчанию и модальность окна сообщения (свойство, которое позволяет или запрещает продолжать работу приложения без закрытия окна функции MsgBox); если параметр опущен, используется по умолчанию значение 0.

title — необязательный параметр; строковое выражение, отображаемое в заголовке окна; если аргумент опущен, в качестве заголовка используется имя приложения,

helpfile — необязательный параметр; строковое выражение, которое является именем файла помощи, который вы ранее уже подготовили, используя Windows Help Compiler.

context — необязательный параметр; указывает определенный раздел справочной системы, который должен отображаться при выборе пользователем кнопки Справка; если аргумент helpfile используется, то context обязателен.

19.События и методы формы.

События

Resize это событие инициализируется, когда меняют размер формы (транспортировкой мышкой границ).

Activate инициализируется, когда форма становится активной.

Deactivate форма перестает быть активной.

В отличии от событий, процедуры выступают в роли методов, вызывается непосредственно из кода.

Методы

Show используется для того, чтобы сделать форму видимой.

Print, hine, circle для рисования прямо на формах.