Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
8 Мб
Скачать
☆

Глава 0.Массивы

Массивы - одно из главных средств хранения в памяти компьютера больших объемов информации.

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

В основе массивов лежит понятие индекса.

0.1.Переменные с индексами

В математике широко применяются так называемые индексированные переменные. На бумаге они записываются так:

x1 x2 b8 yi yi-6 zij zi+1j

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

X(1) X(2) B(8) Y(i) Y(i-6) Z(i,j) Z(i+1,j)

Зачем математикам нужны индексированные переменные? Их удобно применять хотя бы при операциях над числовыми рядами. Числовой ряд – это просто несколько чисел, выстроенных по порядку одно за другим. Чисел в ряду может быть много и даже бесконечно много.

Возьмем, например, бесконечный ряд чисел Фибоначчи: 1 1 2 3 5 8 13 21 34..... Попробуйте догадаться, по какому закону образуются эти числа. Если вы сами не догадались, то я подскажу: каждое из чисел, начиная с третьего, является суммой двух предыдущих. А теперь попробуем записать это утверждение с помощью языка математики. Для этого обозначим каждое из чисел Фибоначчи индексированной переменной таким образом:

Первое число Фибоначчи обозначим так: f(1),

Второе число Фибоначчи обозначим так: f(2) и т.д.

Тогда можно записать, что f(1)=1 f(2)=1 f(3)=2 f(4)=3 f(5)=5 f(6)=8 ......

Очевидно, что f(3)=f(1)+f(2),

f(4)=f(2)+f(3),

f(5)=f(3)+f(4) и т.д.

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

f(i)=f(i-2)+f(i-1).

Для пояснения подставим вместо i любое число, например, 6. Тогда получится:

f(6)=f(6-2)+f(6-1) или

f(6)=f(4)+f(5), что соответствует определению чисел Фибоначчи.

Задание 115: Запишите в индексном виде, как получается из предыдущего числа ряда последующее:

  1. 14 18 22 26 .....

  2. 6 12 24 48 ....

  3. 3 5 9 17 33 65 ....

Вот еще примеры, когда математики предпочитают использовать индексы. Пусть мы на протяжении года каждый день раз в сутки измеряли температуру за окном. Тогда вполне естественно обозначить через t(1) температуру первого дня года, t(2) - второго,....., t(365) - последнего. Пусть 35 спортсменов прыгали в высоту. Тогда через h(1) можно обозначить высоту, взятую первым прыгуном, h(2) - вторым и т.д.

0.2.Одномерные массивы переменных величин

Одна из типичных задач программирования формулируется примерно так. Имеется большое количество данных, например, тех же температур или высот. С этими данными компьютер должен что-нибудь сделать, например, вычислить среднегодовую температуру, количество морозных дней, максимальную взятую высоту и т.п. Раньше мы уже вычисляли подобные вещи, и при этом данные вводили в компьютер с клавиатуры одно за другим в одну и ту же ячейку памяти (см. Глава 4.). Однако, программистская практика показывает, что удобно, а часто и необходимо иметь данные в оперативной памяти сразу все, а не по очереди. Тогда для задачи про температуру нам понадобится 365 ячеек. Эти 365 ячеек мы и назовем массивом. Итак, массивом можно назвать ряд ячеек памяти, отведенных для хранения значений индексированной переменной. Вопрос о том, как большое количество значений оказывается в памяти, отложим на будущее (3.2).

Знаете, что напоминает одномерный массив? Список ListBox, который мы проходили в 2.5. Такой же аккуратный ряд пронумерованных элементов.

Рассмотрим на простом примере, как Visual Basic управляется с массивами. Предположим, в зоопарке живут три удава. Известна длина каждого удава в сантиметрах (500, 400 и 600). Какая длина получится у трех удавов, вытянутых в линию?

Обозначим длину первого удава - dlina(1), второго - dlina(2), третьего - dlina(3). Прикажем Visual Basic отвести под эту индексированную переменную массив ячеек в памяти:

Dim dlina (1 To 3) As Integer

Здесь 1 - нижняя граница индекса, 3 - верхняя граница индекса. Слово To обозначает до. В целом эту строку можно перевести так: Отвести в памяти под переменную dlina ряд ячеек типа Integer, пронумерованных от 1 до 3.

Вот программа полностью:

Dim dlina(1 To 3) As Integer

Dim summa As Integer

Private Sub Command1_Click()

dlina(1) = 500

dlina(2) = 400

dlina(3) = 600

'В этот момент в трех ячейках памяти уже находятся числа

'и с ними можно выполнять арифметические действия

summa = dlina(1) + dlina(2) + dlina(3)

Debug.Print summa

End Sub

Если смысл написанного выше вам неясен, запустите отладочный пошаговый режим выполнения программы и загляните в текущие значения dlina(1), dlina(2), dlina(3), summa.

Теперь запишем ту же программу в предположении, что длины удавов заранее неизвестны и мы их вводим при помощи InputBox:

Dim dlina(1 To 3) As Integer

Private Sub Command1_Click()

dlina(1) = InputBox("Введите длину 1-го удава")

dlina(2) = InputBox("Введите длину 2-го удава")

dlina(3) = InputBox("Введите длину 3-го удава")

Debug.Print dlina(1) + dlina(2) + dlina(3)

End Sub

Вопрос: Что напечатает следующий фрагмент:

i = 2: a(3) = 10: a(i) = 100: a(i + 6) = a(i) + a(5 - i): i = 0: Debug.Print a(i + 3) + a(2) + a(i + 8)

Ответ: 220

Пояснение: i = 2 ; a(3) = 10 ; a(2) = 100 ; a(2 + 6) = a(2) + a(5 - 2) ; i = 0 ; Debug.Print a(0 + 3) + a(2) + a(0 + 8)

Теперь решим ту же задачу про удавов в предположении, что удавов не три, а тысяча:

Dim dlina(1 To 1000) As Integer

Dim summa As Integer

Private Sub Command1_Click()

'Вводим длины тысячи удавов, хоть это и утомительно и никто так не делает:

For i = 1 To 1000

dlina(i) = InputBox("Введите длину " & i & "-го удава")

Next

'Здесь на первом выполнении цикла i=1 и поэтому компьютер вводит число в ячейку dlina(1),

'на втором - i=2 и поэтому компьютер вводит число в ячейку dlina(2) и т.д.

'Определяем суммарную длину тысячи удавов:

summa = 0

For i = 1 To 1000

summa = summa + dlina(i)

Next

Debug.Print summa

End Sub

Отлаживая эту программу, возьмите, конечно, вместо числа 1000 число 3.

Решим еще одну задачу. Дан ряд из 10 произвольных чисел: a(1), a(2), ... , a(10). Подсчитать и напечатать суммы восьми троек стоящих рядом чисел: a(1)+a(2)+a(3), a(2)+a(3)+a(4), a(3)+a(4)+a(5), ...... , a(8)+a(9)+a(10).

Dim a(1 To 10) As Integer

Private Sub Command1_Click()

a(1) = 23: a(2) = 28: a(3) = 4: a(4) = 0: a(5) = 12

a(6) = 10: a(7) = 23: a(8) = 2: a(9) = 9: a(10) = 1

For i = 1 To 8

Debug.Print a(i) + a(i + 1) + a(i + 2)

Next

End Sub

Задание 116:. Напишите с использованием массива программу вычисления среднегодовой температуры (Для отладки в компьютере годом можно считать неделю).

Задание 117:. Подсчитайте количество теплых дней в году (когда температура выше 20 град.).

Задание 118:. Каким по порядку идет самый жаркий день?

Задание 119:. Вычислить и распечатать первые 70 чисел Фибоначчи.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]