Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

Знаете, что напоминает одномерный массив? Список ListBox, который мы проходили в 15.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 чисел Фибоначчи.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.