Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Лекции по VBA для гуманитарных специальностей - файл 0лекции.doc


Лекции по VBA для гуманитарных специальностей
скачать (2267.5 kb.)

Доступные файлы (7):

0лекции.doc2801kb.19.05.2011 23:01скачать
1 Лекция.doc87kb.19.05.2011 23:01скачать
2 Лекция.doc148kb.19.05.2011 23:01скачать
3 Лекция.doc84kb.19.05.2011 23:01скачать
4 Лекция.doc48kb.19.05.2011 23:01скачать
5 Лекция.doc54kb.19.05.2011 23:01скачать
6 Лекция.doc36kb.19.05.2011 23:01скачать

содержание
Загрузка...

0лекции.doc

Реклама MarketGid:
Загрузка...



ЛЕКЦИИ ПО VBA



Решение практических задач с применением ЭВМ. Основные этапы.


Основные этапы решения задач на ЭВМ:

1.Содержательная постановка задачи.

  1. Математическая постановка задачи.

  2. Формализация задачи (выбор метода решения).

  3. Составление алгоритма решения задачи.

  4. Составление программы на языке программирования.

  5. Отладка программы на ЭВМ – выявление и исправление ошибок.

  6. Рабочий счет (решение задачи с рабочими данными на ЭВМ) и анализ результатов (тестирование).

  7. Составление инструкции к программе.

При постановке задачи (этап 1-3) требуется сформулировать задачу предельно четко, ясно; с учетом особенностей используемой ЭВМ и языка программирования; наметить сначала общий подход к ее решению, а затем и строгий математический метод.

^ Содержательная постановка задачи – формулировка задачи, излагаемая в терминах некоторой конкретной области науки. Суть этого этапа в том, что четко формулируется: Что дано? Что найти? Как найти? (1.Пример для заочников 8 положительных одинаковых чисел и одно меньшее число. 2.Треугольник, вписанный в круг, найти, как расположен центр окружности по отношению к треугольнику).

^ Математическая постановка задачи – это формулировка нашей задачи как задачи некоторого раздела математики. На этом этапе также рассматриваются вопросы: Что дано? Что найти? Как найти? Однако это формулируется на языке математики.

Свойства математическая постановка задачи:

  1. модель объекта не тождественна реальному объекту;

  2. модель объекта не определяется однозначно реальным объектом;

  3. для любой выбранной модели объекта необходимо доказать соответствие ее реальному объекту;

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

Формализация задачи (выбор метода решения). Этот процесс обычно выполняется за два шага:

Шаг 1. Выбор структуры данных, т.е. представление данных и результатов задачи в виде, допустимом в языке программирования (как правило, в виде совокупности переменных и массивов, файлов и т.д.).

  1. Шаг 2. Выбор способа (порядка) решения задачи, который включал бы только те операции над элементами данных, которые допустимы в языке программирования.
^

2. Алгоритм. Свойства алгоритма, схема алгоритма


Составление алгоритма решения задачи. Алгоритм – это метод (способ) решения задачи, записанным по определенным правилам, обеспечивающим однозначность его понимания и механического исполнения при всех его исходных данных (из некоторого множества значений).

Пример. Алгоритм заварки чая:

  1. Подготовить исходные величины – чай, воду, чайник, стакан, ложку.

  2. Налить в чайник воду.

  3. Довести воду до кипения и снять с огня.

  4. Всыпать в чайник чай.

  5. Чай готов процесс прекратить.

Основные свойства алгоритма.

  1. Дискретность алгоритма. Это свойство означает, что процесс решения задачи расчленен на отдельные элементарные действия (шаги).

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

  3. Результативность алгоритма. Свойство алгоритма, состоящее в том, что он всегда приводит к результату.

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

    • Алгоритм

Алгоритм—последовательность инструкций исполнителю для решения доставленной задачи (от англ, algorithm; назван в честь великого узбекского математика IX Аль Хорезми). Существуют разные способы задания алгоритмов:

1)словесный-позволяет описать алгоритм с помощью слов и предложений.

2)графический—когда каждое действие записывается в соответствующей геометрической фигуре.

  • ^ Применение аппарата схем для описания алгоритмов

Графическое представление хода решения задачи – самый наглядный способ записи алгоритма. Блок-схемы наиболее распространенный способ изображения алгоритмов









Алгоритм, заданный словесно или графически (блок-схемой), может быть обработан с помощью ЭВМ только в том случае, если он переведен на какой-либо язык программирования. Выбор языка зависит от многих факторов — как объективнее, так и субъективных: наличия техники, программного обеспечения, наличия литературы. Программа — запись алгоритма на языке программирования.

Система программирования Visual Basic относится к группе программных средств общим названием системы программирования. Система программирования обеспечивает пользователя средой для обработки программ, в Visual Basic это, называется проектированием приложений. В систему программирования Visual Basic входит текстовый редактор для написания текстов программ и конструктор форм. Программист пишет исходные тексты программ на формализованном языке, который представляет собой последовательность команд или операторов. Разработка интерфейса программы выполняется с помощью конструктора форм. Чтобы программа

выполнялась, исходные тексты переводятся на машинный язык. Это делает компилятор, который также входит в систему программирования. Не выходя из среды Visual Basic, вы монете многократно запускать свою программу на выполнение, проверяя и отлаживая ее работу, и возвращаться обратно. Таким образом, программа может находиться либо в проектирования, либо в режиме выполнения.
Структура программы:

  • Заголовок Sub(процедура).

  • Объявление переменных и констант Dim (переменные и константы).

  • Тело программы

  • Вывод результатов.

  • Конец программы Еnd Sub.

Способы записи чисел

Используются в основном 2 способа:

  1. Запись числа с фиксированной точкой, например:

123,456 454 9,456.

  1. Запись числа с плавающей точкой (нормализованная, экспоненциальная запись). Например: 2,14E+3 тоже, что и 2,14*103=2140.

Общая форма записи числа N в таком виде:

, т.е. ,

здесь - мантисса числа N (; - порядок числа N).

В языках программирования обычно .

Примеры:

1E+0=1; 9E-2=0,09 3,65E+2=365.
В Visual Basic используются числа с плавающей точкой обычной точности (Single) - количество чисел не более 7 и числа с плавающей точкой двойной точности - количество чисел не более 17.

Например 1/3=0,3333333 (для типа Single) и 1/3=0,333333333333333 (для типа Double).
Данные. В VBA могут использоваться следующие виды данных: 1)константы; 2)простые переменные и массивы.

Константы.VBA используются числовые и текстовые константы. Числовые константы записываются в программе в виде конкретного числа (вещественного или целого).

Переменная — именованное место в памяти компьютера, которое имеет ИМЯ (Идентификатор) и ЗНАЧЕНИЕ. Имя переменной (Идентификатор) — последовательность букв, цифр и спецсимволов (!, #, $, @, %^ А), начинающаяся с буквы и содержащая до 40 символов.

^ Типы данных. Типы данных являются одним из важнейших элементов языка VBA. Подобно всем современным языкам программирования VBA поддерживает несколько типов данных , которые можно использовать для объявления типов переменных или создания массивов.

При объявлении переменных тип данных указывается после ключевого слова As, с помощью одного из ключевых слов представленных в таблице 1.

Типы данных

^ Тип данных

Значения

Размер, байт

Byte (байт)

От 0 до 255

1

Boolean (логический)

True или False

2

Integer (целое)

От -32768 до 32767

2

Long (длинное целое)

От -2147483648 до 2147483647

4

Single (с плавающей точкой обычной точности)

От -3,402823E38 до -1,401129E-45 для отрицательных значений; 1,401129E-45 до 3,402823E38 для положительных значений

4

Double (с плавающей точкой двойной точности)

От -1,79769313486232E308 до -4,94065645841247E-324 для отрицательных значений;

4,94065645841247E-324 до 1,79769313486232E308 для положительных значений

8

Currency (денежный)

От -922337203685477,5808 До 922337203685477,5807

8

Decimal (масштабируемое целое)

79228162514264337593545950335

без дробной части 7,9228162514264337593545950335

с 28 знаками справа от запятой, минимальное ненулевое значение равняется 0,0000000000000000000000000001

14

Date (даты и время)

От 1 января 100г.До 31 декабря 9999г.

8

Object (объект)

любой указатель объекта

4

String (строка переменной длины)

От 0 до приблизительно 2 миллиардов

10+длина строки

String (строка постоянной длины)

От 1 до приблизительно 654000

длина строки

Variant (числовые подтипы)

Любое числовое значение (до границ диапазона для типа Double)

16

Variant (строковые подтипы)

Как для строки (String) переменной длины

22+длина строки

Тип данных, определяемый пользователем (с помощью ключевого слова Type)

Диапазон каждого элемента определяется его типом данных

Определяется пользователем


Переменные типа Byte, Boolean,Integer, Long, Currency, Decimal, Double и Date в VBA называют числовыми переменными. Числовыми переменными также являются переменные подтипов Empty (что означает отсутствие инициализации переменной), Integer, Long, Currency, Decimal, Double, Date, Error и Bate типа Variant.

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

VBA не требует обязательного объявления переменных. В случае если переменная не была объявлена, ей автоматически присваивается тип Variant. Этот тип является универсальным и может содержать данные различных подтипов: Long, Integer, String и т.д.
Операторы. Операторы предназначены для выполнения различных операций над операндами. Например, оператор «+» выполняет операцию сложения двух чисел или выражений, являющихся операндами. Большинство операторов VBA требует наличия двух операндов. Все операторы можно разделить на несколько групп:

^ Арифметические операторы. Они используются для используются для выполнения основных арифметических операций над операндами, представляющие числовые выражения.

^ Логические операторы, предназначены для выполнения различных логических операций включая логическое сложение, логическое умножение и т.п.

Операторы сравнения предназначены для выполнения операций сравнения логических выражений. Результатом их выполнения является значение типа Boolean.

^ Оператор присваивания «=».


Арифметические операции

Знаки операций

Возведение в степень

^

Изменение знака на обратный

-

Умножение

*

Деление

/

Целочисленное деление

\

Определение остатка от целочисленного деления

MOD

Сложение

+

Вычитание

-



^ Операция сравнения

Знак операции

Равно

=

Не равно

<>

Меньше

<

Больше

>

Меньше или равно

<=

Больше или равно

>=



^ Булева операция

Оператор

Отрицание

NOT

Конъюнкция (логическое «И»)

AND

Дизъюнкция (логическое «Или»)

OR

Исключающее «Или»

XOR

Эквиваленция

EQV

Импликация

IMP

^ И – истина, Л – ложь.

Выражение 1

Выражение 2

NOT

AND

OR

XOR

EQV

IMP

И

И

Л

И

И

Л

И

И

И

Л

Л

Л

И

И

Л

Л

Л

И

И

Л

И

И

Л

И

Л

Л

И

Л

Л

Л

И

И

Функции

Тригонометрические функции



Функция

Оператор

Что делает

1

Arctg x

ATN(x)

Возвращает арктангенс указанного числового выражения

2

Cos 

COS()

Возвращает косинус указанного угла. Угол задан в радианах.

3

Sin 

SIN()

Возвращает синус указанного угла. Угол задан в радианах.

4

Tg 

TAN()

Возвращает тангенс указанного угла. Угол задан в радианах.

Уголв радианах=Уголв градусах; где =3,141592654.

Связь между обратными тригонометрическими функциями

ArcSin x=Arctg(; ArcCos=Arctg(

^ Математические функции

Математическая

запись

Функция

Выполняемое действие



ABS(x)

Возвращает абсолютное значение числовой переменной x




CDBL(x)

Переводит числовое выражение в значение с двойной точностью




CSNG

Переводит числовое выражение в значение с обычной точностью




CINT

Округляет числовое выражение до целого значения

ex

EXP(x)

Возвращает e, возведенное в степень x

Ln(x)

LOG(x)

Возвращает натуральный числового выражения




INT(x)

Возвращает наибольшее целое, меньшее или равное числовому выражению




FIX(x)

Округляет выражение с плавающей точкой до его целой части




RND(x)

Возвращает случайное число одинарной точности от 0 до 1



SQR(x)

Возвращает квадратный корень числового выражения




SQN(x)

Возвращает значения, указывающее знак числового выражения

в частности

Работа с символьной информацией

Обработка числовой информации в тексте – функции val, str$.

Символьные функции

функция

Выполняемое действие

ASC(x)

Возвращает код ASII первого символа в символьной переменной x

CHR(x)

Возвращает символ соответствующий коду ASII x

INSTR(x,y)

Возвращает позицию первого обнаружения строки x в строке y

LEFT(x,n)

Возвращает n символов, стоящих с левого края символьной переменной x

LTRIM(x)

Удаляет начальные пробелы в символьной переменной x

MID(x,I,k)

Вырезает из символьной переменной x k символов, начиная с i-того

RIGTH(x,n)

Возвращает n символов, стоящих с правого края символьной переменной x

RTRIM(x)

Удаляет конечные пробелы в символьной переменной x

SPASE(n)

Возвращает n пробелов

STR(x)

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

STRING(L,x)

Возвращает L символов, совпадающих с первым символом символьной переменной x

VAL(x)

Переводит символьное значение переменной x в числовое значение



^ Инструкции принятия решения (оператор условия и оператор выбора)

Инструкции принятия решения позволяют выполнять группы инструкций в зависимости от определенного условия. В VBA для принятия решения используются две инструкции: If …then …else и Select Case.
Инструкция If …then …else

Инструкция If …then …else задает выполнение определенных групп инструкций в зависимости от значения выражения. Ее синтаксис приведен ниже:

^ If Условие Then Инструкции [Else Инструкции_ Else]

Допускается также использование блоковой формы синтаксиса:

If Условие Then

[Инструкции]

[Else

[Инструкции_else]

End if

Или расширенная блоковая форма синтаксиса:

If Условие Then

[Инструкции]

[Elseif Условие-n Then

[Инструкции_elseif]]

[Else

[Инструкции_elseif_else]]

End if

При этом предложение ElseifThen может повторяться несколько раз. Синтаксис инструкции If …then …else содержит элементы, представленные в таблице 1
Таблица 1. Элементы синтаксиса инструкции If …then …else

Элемент

Описание

^ Условие


Инструкции

Условие 1

Инструкции_elseif

Инструкции_else
Инструщии_ elseif_else

Обязательный элемент, представляющий логическое выражение, имеющее значение True или False. Если Условие имеет значение Null, то значение Условие считается равным False
Необязательный элемент в блоковой форме, но обязательный — в строчной форме. Этот элемент представляет собой одну или несколько инструкций, разделяемых двоеточиями, которые выполняются, если Условие имеет значение True
Обязательный элемент, аналогичный элементу Условие, если

употреблено выражение Elseif
Необязательный элемент — одно или несколько инструкций, которые выполняются, если Условие имеет значение ^ False, а Условие-п — True
Необязательный элемент— одна или несколько инструкций, которые выполняются, если Условие имеет значение False
Необязательный элемент — одно или несколько инструкций,

которые выполняются, если ни ^ Условие, ни Условие-n не имеют

значение False

Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия if…Then. При этом все инструкции должны находиться на одной строке и разделяться двоеточием, как показано в приведенном ниже

примере:

Существуют четыре целых числа, если inta мешьше intв, то к inta прибавить 3 и intb прибавить 7 и intc приравнять сумме inta и intb.
^ Sub testsub()

Dim inta As Integer, intb As Integer, intc As Integer, _

intd As Integer, intanew As Integer, intbnew As Integer, _

intcnew As Integer

inta = Val(InputBox("введите inta:"))

intb = Val(InputBox("введите intb:"))

intc = Val(InputBox("введите intc:"))

intd = Val(InputBox("введите intd:"))

If inta < intd Then intanew = inta + 3: intbnew = intb + 7: intcnew = intb + inta

MsgBox "inta=" & inta & Chr(10) & Chr(13) & _

"intb=" & intb & Chr(10) & Chr(13) & _

"intc=" & intc & Chr(10) & Chr(13) & _

"intd=" & intd & Chr(10) & Chr(13) & _

"intanew=" & intanew & Chr(10) & Chr(13) & _

"intbnew=" & intbnew & Chr(10) & Chr(13) & _

"intcnew=" & intcnew

End Sub
Если inta=4, intb=8, intc=1, intd=7, òî intanew=7, intbnew=15, intc=12. Иначе inta=9, intb=8, intc=1, intd=8, òî intanew=0, intbnew=0, intc=0.


Существуют четыре целых числа, если inta мешьше intd, то к inta прибавить 3 и intb прибавить 7 и intc приравнять сумме inta и intb, иначе inta прибавить 30 и intb прибавить 70 и intc приравнять сумме inta и intb
Sub testsub1()

Dim inta As Integer, intb As Integer, intc As Integer, _

intd As Integer, intanew As Integer, intbnew As Integer, _

intcnew As Integer

inta = Int(Rnd * 10 + 1): intb = Int(Rnd * 10 + 1)

intc = Int(Rnd * 10 + 1): intd = Int(Rnd * 10 + 1)

If inta < intd Then

intanew = inta + 3

intbnew = intb + 7

intcnew = intb + inta

Else

intanew = inta + 30

intbnew = intb + 70

intcnew = intb + inta

End If

MsgBox "inta=" & inta & Chr(10) & Chr(13) & _

"intb=" & intb & Chr(10) & Chr(13) & _

"intc=" & intc & Chr(10) & Chr(13) & _

"intd=" & intd & Chr(10) & Chr(13) & _

"intanew=" & intanew & Chr(10) & Chr(13) & _

"intbnew=" & intbnew & Chr(10) & Chr(13) & _

"intcnew=" & intcnew

End Sub


Если inta=5, intb=3, intc=7, intd=7, то intanew=8, intbnew=10, intc=8. Если inta=6, intb=10, intc=10, intd=3, то intanew=36, intbnew=80, intc=60.

При выполнении блоковой формы инструкции if также сначала проверяется Условие. Если оно имеет значение True, то выполняются инструкции, следующие за словом then. Если же Условие имеет значение false, то при наличии одного или нескольких условий elseif выполняется последовательная проверка каждого из них.В случае истинности одного из условий осуществляется выполнение следующих за соответствующим предложением then. В том случае, если ни из условий elseif не имеет значение true или предложения elseif отсутствуют, то выполняются инструкции, следующие за else.После выполнения инструкций, следующих за then или else, происходит передача управления на инструкцию, расположенную непосредственно за end if.

Ввести три числа: x, y, z.Если сумма трех попарно различных чисел x, y, z меньше 1, то меньшее из x,y заменить полусуммой y и z, иначе большее из x и z заменить на y4 .

Sub lop177()

Dim x, y, z, s

x = Val(InputBox("введите x:"))

y = Val(InputBox("введите y:"))

z = Val(InputBox("введите z:"))

If (x + y + z) < 1 Then

If x < y Then

x = (y + z) / 2

Else

y = (y + z) / 2

End If

MsgBox "x=" & x & Chr(10) & Chr(13) & _

"y=" & y & Chr(10) & Chr(13) & _

"z=" & z

Else

If x > z Then

x = y ^ 4

Else

z = y ^ 4

End If

MsgBox "x=" & x & Chr(10) & Chr(13) & _

"y=" & y & Chr(10) & Chr(13) & _

"z=" & z

End If

End Sub
^ Инструкция Select Case

Инструкция Select Case выполняет одну из нескольких групп инструкций в зависимости от значения некоторого выражения. Ниже приведен ее синтаксис:

Select Case Выражение

[Case Список_выражений-n

[Инструкции-n

[Case Else

[Инструкции_else]]

Еnd Select

Элементы синтаксиса инструкции Select Case представлены в табл.2
Таблица 2 Элементы синтаксиса инструкции Select Case



Элемент

Описание

Выражение


Список_выражений-n


Инструкции-n

Инструкции_else

Обязательный элемент — любое числовое или строковое выражение
Обязательный элемент синтаксиса при наличии предложения Case. Представляет собой список с разделителями. Синтаксис такого списка может быть одним из представленных ниже:

Выражение,

Выражение_1 To Выражение_2,

Is Оператор сравнения_сравнения выражения

Ключевое слово To задает диапазон значений. При использовании ключевого To слова перед ним должно находиться меньшее значение.

Ключевое слово Is с операторами сравнения [не должны

использоваться операторы Is и Like) задает диапазон значений.

Если ключевое слово Is не указано, оно вставляется по умолчанию.

Необязательный элемент — одна или несколько инструкций,

которые выполняются в том случае, если выражение совпадает с любым компонентом списка Список_выражений-n

Необязательный элемент — одна или несколько инструкций,

выполняемых в том случае, если выражение не совпадает

ни с одним из предложений Case


Перейдем к алгоритму работы инструкции Select Case. Если выражение совпадает с любым выражением из Списка_выражений-n в предложении Case, то все инструкции, следующие за данным предложением Case до следующего выражения Case (в случае если это предложение является последним, то до инструкции End Select). После этого управление передается инструкции, следующей за End Select.

В Н И М АН И Е . Если выражение совпадает с выражениями из списка в нескольких предложениях Сазе, то выполняются только инструкции, расположенные после первого из этих предложений.

Отметим некоторые свойства инструкции Case Else:

Предложение Case Else задает список Инструкции_else. Эти инструкции будут

выполнены, если нет ни одного совпадения Выражения и элемента Список_вы-

ражений-n ни в одном из предложений Case .

Хотя предложение Case Else не является обязательным, рекомендуется поме-

щать его в блок Select Case, чтобы предусмотреть неожиданные значения выра-

жения.

Если ни в одном предложении ^ Case элемент Слисок_выражений-n не содержит

значения, отвечающего аргументу Выражение, и отсутствует инструкция Case Else, выполнение программы продолжается с инструкции, следующей за инст-

рукцией End Select.

В предложении Case допускается использование нескольких выражений или

диапазонов. Например, допустимым является следующее предложение Case :

Case 1 То 5, 8 То 10, 15, 18, Is > Мах _number

(ПРИМЕЧАНИЕ Обратите внимание, что следует отличать оператор сравнения Is от ключевого слова 1з, которое используется в инструкции Select Case.

Допускается вложенность инструкций Select Case. При этом каждой вложен-

ной инструкции Select Case должна соответствовать инструкция End Select.

Sub testsub1()

Dim sngналог As Single, intпараметр, sngсумма

intпараметр = Val(InputBox("введите целое число:"))

sngсумма = Val(InputBox("введите число:"))

Select Case intпараметр

Case 0

sngналог = sngсумма * 0

Case 1

sngналог = sngсумма * 0.05

Case 2

sngналог = sngсумма * 0.1

Case 3

sngналог = sngсумма * 0.15

Case 4

sngналог = sngсумма * 0.2

Case Else

sngналог = sngсумма * 0

End Select

MsgBox "sngналог=" & sngналог

End Sub

В этом примере осуществляется выбор ставки налога (0; 0,05; 0,10; 0,15; 0,20) в

зависимости от значения выражения intпараметр. Предусмотрен также вариант

выбора, когда значения выражения intпараметр не совпадают ни с одним выражением в предложениях Case.
Инструкция Go to
Существует еще одна инструкция безусловного перехода Go to, которая в общем виде записывается так:

Go to Метка.

Метка это идентификатор с двоеточием, стоящий перед инструкцией, которая должна быть выполнена после инструкции Go to.

Пример 1 написать программу вычисления , если введен правильный пароль.

Sub pparol()

Dim parol, x, y

finish:

parol = (InputBox("введите пароль"))

If parol <> "nataly" Then 'nataly правильный пароль

MsgBox "неверный пароль, доступ запрещен"

GoTo finish

End If

x = Int(Rnd * 10 + 1): y = x ^ 0.5

MsgBox "x=" & x & "y=" & y

End Sub
Sub pr42()

'Ввести три любых числа, сумму двух чисел поделить на третье, сделать про‘верку, что в знаменателе число <>0.

Dim x, y, sum, z

x = Val(InputBox("введите x:"))

y = Val(InputBox("введите y:"))

1: z = Val(InputBox("введите z:"))

If z <> 0 Then

sum = (x + y) / z

ElseIf z = 0 Then

MsgBox "введен ноль"

GoTo 1

End If

MsgBox "sum=" & sum

End Sub
Циклы

Циклы предназначены для многократного выполнения группы инструкций. В VBA для организаций циклов используются инструкции For…next, While…Wend, Do …Loop и For Each… Next.

Инструкция For…next

Эта инструкция повторяет выполнение группы инструкций указанное число раз.

Синтаксис инструкции For…next:

For Счетчик = Начало To Конец [Step Шаг]

[Инструкции]

[Exit For]

[Инструкции]

Next[Счетчик]
Синтаксис инструкции содержит For…next элементы, представленные в табл. 1.
Таблица Элементы синтаксиса инструкции For…next

Элемент

Описание



Счетчик

Обязательный элемент. Числовая переменная (за исключением типа Boolean), используемая в качестве счетчика цикла. Эта переменная не может быть элементом массива

Начало

Обязательный элемент — начальное значение переменной Счетчик

Конец

Обязательный элемент конечное значение переменной Счетчик

Шаг

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

Инструкции

Необязательный элемент — одна или несколько инструкций. составляющих тело цикла

Аргумент Шаг может быть как положительным, так и отрицательным. Значение этого аргумента определяет выполнение цикла в соответствии с правилами, приведенными в табл. 2.
Таблица 2. Выполнение цикла в зависимости от значения аргумента Шаг

Значение

Условие

Положительное или 0

Отрицательное

Счетчик<= Конец

Счетчик>= Конец


После выполнения всех инструкций цикла значение элемента Шаг добавляется к текущему значению переменной Счетчик. После этого инструкции цикла либо выполняются еще раз, либо цикл завершается (если значение счетчика сравниваетcя со значением элемента конец) и выполнение программы продолжается с инструкции, следующей за инструкцией Next.

Пример цикла For…Next

Подсчитать сумму четных чисел в диапазоне от 0 до 10 включительно.

Sub p1()

Dim i As Integer, sum As Integer

For i = 0 To 10 Step 2

sum = sum + i

Next i

MsgBox "sum=" & sum

End Sub


Подсчитать произведение четных чисел в диапазоне от 2 до 10 включительно.
Sub p2()

Dim i As Integer, pr As Integer

pr = 1

For i = 2 To 10 Step 2

pr = pr * i

Next i

MsgBox "pr=" & pr

End Sub



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

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

Sub p3()

Dim i, j As Integer

Dim a(2 To 9, 1 To 10), str_a

For i = 2 To 9

For j = 1 To 10

a(i, j) = i & "x" & j & "=" & (i * j)

str_a = str_a & " " & a(i, j) & " "

Next j, i

MsgBox str_a

End Sub

^ Инструкция Do…Loop

Инструкция Do…Loop имеет два варианта синтаксиса: в первом варианте условие проверяется в начале цикла, во втором условие проверяется после выполнения инструкций тела цикла.

При использовании ключевого слова While цикл будет выполняться, пока условие имеет значение True со словом Until - пока условие не примет значение True.

Первый вариант синтаксиса инструкции Do…Loop:

Do [{While | Until} Условие]

[Инструкции]

[Exit Do]

[Инструкции]

loop

Пример. Даны два положительных целых числа найти их наибольший общий делитель (например 45 и 27 нод=9)

Sub nod()

Dim a, b, r, nod

a = Val(InputBox("введите a:"))

b = Val(InputBox("введите b:"))

Do While (a Mod b) <> 0

r = a Mod b

a = b

b = r

Loop

nod = b 'nod – наибольший общий делитель

MsgBox "a=" & a & " " & "b=" & b & Chr(10) & Chr(13) & _

"nod=" & nod

End Sub
Пример. Определение простого числа. Например 11 mod 2=1,

11 mod 3=2, 11 mod 4=2, 11 mod 5=1, 11 mod 6=5, 11 mod 7=4,

11 mod 8=3, 11 mod 9=2, 11 mod 10=1, 11 mod 11=0, 11 простое число.

Sub prostoe()

Dim n, d, r

n = Int(Rnd * 100) + 1

d = 2

Do While n Mod d <> 0

r = n Mod d

d = d + 1

Loop

If d = n Then

MsgBox "n простое число" & " " & "n=" & n

Else

MsgBox "n – непростое число" & " " & "n=" & n

End If

End Sub



Второй вариант синтаксиса инструкций Do… Loop

Do

[Инструкции]

[Exit Do]

[Инструкции]

Loop [{While | Until} Условие]
Пример. Определение простого числа.

Sub prostoe1()

Dim n, d, r

n = Int(Rnd * 100) + 1

d = 2

Do

r = n Mod d

d = d + 1

Loop While n Mod d <> 0

If d = n Then

MsgBox "n простое число " & "n=" & n

Else

MsgBox "n не простое число" & " " & "n=" & n

End If

End Sub

Таблица 3, Элементы синтаксиса инструкции Do Loop



Элемент

Описание

Условие

Необязательный элемент. Представляет числовое выражение или строковое выражение, которое имеет значение True или False. Если условие имеет значение Null, то оно рассматривается как значение False.

Инструкции

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


В первом варианте синтаксиса цикла Do..Loop и в цикле сначала всегда проверяется условие, поэтому возможна ситуация, когда инструкции могут ни разу не выполняться. Во втором варианте синтаксиса Do..Loop инструкции, составляющие тело цикла, будут выполнены по крайней мере один раз.

Массивы

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

Одномерный массив можно представить как строку или столбец переменных, а двумерный – как таблицу или матрицу, в которой переменные расположены в m строках и n столбцах.

Определение массивов. Массивы в столбцах должны быть определены в операторе Dim.

Различают статические и динамические массивы.

^ Объявление статического массива

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

При объявлении массива после его имени в круглых скобках указывается верхняя граница массива. По умолчанию верхней границей считается 0.
Dim имя_массива(размерность_1[,размерность_2]) as (тип элементов массива

Где:

имя_массива - имя переменной, определяемое по общим правилам

записи переменной, возможно с указанием типа

хранимых данных;
размерность_1; - индексы массива – целые положительные числа.

размерность_2 Индекс массива определяет число элементов в

одном измерении.

Тип элементов массива – определяет значение элементов

массива: «целые числа», «вещественные

числа», «символьные переменные».
Например,

Dim a(20) as Integer

Объявляется массив из 21 элемента, индекс массива изменяется от 0 до 20.

Можно задавать многомерные массивы, например:

Dim a(20,20) as Integer

Объявляется массив размерностью 2121.

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

Dim имя_переменной(нач.зн. TO кон.зн.]) As {тип элементов массива}

Где:

Нач. зн. – начальное значение индекса;

Кон. зн. – конечное значение индекса.

Например:

Dim a(3 to 10) as Integer

В этом случае задается массив из 8 элементов. Индекс элементов массива изменяется от 3 до 10.
^ Объявление динамического массива
В случае когда размер массива заранее неизвестен, VBA позволяет использовать динамические массивы, размеры которых можно изменять во время выполнения. Применение динамических массивов позволяет эффективно управлять памятью, выделяя память под большой массив лишь на то время, когда этот массив используется, а затем освобождая ее.

Создание динамического массива осуществляется следующим образом.

1. Объявляется массив с помощью ключевых слов, используемых при создании массива фиксированного размера. Список размерностей массива остается пустым. Например:

Dim a() as Integer

2.С помощью выполняемого оператора ReDim указывается размерность массива в виде числа или выражения. Синтаксис оператора ReDim аналогичен оператора объявления массива фиксированного размера. Например, размерность массива может быть задана любым из следующих способов:

ReDim a(n) – объявляет массив из n+1 элемента, причем x нужно определить заранее, индекс элемента массива меняется от 0 до x+1;

ReDim a(20) - объявляет массив из 21 элемента, индекс элемента массива меняется от 0 до 21;

ReDim a(1 to 20) - объявляет массив из 20 элементов, индекс элемента массива меняется от 1 до 20.

При объявлении оператора ReDim данные, размещенные в массиве ранее теряются. Это удобно в том случае, если данные вам больше не нужны и вы хотите переопределить размерность массива и подготовить его для размещения новых данных.

Sub prim3()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

ReDim a(4)

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_anew = str_anew & a(i) & " "

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

str_anew

End Sub
Если вы хотите изменить размер массива, не потеряв при этом данных, то необходимо воспользоваться ключевым словом Preserve. Например, приведенный ниже программный код увеличивает размер массива на единицу без потери хранящихся в массиве данных:

ReDim preserve a(n+1).

Sub prim33()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

ReDim Preserve a(n+1)

For i = 0 To n+1

a(n+1)=13

str_anew = str_anew & a(i) & " "

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

str_anew

End Sub
^ Ввод и вывод элементов массива



  1. Ввод и вывод элементов статического массива.


В этом примере осуществляется ввод и вывод массива a(20), состоящего из 21 элемента.

Sub prim1()

Dim a(20), str_a,i

For i = 0 To 20
a(i) = Int(Rnd * 100) + 1 ‘ввод элементов массива
str_a = str_a & a(i) & " " ‘преобразование числовых переменных в

‘строковые и сцепление их один за

Next i ‘другим
MsgBox str_a ‘ вывод элементов массива

End Sub
В этом примере осуществляется ввод и вывод массива a(3 to 10), состоящего из 8 элементов.
Sub prim2()

Dim a(3 To 10), str_a,i

For i = 3 To 10

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub


  1. Ввод и вывод элементов динамического массива.


В этом примере осуществляется ввод и вывод массива a().

Количество элементов массива n+1.
Sub prim3()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:")) ‘вводится количество элементов

ReDim a(n) ‘указывается количество элементов массива

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub
В этом примере осуществляется ввод и вывод массива a(20).

Количество элементов массива 21.
Sub prim4()

Dim a(), str_a, i, x

ReDim a(20)

For i = 0 To 20

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub
В этом примере осуществляется ввод и вывод массива a(1 to 20).

Количество элементов массива 20.

Sub prim5()

Dim a(), str_a, i, x

ReDim a(1 To 20)

For i = 1 To 20

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

MsgBox str_a

End Sub
Способы обработки массивов


  1. Нахождение суммы, произведения, среднего арифметического, среднего геометрического элементов массива.

1.1 Нахождение суммы элементов массива.
Sub prim6()

Dim a(), str_a, i, sum

n = Val(InputBox("введите количество элементов массива n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

sum = sum + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum=" & sum

End Sub


    1. Нахождение суммы четных и нечетных элементов массива.

Sub prim7()

Dim a(4), str_a, i, sumchet, sumnechet

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) Mod 2 = 0 Then sumchet = sumchet + a(i)

If a(i) Mod 2 <> 0 Then sumnechet = sumnechet + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sumchet=" & sumchet & "sumnechet=" & sumnechet

End Sub


    1. Нахождение суммы элементов массива, значения которых находятся в интервале от 50 до 100.

Sub prim8()

Dim a(4), str_a, i, sum

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) >= 50 And a(i) <= 100 Then sum = sum + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum=" & sum

End Sub
1.4 Нахождение суммы элементов массива с четными индексами и суммы элементов массива с нечетными индексами.
Sub prim9()

Dim a(4), str_a, i, sum1, sum2

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If i Mod 2 = 0 Then sum1 = sum1 + a(i)

If i Mod 2 <> 0 Then sum2 = sum2 + a(i)

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum1=" & sum1 & "sum2=" & sum2

End Sub


    1. Нахождение суммы индексов четных элементов и произведения индексов нечетных элементов массива. Начальное значение произведения надо задавать равным 1.


Sub prim11()

Dim a(1 To 4), str_a, i, sum, pr

pr = 1

For i = 1 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) Mod 2 = 0 Then sum = sum + i

If a(i) Mod 2 <> 0 Then pr = pr * i

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

"sum=" & sum & "pr=" & pr

End Sub

2.Нахождение произведения и среднего геометрического элементов массива.

    1. Нахождение среднего арифметического и среднего геометрического элементов массива.

Sub prim12()

Dim a(4), str_a, i, sum, pr

pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

sum = sum + a(i)

pr = pr * a(i)

Next i

sa = sum / 5: sg = pr * (1 / 5)

MsgBox str_a & Chr(10) & Chr(13) & _

"sa=" & sa & "sg=" & sg

End Sub



    1. Задан массив а(4), найти индексы тех элементов, значения которых превосходят цифру 50.


Sub prim13()

Dim a(4), str_a, i, str_b, b(4)

pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) > 50 Then

b(i) = i

str_b = str_b & b(i) & " "

End If

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"массив индексов:" & str_b

End Sub

3 Обработка элементов массива.

3.1 Задан массив а(4), значения элементов которого заданы генератором случайных чисел, заменить единицами, те элементы, значения которых превосходят 50.

Sub prim14()

Dim a(4), str_a, i, str_anew

pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) > 50 Then a(i) = 1

str_anew = str_anew & a(i) & " "

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"новый массив:" & str_anew

End Sub

3.2 Нахождение максимального и минимального элементов массива и обмен их местами.

Sub prim15()

Dim a(4), str_a, i, str_anew, max, min, imax, imin

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

max = a(0): imax = 0: min = a(0): imin = 0

For i = 1 To 4

If a(i) > max Then max = a(i): imax = i

If a(i) < min Then min = a(i): imin = i

Next i

a(imax) = min: a(imin) = max

For i = 0 To 4

str_anew = str_anew & a(i) & " "

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"max=" & max & "imax=" & imax & Chr(10) & Chr(13) & _

"min=" & min & "imin=" & imin & Chr(10) & Chr(13) & _

"новый массив:" & str_anew

End Sub

3.2 Подсчет количества элементов массива, например больших 50.

Sub prim17()

Dim a(4), str_a, i, str_anew, k

k = 0

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

If a(i) > 50 Then k = k + 1

str_anew = str_anew & a(i) & " "

Next i

MsgBox "исходный массив:" & str_a & Chr(10) & Chr(13) & _

"k=" & k

End Sub
3.3 Обработка двух массивов.

Заданы два массива a(4) и b(4) заполнить их случайными значениями и поменять местами четвертые элементы массивов.

Sub prim16()

Dim a(4), b(4), str_a, str_b, i, str_anew, str_bnew, buf

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

b(i) = Int(Rnd * 10) + 1

str_b = str_b & b(i) & " "

Next i

buf = a(4)

a(4) = b(4)

b(4) = buf

For i = 0 To 4

str_anew = str_anew & a(i) & " "

str_bnew = str_bnew & b(i) & " "

Next i

MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _

"исходный массив b:" & str_b & Chr(10) & Chr(13) & _

"новый массив a:" & str_anew & imin & Chr(10) & Chr(13) & _

"новый массив b:" & str_bnew

End Sub
3.3 Обработка элементов массива в блоках разветвления и циклов.

Структура программы:

  1. Заголовок.

  2. Описание переменных.

  3. Ввод элементов массива (или массивов).

  4. Условие.

  5. Инструкции, если Условие выполняется.

  6. Инструкции, если Условие не выполняется.

  7. Вывод результата.


Пример: Заданы два массива a(4) и b(4), если количество отрицательных элементов массива a(4) больше количества отрицательных массива b(4), то положительные элементы массива a(4) заменить на 1, а положительные элементы массива b(4) заменить на нули.

Sub prim18()

Dim a(4), b(4), str_a, str_b, i, str_anew, str_bnew, k, t, sum, pr

k = 0: t = 0: pr = 1

For i = 0 To 4

a(i) = Int(Rnd * 100) - 50

str_a = str_a & a(i) & " "

b(i) = Int(Rnd * 10) - 5

str_b = str_b & b(i) & " "

If a(i) < 0 Then k = k + 1

If b(i) < 0 Then t = t + 1

Next i

If k > t Then

For i = 0 To 4

If a(i) > 0 Then a(i) = 1

If b(i) > 0 Then b(i) = 0

str_anew = str_anew & a(i) & " "

str_bnew = str_bnew & b(i) & " "

Next i

MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _

"исходный массив b:" & str_b & Chr(10) & Chr(13) & _

"новый массив a:" & str_anew & imin & Chr(10) & Chr(13) & _

"новый массив b:" & str_bnew & imin & Chr(10) & Chr(13) & _

"k=" & k & "t=" & t

Else

For i = 0 To 4

sum = sum + a(i): pr = pr * b(i)

Next i

MsgBox "исходный массив a:" & str_a & Chr(10) & Chr(13) & _

"исходный массив b:" & str_b & Chr(10) & Chr(13) & _

"sum=" & sum & "pr=" & pr & Chr(10) & Chr(13) & _

"k=" & k & "t=" & t

End If

End Sub
3.4 Просмотр диапазона ячеек рабочего листа с помощью объекта Sheets (рабочие листы) и метода Range для доступа к ячейкам.
Пример. Написать программу для заполнения ячеек рабочего листа и вывести общую сумму.

Sub pr61()

Dim i, n, x, sum, str_x As String

n = Val(InputBox("введите n:"))

i = 1: sum = 0

For i = 1 To n

x = Int(Rnd * 100) + 1

str_x = str_x & x & " "

sum = sum + x

Sheets("лист 1").Cells(i, 3).Value = x

Sheets("лист 1").Cells(5, 4) = sum

Next i

End Sub

3.5 Заполнение элементов массива значениями рабочего листа.

Sub pr()

Dim i As Integer,mass(), str_mass 'переменная для элементов массива

ReDim mass(10)

For i = 1 To 10

Sheets("лист1").Cells(1, i).Value = Int(100 * Rnd + 1)

mass(i) = Sheets("лист1").Cells(1, i).Value

str_mass = str_mass & mass(i) & " " 'накопление элементов массива для ‘вывода заполненных значений

Next i

MsgBox str_mass

End Sub

(1,i) – первая цифра строка, вторая столбец.


Скачать файл (2267.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru