КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Одномерные массивы переменных величин
Переменные с индексами В математике широко применяются так называемые индексированные переменные. На бумаге они записываются так: 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) - вторым и т.д. Одна из типичных задач программирования формулируется примерно так. Имеется большое количество данных, например, тех же температур или высот. С этими данными компьютер должен что-нибудь сделать, например, вычислить среднегодовую температуру, количество морозных дней, максимальную взятую высоту и т.п. Раньше мы уже вычисляли подобные вещи, и при этом данные вводили в компьютер с клавиатуры одно за другим в одну и ту же ячейку памяти (см. Глава 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 чисел Фибоначчи.
Дата добавления: 2014-12-23; Просмотров: 486; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |