Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Одномерные массивы переменных величин
Одна из типичных задач программирования формулируется примерно так. Имеется большое количество данных, например, тех же температур или высот. С этими данными компьютер должен что-нибудь сделать, например, вычислить среднегодовую температуру, количество морозных дней, максимальную взятую высоту и т.п. Раньше мы уже вычисляли подобные вещи, и при этом данные вводили в компьютер с клавиатуры одно за другим в одну и ту же ячейку памяти (см. Глава 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 чисел Фибоначчи.
|