Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Массивы и типовые алгоритмы их обработки.



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

Инструкция цикла For - Next

В случаях, когда заранее известно число повторений некоторого процесса, пользуются инструкцией цикла с параметром. Формат записи этой инструкции следующий:

For < параметр цикла> = < S1> To < S2> [Step < S3> ]

< Инструкции>

Next < параметр цикла>

где For … Next– заголовок цикла;

< параметр цикла> - числовая переменная, определяемая в заголовке цикла;

< инструкции> - тело цикла;

S1 и S2 – выражения, определяющие начальное и конечное значения параметра цикла;

S3 – выражение, определяющее шаг приращения значения выражения S1 до значения S2. При S3> 0, должно выполняться условие, что S1< =S2, в случае, если S3< 0 – S1> =S2. Выражение S3 является необязательным параметром инструкции FOR, поэтому при его отсутствии шаг принимает значение +1.

Пример 1. Инструкция выводит в одной строке цифры от 1 до 10.

S=””

For I=1 To 10

S=S+Str (I)+” ”

Next I

MsgBox S & ” Цифры от 1 до 10”

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

Когда значение параметра цикла превзойдет конечное значение < S2>, цикл завершится и будет выполняться инструкция, следующая за конструкцией For.

Пример 2.Фрагмент программы с инструкциями For для определения суммы квадратов значений от 0 до 2 с шагом 0, 5 и MsgBoxдля вывода на экран этого значения.

K=0

For x=0 To 2 Step 0.5

K=K+x^2

Next X

MSGBOX “сумма квадратов значений от 0 до 2 с шагом 0, 5 К = ”& К

 

Инструкция цикла For - Each – Next

Формат записи:

For Each Элемент In Группа

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

[Exit For ]

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

Next [Элемент]

Повторяет выполнение группы инструкций для каждого элемента массива (или семейства, лаб. работа 15).

Массивы

Понятие массива и его описание

Часто возникает необходимость решения задачи с большим, но конечным числом однотипных упорядоченных данных. Удобно описывать такой упорядоченный набор перенумерованных компонент одним идентификатором (именем). Для этого в языке VBA предусмотрен отдельный тип данных, называемый массивом. Массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Тогда для указания той или иной компоненты можно использовать имя массиваи порядковый номернужнойкомпонентыв этом массиве. Этот номер называется индексом массива.

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

Формат описания массива следующий:

Dim < идентификатор> ([< нижняя граница TO> ] < верхняя граница> ) As < тип>

где < идентификатор> - имя массива;

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

< верхняя граница индекса> - индекс последнего элемента массива. При использовании массивов не следует забывать, что в VBA индексирование по умолчанию начинается с нуля, т.е. индекс 0 обозначает первый элемент массива, индекс 1 – второй и т.д. Если есть необходимость изменить базу индекса, то в начале листа модуля записывают инструкцию Option Base 1или другой способ изменения базы – использование слова To при объявлении массивов,

 

Пример3.

Описание одномерного массива, состоящего из 10 вещественных чисел

Dim A(9) As Single

Описание одномерного массива, состоящего из 5 элементов целых значений

Dim A(1 TO 5) As Byte

Иногда в процессе выполнения программы требуется изменить размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не указывают его размерность, например:

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

Пример 4.

Dim C() As Single

m=InputBox(“Ввести конечное число элементов массива”, ”Ввод _ числа”)

ReDim C(m)

Действия над элементами массивами

 

После объявления массивов в разделе описания можно обработать каждый элемент массива в исполняемой части программы, указав имя массива и индекс элемента в круглых скобках. Например, второй элемент одномерного массива с именем A записывается как A(2).

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

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

Типовые алгоритмы обработки массивов

 

Рассмотрим основные действия над массивами и их элементами на примере следующих массивов.

Dim A(10) As Single, D(10) As Single

Dim I As Integer, J As Integer, K As Integer, VS As Single

 

Обнуление массива

For I=0 To 10

A(I)=0

Next I

Ввод-вывод массива

Ввод массива

For I=0 To 10”

A(I)=InputBox (“I=“+STR(I), ” Ввод значений массива A”)

Next I

 

Вывод массива

S=””

For I=1 To 10

S=S & A(I) & ” ”

Next I

MsgBox S,, ”Массив A из 10 элементов”

Копирование массива

For I=0 To 10

D(I)=A(I)

Next I

Поиск в массиве по условию

Поиск всегда осуществляется с использованием дополнительной переменной. Пусть требуется определить К - количество нулевых и N – количество отрицательных элементов массива A. Фрагмент программы будет иметь следующий вид.

K=0

N=0

For I=0 To 10

IF A(I)=0 Then

K=K+1

ElseIf A(I)< 0 THEN

N=N+1

End If

Next I

Перестановка

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

Пусть требуется поменять местами значения двух соседних элементов массива A, тогда соответствующий фрагмент программы с использованием промежуточной переменной X:

X=A(i): A(i)= A(i+1): A(i+1)=X

Типовые алгоритмы нахождения суммы и произведения в одномерном массиве представлены структурными схемами на рис. 7, а) и б).


Рис.7. Структурные схемы нахождения суммы а) и произведения б) элементов одномерного массива.

 

 

3.8 Демонстрационные примеры

Пример 1. Вычислить на ПК наибольший элемент массива X, состоящего из 10 элементов вещественного типа, и его индекс.

Структурная схема алгоритма приведена на рис. 8


Рис. 8. Структурная схема алгоритма нахождения наибольшего элемента массива.

Текст соответствующей программы:

 

Sub Primer1()

Dim X(9) As Single, MAX As Single, IMAX As Byte

Dim S As String

For I=0 To 9

X(I)=InputBox (“I=”+Str (I),, ”Значения элементов массива X”)

Next I

MAX=X(9)

IMAX=0

For I=0 To 9

If X(I)> MAX Then

MAX=X(I)

IMAX=I

EndIf

Next I

S=“Максимальный элемент массива “+Str (MAX)

S=S+” его порядковый номер “+Str (IMAX)

MsgBox S,, ”РЕЗУЛЬТАТ”

End Sub

 

 
 

Выполним тестирование программы для следующих исходных данных:

X(0)=10 X(1)=-1 X(2)=0 X(3)=0.5 X(4)=1.5 X(5)=1 X(6)=-0.1 X(7)=0.1 X(8)=0.35 X(9)=-1.5

Тогда максимальный элемент должен быть равен 10, его порядковый номер 1.

Результаты работы программы совпадают с ручным счетом.

Рис 9. Результаты выполнения программы.

 

Пример 2.Переписать все элементы одномерного массива А размера N (N< =10) в массив D, заменив отрицательные значения на их квадраты. Сравнить исходный массив и полученный массивы на равенство, выдав на экран дисплея сообщение о результатах сравнения. Ограничение: A(I) – целые.

 

Текст соответствующей программы:

 

Sub Primer2()

Dim A(10) As Integer, D(10) As Integer, N As Byte

Dim I As Byte, FLAG As Boolean, STROKA As String

Dim STROKA1 As String

N = InputBox(" ВВЕДИТЕ ЗНАЧЕНИЕ №" )

For I = 0 To N

A(I) = InputBox(" I=" + Str(I), " Значения элементов массива А" )

Next I

STROKA = " Исходный массив: "

STROKA1 = " Результирующий массив: "

For I = 0 To N

STROKA = STROKA + " " + Str(A(I))

If A(I) < 0 Then

A(I) = A(I) ^ 2

FLAG = False

Else

FLAG = True

End If

D(I) = A(I)

STROKA1 = STROKA1 + " " + Str(D(I))

Next I

If FLAG = False Then

STROKA1 = STROKA1 + " МАССИВЫ ОДИНАКОВЫЕ "

Else

STROKA1 = STROKA1 + " МАССИВЫ РАЗНЫЕ "

End If

MsgBox STROKA1, , STROKA

End Sub

Тестирование:

1. N=5

A: 1 2 3 –6 0 0

D: 1 2 3 36 0 0

2. N=4

A: 1 2 3 6 0

D: 1 2 3 6 0


1. Примеры к заданиям 1 - 4 вариантов 1 – 11 раздела 3

Пример к заданию1.

Sub Формула()

Dim t, p, z, X, y As Single

X = Val(InputBox(" " )) '

y = Val(InputBox(" " )) '

t = (X + y) / y

p = Sin(X)

z = Format(t * p, " FIXED" )

MsgBox " Результат вычислений", vbInformation, " z=" & z

End Sub

Пример к заданию 2.

Sub PRIM2_1()

Dim A, B As Single

A = Val(InputBox(" " ))

B = Val(InputBox(" " ))

If (A - B) > 0 Then

C = Sqr(A - B)

Else

C = (A - B) ^ 2

End If

MsgBox " A= " & A & " " & " B= " & B, _

vbInformation, " C= " & Format(C, " FIXED" )

End Sub

Пример к заданию 3.

 

Sub PRIM3_Цикл_do()

'Вычисление значения функции F =Sin(X ^ 2 + 2 * X)

'Объявление типов переменных X, H, F, S

Dim X, H, F As Single

Dim S As String

'Задание начальных значений

X = 0

H = 0.1

S = 0

'Начало цикла с предусловием

Do While X < = 1.4

'Вычисление значений функции в цикле в формате с фиксированной точкой

F = Format(Sin(X ^ 2 + 2 * X), " FIXED" )

'Суммирование значений функции для вывода в одну строку

S = S + " " + Str(F)

'Изменение параметра цикла на величину шага

X = X + H

'Окончание цикла

Loop

'Вывод результата в диалоговое окно

MsgBox " Значения функции", vbInformation, " S= " & S

'Конц записи программы

End Sub

 

Пример 1 к заданию 4.

Sub PRIM4_МАССИВ_A()

'Объявление переменных I, J, K целого типа

Dim I, J, K As Integer

'Объявление переменных MIN, MAX и массива A(1 To 10)вещественного типа

Dim A(1 To 10), MIN, MAX As Single

'Объявление переменной S строкового типа

Dim S As String

'Начало цикла, где I- параметр цикла

For I = 1 To 10

'Заполнение элементов массива - A(I)случайными величинами

A(I) = (Rnd * 10 + I)

'Суммирование значений элементов в строку для вывода в окно

S = S + " " + Str(Format(A(I), " FIXED" ))

'Продолжение цикла

Next I

'Вывод значений элементов массива в диалоговое окно

MsgBox " Вывод элементов массива", vbInformation, " S= " & S

'Задание начальных значений переменным MIN и MAX

MAX = A(1)

MIN = A(1)

'Начало цикла

For I = 2 To 10

'Поиск MIN путем сравнения MIN с последующими элементами

If A(I) < MIN Then MIN = A(I): J = I

'Поиск Mах путем сравнения Mах с последующими элементами

If A(I) > MAX Then MAX = A(I): K = I

'Продолжение цикла

Next I

'Вывод результата вычислений

MsgBox " Индексы мин. и макс. элементов " & (Chr(10) & Chr(13)) _

& " j= " & J & " " & " k= " & K, vbInformation, _

" MIN= " & Str(Format(MIN, " fixed" )) & " " & " MAX= " & Str(Format(MAX, " fixed" ))

'Конец кода программы

End Sub

Пример 2 к заданию 4.

Sub prim5_Массив_B()

Dim B(1 To 10), I, N, S As Integer

Dim S1 As String

S = 0

For I = 1 To 10

B(I) = Val(InputBox(" " ))

S1 = S1 + " " + Str(B(I))

If (B(I) > = -5) And (B(I) < = 35) Then S = S + B(I)

Next I

MsgBox " Вывод массива в строку", vbInformation, " s1= " & S1

MsgBox " Сумма значений из указанного диапазона [-5, 35]" _

, vbInformation, " s= " & S

End Sub

4. Правила оформления работы.

1. По пунктам задания разделов 2, 3 необходимо составить конспект. На титульном листе тетради необходимо сделать надпись по представленному образцу:

Контрольная работа №..

По дисциплине «Информатика»

Студентки 1 курса факультета …

Номер студенческого билета …

Домашний адрес….

2. При наличии доступа к компьютеру, задание контрольной работы следует оформить на дискете размером 3, 5 дюйма. Дискету следует подписать (ФИО, шифр группы), положить в конверт, который приклеить в конце тетради с конспектом.

3. Контрольная работа 2. может быть выполнена в следующих СУБД MS Access 97/98 и MS Access 2000 с применением VBA.

Список литературы.

1. Методические указания. Информатика. Часть 2. Практикум по курсу. Н.В. Дроботун, Ф.Л. Хватова, М.А. Ермина. СПГУТД, 2004.

2. Самоучитель VBA. А. Гарнаев. СПб, БХВ-Петербург, 2002

3. Самоучитель программирования на VBA в Microsoft Office. В.Д. Хореев. Киев, 2001.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-09; Просмотров: 1689; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.07 с.)
Главная | Случайная страница | Обратная связь