Microsoft Vsual Basic word.помогите плиз срочно надо.
1 Цель работы
Получить навыки разработки программ с использованием цик-лических структур.
2 Общие сведения
Алгоритмическая структура «Цикл» организует многократное выполнение одного и того же действия или последовательности дей-ствий. Многократно повторяемые действия составляют тело цикла. Прекращение повторений и выход из цикла осуществляется при вы-полнении определённого условия выхода.
Различают циклы с предусловием, с постусловием и с парамет-ром. В VBA реализованы все типы циклов.
2.1 Организация циклов
2.1.1 For — Next
Цикл «For – Next» относится к циклам с параметром. Количество повторений зависит от параметра оператора цикла.
Синтаксис
For Счетчик = Начало То Конец [Step Шаг]
[Инструкции]
[Exit For]
[Инструкции]
Next [Счетчик]
Повторяет выполнение группы инструкций, пока значение переменной «Счетчик» изменяется от начального до конечного с указанным шагом. Если Шаг не указан, то он полагается равным 1. Досрочный выход из цикла осуществляется с помощью инструкции «Exit For» Алгоритм цикла «For – Next» приведён на Рис. 1. Для обозначения циклов с модификаторами применяется также сокращённая запись алгоритма Рис. 2.
Цикл «For – Next» предназначен для использования в тех случаях, когда число повторений известно до начала выполнения цикла.
Пример
Заполнить массив из 20 элементов случайными числами и вы-вести их.
Схема алгоритма
Рис. 3. Схема алгоритма генерации и вывода массива из 20 случайных чисел.
Текст программы
Sub RandArr () ‘ процедура
Dim i As Integer, A (20) As Single
‘ описываем счётчик (целое число) и массив
Randomize ‘ инициализация ГСЧ
For i = 0 To 19 ‘ запускаем цикл от 0 до 19
A (i) = Rnd () ‘ присваиваем i-му элементу массива случайное число
Next I ‘ заканчиваем цикл
For i = 0 To 19 ‘ запускаем цикл от 0 до 19
Selection.TypeText (Str (A (i)) + Chr (13))
‘в документ записываем i-й элемент и переводим строку
Next I ‘ заканчиваем цикл
End Sub ‘ заканчиваем процедуру
2.1.2 For Each – Next
Цикл «For Each - Next» так же относится к циклам с параметром.
Синтаксис
For Each Элемент in Группа
[Инструкции]
[Exit For]
[Инструкции]
Next [Элемент]
Повторяет выполнение группы инструкций для каждого элемента массива или семейства. Альтернативный способ выхода из цикла предоставляет инструкция «Exit For». Схема алгоритма приве-дена на Рис. 4.
Пример
Для каждого абзаца текущего документа установить отступ слева со сдвигом на миллиметр относительно предыдущего.
Схема алгоритма
Рис. 5. Алгоритм изменений отступов абзацев.
Текст программы
Sub ForEach() ‘Заголовок процедуры
Dim i As Single ‘Описание переменной – величины сдвига
i = 0 ‘Начальный сдвиг равен нулю
For Each Paragraph In ActiveDocument.Paragraphs
‘Для всех абзацев текущего документа
Paragraph.LeftIndent = MillimetersToPoints(i) ‘Отступ слева ус- ‘танавливаем в i мм. Для этого преобразуем миллиметры в пункты.
i = i + 1 ‘Увеличиваем величину отступа на 1 мм.
Next Paragraph ‘Переходим к следующему абзацу.
End Sub ‘Конец процедуры
2.1.3 Do Until — Loop
Цикл «Do Until – Loop» относится к циклам с предусловием. Это означает, что условие выхода из цикла проверяется перед вы-полнением операторов, составляющих тело цикла. Следовательно, если условие выхода выполняется до начала цикла, инструкции цикла не будут выполнены ни разу.
Синтаксис
Do [Until Условие]
[Инструкции]
[Exit Do]
[Инструкции]
Loop
Повторяет выполнение набора инструкций, пока условие не примет значение True. Сначала проверяется условие, а потом выполняется инструкция. Альтернативный способ выхода из цикла предоставляет инструкция «Exit Do».
Схема алгоритма изображена на Рис. 6.
2.1.4 Do — Loop Until
Цикл «Do Until – Loop» относится к циклам с постусловием. Это означает, что условие выхода из цикла проверяется после выполнения операторов, составляющих тело цикла. Следовательно, инструкции цикла будут выполнены хотя бы один раз.
Синтаксис
Do
[Инструкции]
[Exit Do]
[Инструкции]
Loop [Until Условие]
Повторяет выполнение набора инструкций, пока условие не примет значение True. Условие проверяется после выполнения инст-рукции, по крайней мере, один раз. Альтернативный способ выхода из цикла предоставляет инструкция «Exit Do».
Схема алгоритма изображена на Рис. 7.
Пример
Ввести число от 0 до 20.
Схема алгоритма
Рис. 8. Схема алгоритма ввода числа больше 0 и меньше 20
Текст программы
Sub InputNum1 () ‘Начало процедуры
Dim Num As Integer ‘Переменная, в которую вводим число
Do ‘Начало цикла
Num = InputBox ("Введите число от 0 до 20") ‘Вводим число
Loop Until (Num>0) And (Num<20) ‘Если 0<число<20 конец цикла.
MsgBox (Num) ‘Выводим число
End Sub Конец процедуры
2.1.5 Do While — Loop
Цикл «Do While – Loop» относится к циклам с предусловием. В отличие от цикла «Do Until - Loop» выход из цикла происходит, когда условие, стоящее в заголовке, не выполняется. То есть это условие является условием продолжения работы цикла.
Синтаксис
Do [While Условие]
[Инструкции]
[Exit Do]
[Инструкции]
Loop
Повторяет выполнение набора инструкций, пока условие имеет значение True. Условие проверяется после выполнения инструкции, по крайней мере, один раз. Альтернативный способ выхода из цикла предоставляет инструкция «Exit Do».
Схема алгоритма изображена на Рис. 9.
Пример
Ввести число от 0 до 20. В случае ошибки выводить замечание.
Схема алгоритма
Рис. 10. Алгоритм ввода числа с выводом замечания в случае ошибки
Текст программы
Sub InputNum2() ‘Начало процедуры
Dim Num As Integer ‘Переменная, в которую вводим число
Num = InputBox("Введите число от 0 до 20") ‘Ввод числа
Do While (Num <= 0) Or (Num >= 20) ‘Если выполняется – цикл
Num=InputBox("Будте внимательны! Число от 0 до 20.")
‘Ввод числа, при этом выдаётся замечание
Loop ‘Конец цикла
MsgBox (Num) ‘Вывод числа
End Sub ‘Конец процедуры
2.1.6 Do — Loop While
Цикл «Do – Loop While» относится к циклам с постусловием. В отличие от цикла «Do - Loop Until» выход из цикла происходит, когда условие, стоящее в заголовке, не выполняется. То есть это условие является условием продолжения работы цикла.
Синтаксис
Do
[Инструкции]
[Exit Do]
[Инструкции]
Loop [While Условие]
Повторяет выполнение набора инструкций, пока условие имеет значение True. Сначала проверяется условие, а потом выполняется инструкция. Альтернативный способ выхода из цикла предоставляет инструкция «Exit Do».
Схема алгоритма изображена на Рис. 11.
2.1.7 While — Wend
Цикл «While - Wend» является реализацией классического цикла с предусловием, в котором заданное условие является условием продолжения работы цикла. Фактически этот цикл дублирует цикл «Do While - Loop», при этом обладает меньшими возможностями.
Синтаксис
While Условие
[Инструкции]
Wend
Выполняет последовательность инструкций, пока заданное ус-ловие имеет значение True
Схема алгоритма соответствует схеме алгоритма цикла «Do While - Loop» (Рис. 9)
2.2 Массивы
Массив представляет собой совокупность переменных одного типа, объединённых общим именем. Доступ к каждому элементу массива осуществляется по его порядковому номеру – индексу.
Массив относится к структурированному типу данных.
Массивы применяются для хранения данных одного типа, логи-чески связанных в некоторую совокупность, например, коэффициен-тов ряда, результатов измерений, зарплаты сотрудников и т.п.
В связи с тем, что элементов массива может быть много, учиты-вая, что при вводе или обработке массива с каждым элементом вы-полняются, как правило, однотипные действия, для работы с масси-вами чаще всего применяются алгоритмы циклической структуры.
Нумерация элементов массива осуществляется начиная с 0 (по умолчанию) или с 1 (После применения инструкции Option Base = 1). Кроме того, при описании массива можно указать любое начальное значение индекса.
Dim R(10) As Integer ‘описание массива с именем «R» из 11 целых чисел. Номера элементов изменяются от 0 до 10.
R (1) =2 ‘присваивает второму элементу массива значение 2
A=R (10) ‘присваивает значение последнего элемента массива переменной «A».
Dim B (1 To 10, 1 To 16) As Single ‘описание двумерного массива вещественных чисел размерности 10х16, номера элементов начи-наются с единицы.
Если при описании массива указана размерность, память под элементы массива отводится перед началом выполнения программы. В случае, когда размер массива заранее неизвестен, имеется возможность создать такой массив, размер которого задаётся и может изменяться в процессе выполнения программы. Такой тип массива называется динамическим. Работа с динамическими массивами требует известной аккуратности, так как по ошибке или недосмотру можно задать размер массива, на который у операционной системы может не хватить свободной памяти. В результате это может привести не только к аварийному завершению программы, но и к сбою в операционной системы и её аварийному завершению.
Dim D () As Single. ‘Описание динамического массива
Для определения размерности массива обязательно использова-ние функции ReDim.
Синтаксис
ReDim [Preserve] ИмяПеременной (Индексы) [As Тип] [, Имя-Переменной (Индексы) [As Тип]]
Аргументы
Preserve -ключевое слово, используемое для сохранения данных в существующем массиве при изменении значения последней размерности
ИмяПеременной - Имя переменной, удовлетворяющее стан-дартным правилам именования переменных
Индексы - Размерности переменной массива; допускается опи-сание до 60 размерностей. Аргумент индексы использует следующий синтаксис: [Нижний То] Верхний [, [Нижний То] Верхний]. Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция option Base, нижняя граница массива равняется нулю
Тип - Тип данных массива
Для создания массива, значения элементов которого известны, можно применять функцию «Array».
Синтаксис
Array (СписокАргументов)
Возвращаемое значение
Возвращает массив типа variant.
Аргументы
СписокАргументов представляет разделенный запятыми список значений, присваиваемых элементам массива.
Пример
Описание массива «День», элементам которого присвоены со-кращённые названия дней недели:
Dim День As Variant День = Array ("Пн", "Вт", "Ср", "Чт", "Пт")
Для определения номеров первого и последнего элементов мас-сива используются функции «LBound» и «UBound».
Синтаксис
LBound (ИмяМассива [, Размерность])
UBound (ИмяМассива [, Размерность])
Возвращаемое значение
Минимальное и максимальное допустимое значение указанной размерности массива.
Аргументы
ИмяМассива — имя переменной массива
Размерность — целое число, указывающее размерность, ниж-нюю или верхнюю границу которой возвращает функция. Для первой размерности следует указать 1, для второй 2 и т. д. Если аргумент Размерность опущен, подразумевается значение 1
Функция «Erase» служит для очистки или повторной инициали-зации массива.
Синтаксис
Erase СписокМассивов
Повторно инициализирует элементы массивов фиксированной длины и освобождает память, отведенную для динамического массива,
Аргументы
СписокМассивов представляет имена одной или нескольких очищаемых переменных массивов, разделенных запятой. Инструкция Erase устанавливает элементы массивов фиксированной длины сле-дующим образом: массив чисел или строк фиксированной длины (присваивает каждому элементу значение 0), массив строк переменной длины (присваивает каждому элементу значение пустой строки), массив типа variant (присваивает каждому элементу значение Empty). Erase освобождает память, используемую динамическими массивами. Перед тем как из программы вновь появится возможность сослаться на динамический массив, необходимо переопределить размерности переменной массива с помощью инструкции ReDim.
3 Задание
1. Разработать алгоритм и программу на VBA по варианту.
2. Ввести программу в редактор VBA и добиться её выпол-нения.
3. Подготовить отчёт.
4 Содержание отчёта
1. Титульный лист.
2. Индивидуальное задание.
3. Схема алгоритма.
4. Текст программы с комментариями.
5. Ответы на контрольные вопросы.
5 Пример выполнения работы
Задание
Сформируйте массив целых чисел из диапазона [-x, x], x<=100, длиной N<=20 и определите произведение ненулевых элементов. 1 -2
Схема алгоритма
Рис. 12. Алгоритм программы вычисления произведения ненулевых элементов массива.
Текст программы
Sub Example()
Dim A(1 To 20), x, i, N As Integer, P As Long
Dim D As Boolean, S As String
N = InputBox("Введите длину массива от 1 до 20")
Do While (N < 1) Or (N > 20)
N = InputBox("Будте внимательны! Число от 1 до 20.")
Loop
x = InputBox("Введите диапазон чисел в пределах 100")
Do While (Abs(x) < 1) Or (Abs(x) > 100)
x = InputBox("Будте внимательны! Число от 1 до 100.")
Loop
Randomize
For i = 1 To N
A(i) = Int(Rnd * 2 * x - x) ‘Целые случайные числа из [-x,x]
Next i
P = 1 ‘Произведение начинаем вычислять с 1
D = True ‘Если не произойдёт переполнения, то останется True
For i = 1 To N ‘Цикл для всех элементов
If (A(i) <> 0) Then ‘Если элемент ненулевой
If Abs(2147483647 / A(i)) > Abs(P) Then ‘Если тип Long _
P = P * A(i) ‘ не переполнится, перемножаем.
Else ‘ Иначе
D = False ‘Если переменная типа Long переполнится
P = 0 ‘правильно произведение не вычислить…
End If
End If
Next i
If D Then MsgBox ("Произведение равно " & Str(P)) _
Else MsgBox ("Произведение слишком велико!")
For i = 1 To N
S = S & Str(A(i)) & " " ‘Формируем строку из массива
Next i
MsgBox ("Массив: " & S) ‘Выводим массив в окно вывода
End Sub
Сформируйте одномерный массив длиной N<=20, состоя-щий из целых чисел. Определите, на каких позициях нахо-дятся максимальные элементы. Индивидуальные задания
P/S
Хотя Рис.12. на быстрый взгляд код рабочий.
Есть сомнения только в этой строке:
Код:
A(i) = Int(Rnd * 2 * x - x) ‘Целые случайные числа из [-x,x]