Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

По теме лабораторной работы. Массив – это упорядоченный набор данных одного типа, снабженных индексами



Массив – это упорядоченный набор данных одного типа, снабженных индексами.

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

В VBA массив рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое, так и на любую из его компонент. Переменная с индексом - идентификатор компоненты массива. Формат записи: <имя массива> (<индекс>), где индекс может быть выражением порядкового типа.

Индексы принято указывать в круглых скобках после имени массива. По умолчанию нумерация элементов массива начинается с 0. Говорят, что 0 – базовый индекс.

Например, если А – массив из пяти чисел: 2, 3, 7, 9, 6, то А (0) = 2 – первый элемент массива, А (4) = 6 – последний.

Описание массива определяет имя, размер массива, базовый тип и производится в разделе переменных. В VBA имеются следующие способы описания массивов:

1. <имя массива> (<номер последнего элемента>) [As <тип>]

2. <имя массива> (<начальный индекс> To <конечный индекс>) [As <тип>]

Отметим, что второй способ позволяет изменить базовый индекс. Другим способом изменения базового индекса является использование оператора Option Base, который имеет следующий синтаксис:

Option Base <базовый индекс>

<базовый индекс> – единица или ноль.

Этот оператор применяется перед процедурой, аналогично оператору Option Explicit.

Например, для изменения базового индекса с 0 на 1 используется оператор Option Base 1.

Массив A, который был рассмотрен, требует одного индекса для указания любого элемента. Такой массив называется одномерным (или линейным) В одномерных массивах хранятся значения линейных таблиц. Примеры описания одномерных массивов:

1. Dim A (12) As Byte

2. Dim A (1 To 12) As Byte

3. Dim Bin (5) As Integer

4. Dim Str_mass (4) As String

5. Dim K (7)

6. Dim L (0 To 3)

Заполнение массива в программе производится поэлементно. Чаще всего для этого используется цикл с параметром, где в качестве параметра применяется индексная переменная. Возможно заполнение массива путем простого присвоения значения элементам:

Dim B (1 To 3) As Integer

B (1) = 2

B (2) = 18

B (3) = 6

Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа Variant.

Dim A As Variant

A = Array (10, 20, 35, 70)

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

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

ReDim [Preserve] Имя (<номер последнего элемента>) [As <тип>]

ReDim [Preserve] Имя (<начальный индекс> To <конечный индекс>) [As <тип>]

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

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

В VBA двумерный массив может быть описан следующим образом:

1. <имя массива> (<n1>, <n2>) [As <тип>]

<n1>, <n2> – номер последнего элемента строки и номер последнего элемента строки соответственно;

2. <имя массива> (To, To) [As <тип>]

<k1>, <k2> – начальный и конечный индексы элементов строки;

<m1>, <m2> – начальный и конечный индексы элементов столбца.

Например,

Dim mass (5, 5) As Integer

Dim mass (1 To 5, 1 To 5) As Integer

описывают один и тот же массив, при условии, что был использован оператор Option Base1.

Элементы двумерного массива идентифицируются переменными с двумя индексами. Например: М (3, 5). Обычно первый индекс связывают с номером строки, второй с номером столбца матрицы.

Примеры:

1. Приведем фрагмент программы, осуществляющей ввод десяти элементов целочисленного массива А, формирование строки элементов массива и вывод его на экран.

Dim A(1 To 10) As Integer, i As Integer, Str As String

Str = “ ”

For i = 1 To 10

A(i) = Val(InputBox("Введите " & i & "-ый элемент массива", "Заполнение массива"))

Str = Str & A(i) & " "

Next

MsgBox Str

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

Option Explicit

Option Base 1

Sub Mass()

Dim M1() As Integer, M2() As Integer, n As Integer, i As Integer, max As Integer, min As Integer, _

Str1 As String, Str2 As String, Str3 As String, sum As Integer, pro As Single, buf As Integer

n = InputBox("Введите количество элементов массива", "Определение размера массива")

ReDim M1(n), M2(n)

'Заполнение массива случайными числами в диапазоне от 1 до 10

'и формирование строки значений элементов массива

Randomize

For i = 1 To n

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

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

Str1 = Str1 & M1(i) & " "

Str3 = Str3 & M2(i) & " "

Next

'Поиск максимального элемента массива M1

max = M1(1)

For i = 2 To n

If M1(i) > max Then max = M1(i)

Next

'Поиск минимального элемента массива M1

min = M1(1)

For i = 2 To n

If M1(i) < min Then min = M1(i)

Next

'Поиск суммы элементов массива M1, стоящих на четных местах

sum = 0

For i = 2 To n Step 2

sum = sum + M1(i)

Next

'Поиск произведения ненулевых элементов массива M1

pro = 1

For i = 1 To n

If M1(i) <> 0 Then pro = pro * M1(i)

Next

'Поменяем местами 1-ый и 2-ой элементы массива M1

If n >= 2 Then

buf = M1(1)

M1(1) = M1(2)

M1(2) = buf

End If

For i = 1 To n

Str2 = Str2 & M1(i) & " "

Next

MsgBox "Массив: " & Str1 & Chr(13) & "Максимальный элемент: " & max & Chr(13) & _

"Минимальный элемент: " & min & Chr(13) & "Сумма элементов массива, стоящих на четных местах: " _

& sum & Chr(13) & "Произведение ненулевых элементов массива: " & pro & Chr(13) _

& "Массив после обмена 1-го и 2-го элементов: " & Str2

'Допишем в массив M2 максимальный и минимальный элементы массива Ml

ReDim Preserve M2(n + 2)

M2(n + 1) = max

M2(n + 2) = min

Str2 = ""

For i = 1 To n + 2

Str2 = Str2 & M2(i) & " "

Next

MsgBox "Первый массив: " & Str1 & Chr(13) & "Второй массив: " & Str3 & Chr(13) & _

"Второй массив c приписанным максимумом и минимумом из первого: " & Chr(13) & Str2

End Sub

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

Воспользуемся алгоритмом, известным под названием “метод пузырька”. Идея состоит в последовательном перемещении путем попарных перестановок наибольшего элемента вначале на место n-го элемента, затем n-1-го элемента и т.д.

Option Explicit

Option Base 1

Sub Сортировка()

Dim A() As Integer, n As Integer, i As Integer, j As Integer, P As Integer, Str1 As String, Str2 As String

n = InputBox("Введите число элементов массива:", "Определение размера")

ReDim A(n) As Integer

Str1 = ""

Str2 = ""

'Заполнение массива с клавиатуры и формирование строки

For i = 1 To n

A(i) = Val(InputBox("Введите " & i & "-ый элемент массива", "Заполнение массива"))

Str1 = Str1 & A(i) & " "

Next

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

For i = 1 To n - 1

For j = 1 To n - 1

If A(j) <= A(j + 1) Then

P = A(j)

A(j) = A(j + 1)

A(j + 1) = P

End If

Next

Next

'Формирование строки, содержащей элементы отсортированного массива

For i = 1 To n

Str2 = Str2 & A(i) & " "

Next

MsgBox "Исходный массив: " & Str1 & Chr(13) & "Отсортированный массив: " & Str2,, "Результат"

End Sub

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

Option Explicit

Option Base 1

Sub Массив_двумерный ()

Dim mass() As Integer, i As Integer, j As Integer, n As Integer, m As Integer, str As String

n = InputBox("Введите количество строк массива", "Размер массива")

m = InputBox("Введите количество столбцов массива", "Размер массива")

'Переопределение размерности массива

ReDim mass(1 To n, 1 To m) As Integer

Randomize

'Заполнение массива случайными значениями

'и накопление элементов массива для последующего вывода значений

For i = 1 To n

For j = 1 To m

mass(i, j) = Int(100 * Rnd + 1)

str = str & mass(i, j) & " "

Next j

str = str & Chr(13)

Next i

MsgBox "Массив: " & Chr(13) & str,, "Результат"

End Sub

4. Заполнить матрицу порядка n по следующему образцу:

Идея алгоритма основана на двух свойствах этой матрицы: она симметрична относительно главной диагонали, т.е. A (i, j) = A (j, i) и элементы верхнего треугольника матрицы вычисляются по формуле A (i, j) = i – j + 1.

Option Explicit

Option Base 1

Sub Заполнение()

Dim A() As Integer, n As Integer, i As Integer, j As Integer, Str As String

n = InputBox("Введите порядок матрицы:", "Определение размера")

ReDim A(n, n) As Integer

Str = ""

'Вложенные циклы

For i = 1 To n

For j = 1 To n

A(i, j) = i - j + 1

A(j, i) = A(i, j)

Next

Next

'Формирование строки, содержащей элементы массива

For i = 1 To n

For j = 1 To n

Str = Str & A(i, j) & " "

Next

Str = Str & Chr(13)

Next

MsgBox "Полученный массив: " & Chr(13) & Str,, "Результат"

End Sub

5. Сформировать матрицу Пифагора (таблицу умножения в матричной форме) и вывести ее на экран.

Значения элементов матрицы Пифагора вычисляются следующим образом: P (i, j) = i*j. Вычисления и вывод матрицы производятся в двух вложенных циклах. Вывод на экран организуем в виде прямоугольной таблицы.

Option Explicit

Option Base 1

Sub Пифагор()

Dim P(1 To 9, 1 To 9) As Integer, i As Integer, j As Integer, Str As String

Str = ""

For i = 1 To 9

For j = 1 To 9

P(i, j) = i * j

Str = Str & P(i, j) & " "

Next

Str = Str & Chr(13)

Next

MsgBox "Матрица Пифагора: " & Chr(13) & Str,, "Результат"

End Sub

Задания для лабораторной работы:

Каждый студент должен решить по одной задаче из каждого блока.

А

1. Дан массив натуральных чисел. Найти сумму элементов, кратных данному К.

2. В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов.

3. Дана последовательность целых чисел a1, a2,..., an. Выяснить, какое число встречается раньше - положительное или отрицательное.

4. Дана последовательность действительных чисел a1, a2,..., an. Выяснить, будет ли она возрастающей.

5. Дана последовательность натуральных чисел a1, a2,..., an. Создать массив из четных чисел этой последовательности. Если таких чисел нет, то вывести сообщение об этом факте.

6. Дана последовательность чисел a1, a2,..., an. Указать наименьшую длину числовой оси, содержащую все эти числа.

7. Дана последовательность действительных чисел a1, a2,..., an. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество замен.

8. Последовательность действительных чисел оканчивается нулем. Найти количество членов этой последовательности.

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

10. Даны действительные числа a1, a2,..., an. Поменять местами наибольший и наименьший элементы.

11. Даны целые числа a1, a2,..., an. Вывести на печать только те числа, для которых выполняется ai.

12. Даны натуральные числа a1, a2,..., an. Указать те, у которых остаток от деления на М равен L.

13. В заданном одномерном массиве поменять местами соседние элементы, стоящие на четных местах, с элементами, стоящими на нечетных.

14. При поступлении в вуз абитуриенты, получившие “двойку” на первом экзамене, ко второму не допускаются. В массиве А [n] записаны отметки экзаменующихся, полученные на первом экзамене. Подсчитать, сколько человек не допущено ко второму экзамену.

15. Дана последовательность чисел, среди которых имеется один нуль. Вывести на печать все числа, включительно до нуля.

16. В одномерном массиве размещены: в первых элементах значения аргумента, в следующих - соответствующие им значения функции. Напечатать элементы этого массива в виде двух параллельных столбцов (аргумент и значения функции).

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

18. У вас есть доллары. Вы хотите обменять их на рубли. Есть информация о стоимости купли-продажи в банках города. В городе N банков. Составьте программу, определяющую, какой банк выбрать, чтобы выгодно обменять доллары на рубли.

19. Дан целочисленный массив с количеством элементов n. Напечатать те его элементы, индексы которых являются степенями двойки (1, 2, 4, 8, 16,...).

20. В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные - в конец с сохранением порядка следования. Дополнительный массив заводить не разрешается.

21. В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д. Определить минимальный радиус круга с центром в начале координат, который содержит все точки.

22. В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д. Определить кольцо с центром в начале координат, которое содержит все точки.

23. В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д. (xi, уi - целые). Определить номера точек, которые могут являться вершинами квадрата.

24. В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагают­ся в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д. Определить номера точек, которые могут являться вершинами равнобедренного треугольника.

25. Задан целочисленный массив размерности N. Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов.

26. Дан массив из n натуральных четырехзначных чисел. Вывести на экран только те, у которых сумма первых двух цифр равна сумме двух последних.

27. Даны две последовательности целых чисел a1, a2,..., аn и b1, b2,..., bn. Все члены последовательностей - различные числа. Найти, сколько членов первой последовательности совпадают с членами второй последовательности.

28. Дан целочисленный массив А [n], среди элементов есть одинаковые. Создать массив из различных элементов А [n].

29. На плоскости n точек заданы своими координатами и также дана окружность радиуса R с центром в начале координат. Указать множество всех треугольников с вершинами в заданных точках, пересекающихся с окружностью; множество всех треугольников, содержащихся внутри окружности.

Б

1. Дан одномерный массив A[N]. Найти max {a2, a4,..., а2k} + min {а1, а3, …, a2k+1}.

2. Дана последовательность действительных чисел a1, a2,..., аn. Указать те ее элементы, которые принадлежат отрезку [с, d].

3. Дана последовательность целых положительных чисел. Найти произведение только тех чисел, которые больше заданного числа М. Если таких нет, то выдать сообщение об этом.

4. Последовательность a1, a2,..., аn состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

5. Даны действительные числа a1, a2,..., аn. Среди них есть положительные и отрицательные. Заменить нулями те числа, величина которых по модулю больше максимального числа (|аi| > max { a1, a2,..., аn}).

6. Даны действительные числа a1, a2,..., аn. Найти max {a1+ an, a2+ an-1,..., аk+ an-(k-1)}

7. В последовательности действительных чисел a1, a2,..., аn есть только положительные и отрицательные элементы. Вычислить произведение отрицательных элементов Р1 и произведение положительных элементов Р2. Сравнить модуль Р1 модулем Р2, указать, какое из произведений по модулю больше.

8. Дан массив действительных чисел. Среди них есть равные. Найти первый максимальный элемент массива и заменить его нулем.

9. Дана последовательность действительных чисел a1, a2, аn. Вставить действительное число b в нее так, чтобы последовательность осталась неубывающей.

10. Даны целые положительные числа a1, a2,..., аn. Найти среди них те, которые являются квадратами некоторого числа m.

11. Дана последовательность целых чисел a1, a2,..., аn. Образовать новую последовательность, выбросив из исходной те члены, которые равны min {a1, a2,..., аn}.

12. У прилавка магазина выстроилась очередь из n покупателей. Время обслуживания i-того покупателя равно ti (i =1,...., n). Определить время Ci пребывания i-го покупателя в очереди.

13. Секретный замок для сейфа состоит из 10 расположенных в ряд ячеек, в которые надо вставить игральные кубики. Но дверь открывается только в том случае, когда в любых трех соседних ячейках сумма точек на передних гранях кубиков равна 10. (Игральный кубик имеет на каждой грани от 1 до 6 точек.) Напишите программу, которая разгадывает код замка при условии, что два кубика уже вставлены в ячейки.

14. В массиве целых чисел с количеством элементов n найти наиболее часто встречающееся число. Если таких чисел несколь­ко, то определить наименьшее из них.

15. Каждый солнечный день улитка, сидящая на дереве, поднимается вверх на 2 см, а каждый пасмурный день опускается вниз на 1 см. В начале наблюдения улитка находилась в A см от земли на B-метровом дереве. Имеется 30-элементный массив, содержащий сведения о том, был ли соответствующий день наблюдения пасмурным или солнечным. Написать программу, определяющую местоположение улитки к концу 30-го дня наблюдения.

16. Дан целочисленный массив с количеством элементов n. “Сожмите” массив, выбросив из него каждый второй элемент. Дополнительный массив не использовать.

17. Задан массив, содержащий несколько нулевых элементов. Сжать его, выбросив эти элементы.

18. Задан массив с количеством элементов N. Сформируйте два массива: в первый включите элементы исходного массива с четными номерами, а во второй - с нечетными.

19. Дана последовательность целых чисел a1, a2,..., аn. Указать пары чисел ai, aj, таких, что ai + aj= m.

20. Даны целые числа a1, a2,..., аn. Наименьший член этой последовательности заменить целой частью среднего арифметического всех членов, остальные члены оставить без изменения. Если в последовательности несколько наименьших членов, то заменить последний по порядку.

21. Даны целые числа a1, a2,..., аn и b1, b2,..., bn. Преобразовать последовательность b1, b2,..., bn по правилу: если ai=0, то bi увеличить в 10 раз, иначе заменить bi нулем (i = 1, 2,..., n).

22. Даны действительные числа a1, a2,..., аn. Требуется умно­жить все члены последовательности a1, a2,..., аn на квадрат ее наименьшего члена, если ak  0, и на квадрат ее наибольшего члена, если ak < 0 (1 < k < n).

23. Даны координаты n точек на плоскости: (X1, У1),..., (Xn, Yn) (n < 30). Найти номера пары точек, расстояние между которы­ми наибольшее (считать, что такая пара единственная).

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

25. Японская радиокомпания провела опрос N радиослушателей по вопросу: “Какое животное Вы связываете с Японией и японцами?” Составить программу получения k наиболее часто встречающихся ответов и их долей (в процентах).

26. Дан массив, состоящий из n натуральных чисел. Образовать новый массив, элементами которого будут элементы исходного, оканчивающиеся на цифру k.

27. Дан массив целых чисел. Найти в этом массиве минимальный элемент m и максимальный элемент М. Получить в порядке возрастания все целые числа из интервала (m; М), которые не входят в данный массив.

28. Дано действительное число x и массив А [n]. В массиве найти два члена, среднее арифметическое которых ближе всего к x.

Контрольные вопросы:

1. Что такое массив?

2. Какие есть способы описания массива?

3. Что такое динамический массив, и каковы его особенности?

4. Что такое двумерный массив?

5. Какие есть способы описания двумерного массива?





Дата публикования: 2015-11-01; Прочитано: 1294 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.031 с)...