SlideShare a Scribd company logo
1 of 210
Download to read offline
информатика
алгоритмика
Учебник
для 7 класса
общеобразовательных
учреждений
Москва
«Просвещение»
2008
С. К. ЛАНДО А. Л. СЕМЕНОВ М. Н. ВЯЛЫЙ
УДК 373.167.1:004
ББК 32.81я72
Л22
Ландо С. К.
Л22 Информатика : алгоритмика : учеб, для 7 кл. общеобразоват.
учреждений / С. К. Ландо, А. Л. Семенов, М. Н. Вялый. — М. :
Просвещение, 2008. — 208 с. : ил. — ISBN 978-5-09-015963-0.
Цель этого учебника — продолжить изучение основ алгоритмического
мышления, начатое в учебнике «Информатика — 6. Алгоритмика». Алгорит­
мические средства предыдущего учебника расширяются за счет введения пе­
ременных. Изучение переменных начинается на материале Исполнителей, уже
известных из предыдущего курса. Далее рассматриваются новые задачи: вос­
становление алгоритмов, поиск, построение игровых стратегий, шифры.
УДК 373.167.1:004
ББК 32.81я72
На учебник получено
положительное заключение
Российской Академии Наук.
Учебное издание
Ландо Сергей Константинович
Семенов Алексей Львович
Вялый Михаил Николаевич
информатика
алгоритмика
Учебник для 7 класса
общеобразовательных учреждений
Зав. редакцией Т. А. Бурмистрова. Редактор А. В. Желонкин. Младший редактор
Н. И. Смирнова. Художник О. В. Попович. Художественный редактор О. П. Бого­
молова. Компьютерная графика: Г. М. Дмитриев, И. В. Губина, М. Е. Аксенова.
Техническое редактирование и верстка Е. С. Юровой. Корректоры: Е. В. Баранов­
ская, Н. В. Бурдина, Л. С. Вайтман, И. В. Чернова
Налоговая льгота — Общероссийский классификатор продукции ОК 005-93—953000.
Изд. лиц. Серия ИД № 05824 от 12.09.01. Подписано в печать 24.04.2007. Фор­
мат 70x90Vi6- Бумага офсетная. Гарнитура Школьная. Печать офсетная. Уч.-изд. л.
12,88 + 0,46 форз. Тираж 10 000 экз. Заказ № 16977 щ-гз).
Открытое акционерное общество «Издательство «Просвещение». 127521, Москва,
3-й проезд Марьиной рощи, 41.
Открытое акционерное общество «Смоленский полиграфический комбинат». 214020,
г. Смоленск, ул. Смольянинова, 1.
ISBN 978-5-09-015963-0 ©Издательство «Просвещение», 2008
© Художественное оформление.
Издательство «Просвещение», 2008
Все права защищены
Оглавление
От авторов ............................................................................................... 6
УЧЕБНИК
Глава 1. Что такое переменные и как с ними работать
1. Лестница для Робота................................................................. 8
2. Что такое переменные............................................................... 10
3. Применение переменных ........................................................ 11
4. Переменные в процедурах ...................................................... 12
5. Как выбирать переменные...................................................... 13
6. Условия с переменными........................................................... 14
7. Возвращение к Ханойским башням ..................................... 15
Глава 2. Переменные в графических Исполнителях и рисова­
ние графиков
1. Чертежник и Черепаха: напоминание .............................. 18
2. Черепаха рисует многоугольники....................................... 19
3. Как Черепаха может нарисовать кривую.......................... 21
4. Изображение зависимостей на графиках — работа для
Чертежника .............................................................................. 22
5. Массивы ..................................................................................... 24
6. Откуда берутся формулы ...................................................... 26
7. Дискретизация.......................................................................... 28
8. Рисование формул................................................................... 29
9. Процедуры рисования графиков......................................... 31
10. Сложности в рисовании графиков...................................... 34
Глава 3. Работа с массивами
1. Среднее и максимум................................................................. 38
2. Эффективность работы с массивами..................................... 41
3. Работа с упорядоченными массивами................................... 42
4. Позиционная система счисления........................................... 47
Глава 4. Угадай алгоритм!
1. Изучаем Робота .......................................................................... 55
2. Генераторы числовых последовательностей........................ 63
3
Глава 5. Числовые алгоритмы
1. Вычисление значения многочлена......................................... 69
2. Алгоритмы и формулы............................................................. 78
3. Алгоритм Евклида..................................................................... 80
Глава 6. Перебор
1. Ищем к л а д .................................................................................. 87
2. Проверка простоты числа......................................................... 89
3. Выбираем пароль........................................................................ 92
Глава 7. Случайность и неопределенность в программах
1. Случайное и закономерное.........................................................100
2. Вероятность случайного события..............................................101
3. Комбинаторика и вероятность.................................................. 102
4. Несовместимые события и правилосуммы ............................ 103
5. Независимые события и правило произведения............. . 104
6. Как сделать монету с 86 сторонами.....................................106
7. Задача обмена новостями........................................................ 108
8. Псевдослучайность, или Как научить компьютер бросать
монету............................................................................................. 112
Глава 8. Игровые алгоритмы
1. Игра в конфеты............................................................................ 117
2. Игры и стратегии ........................................................................120
3. Программирование стратегий.................................................... 123
4. Дерево и гр ы ...................................................................................124
5. Как искать выигрышные стратегии (использование сим­
метрии) ........................................................................................... 130
6. Использование случайности в игровых алгоритмах.........133
Глава 9. Работа с цепочками символов
1. Работа с символами......................................................................135
2. Упорядочение символов и с л о в ................................................ 136
3. Понятие о кодировании и ш ифрах..........................................141
4. Простейшие алгоритмы шифрования..................................... 143
5. Разгадывание алгоритмов шифрования и дешифровка 146
Словарь понятий алгоритмики...........................................................149
4
ЗАДАЧНИК
Справочник по алгоритмическому языку
1. Программы.....................................................................................152
2. Исполнители...................................................................................156
Задачи
1. Робот рисует. Замена рекурсии в программах для Робо­
та работой с переменными...................................................... 160
2. Чертежник рисует......................................................................168
3. Черепаха рисует..........................................................................173
4. Кривая дракона с переменными ............................................178
5. Условия и выражения...............................................................179
6. Массивы .......................................................................................182
7. Угадай алгоритм ........................................................................188
8. Эффективные вычисления ...................................................... 193
9. Перебор и случайность.............................................................198
10. Вероятности и комбинаторика................................................202
11. Игровые алгоритмы................................................................... 204
12. Символьные переменные...........................................................206
От авторов
Учебник, который вы держите в руках, служит продолжением учебни­
ка «Информатика — 6. Алгоритмика». А это значит, что основным предме­
том изучения будет по-прежнему алгоритм. Но теперь вы уже много знае­
те об алгоритмах, и мы можем опираться на эти знания. Алгоритмы, кото­
рые мы будем рассматривать, станут богаче и разнообразнее. Это
обогащение достигается за счет введения переменных.
Окружающий нас мир все время меняется. Люди, предметы, живот­
ные движутся. Ветер нагоняет облака, которые проливаются дождями. Зем­
ля вращается вокруг Солнца — это движение приводит к смене времен го­
да — и вокруг своей оси, что мы замечаем по восходам и заходам Солнца.
В процессе жизни человека клетки, составляющие его тело, все время об­
новляются и заменяются другими. Даже, казалось бы, вечно неизменные
звезды постепенно уменьшаются за счет излучаемого ими света, а затем не­
ожиданно схлопываются, превращаясь в белых карликов, или взрываются,
образуя сверхновые.
Записывая характеристики процессов в последовательные моменты
времени, можно отследить происходящие изменения. Эти характеристики
могут быть самыми разными. Например, числовыми — светимость звезды
и ее масса. Другой пример числовых характеристик — стоимость акций той
или иной компании или количество произведенных автомобилей. Характе­
ристики могут быть и нечисловыми. Тогда они собираются в списки фами­
лий или библиотечные каталоги, даты и газетные заголовки.
Когда человек работает с меняющимися величинами, для него важно
каждой такой величине дать имя. Имя при этом как раз не меняется, ме­
няется только значение величины.
Переменные — это кусочки компьютерной памяти, предназначенные
для хранения различных — как числовых, так и нечисловых — характерис­
тик, которые изменяются в процессе работы программы. Соответственно ме­
няется и содержимое этих кусочков памяти. Пока вы читаете эти строки,
значения многих миллиардов переменных меняются в процессе одновремен­
ной работы миллионов программ. Но какими бы сложными ни были эти
программы, основы их работы с переменными очень просты. Эти основы мы
и будем изучать в курсе алгоритмики. И постараемся при этом сохранить
и развить ту ясность мышления, которой, мы надеемся, вам удалось дос­
тичь при изучении первой части курса. За дело!
6
Глава
Что такое переменные и как
с ними работать
В этой главе мы знакомимся с переменными. При работе с Ал-
горитмикой — 6 нам приходилось писать много программ, которые
были очень похожи друг на друга и отличались лишь числами,
входившими в команды. Введение переменных позволяет заме­
нить такие программы одной программой. Вместо того чтобы всякий
раз переписывать программу заново, мы получаем возможность из­
менить лишь одну строку программы — задать новые значения пере­
менных.
К| Лестница для Робота
Робот должен нарисовать на поле лест­
ницу (рис. 1), начиная с левого нижнего уг­
ла. Это несложная задача, подобная тем,
которые мы научились решать в Алгорит-
мике — 6. Одно из возможных ее решений
показано в программе справа.
ПОВТОРИТЬ 10 РАЗ
закрась
вправо
КОНЕЦ
ПОВТОРИТЬ 5 РАЗ
закрась
вверх
КОНЕЦ
ПОВТОРИТЬ 5 РАЗ
закрась
влево
закрась
влево
закрась
вниз
КОНЕЦ
Упражнение Убедитесь, что написанная программа действительно
рисует лестницу с рисунка 1 и что Робот возвращает­
ся на свое исходное место. Обратите внимание на то,
что высота лестницы 6 клеток, а Робот поднимается
вверх 5 раз.
8 ГЛАВА 1
Рис. 2 б)
Лестницы с рисунка 2 очень похожи на лестницу с рисунка 1,
однако они другого размера. Поэтому, для того чтобы нарисовать
любую из них, нам потребуется изменить уже написанную програм­
му для Робота. Программа 1 — это новая программа для лестницы с
рисунка 2, а. Программа 2 — это новая программа для лестницы с
рисунка 2, б.
2)
ПОВТОРИТЬ 6 РАЗ ПОВТОРИТЬ 16 РАЗ
закрась закрась
вправо вправо
КОНЕЦ КОНЕЦ
ПОВТОРИТЬ 3 РАЗ ПОВТОРИТЬ 8 РАЗ
закрась закрась
вверх вверх
КОНЕЦ КОНЕЦ
ПОВТОРИТЬ 3 РАЗ ПОВТОРИТЬ 8 РАЗ
закрась закрась
влево влево
закрась закрась
влево влево
закрась закрась
вниз вниз
КОНЕЦ КОНЕЦ
Эти две новые программы очень похожи на исходную, но все рав­
но их пришлось писать заново. К тому же даже в таком простом
случае при переписывании программы ее пришлось менять в трех
местах. В более сложной программе даже поиск мест, в которых ее
нужно изменить, становится непростой задачей, а ведь надо еще по­
нять, как именно следует изменить алгоритм. Но программирование
призвано облегчить жизнь людям и автоматизировать выполнение
Что т а к о е п е р е м е н н ы е и как с н им и р а б о т а т ь Н
монотонной, рутинной работы! Значит, должен существовать инстру­
мент, который уменьшает количество изменений в программах, ре­
шающих похожие задачи. Такой инструмент действительно есть. Это
переменные.
Вот как можно упростить рисование 3)
разных лестниц. Введем переменную s,
которая будет обозначать число ступенек
в лестнице. Тогда программу рисования
лестницы с рисунка 1 можно записать
так, как показано справа (программа 3).
Первая команда в программе задает
число ступенек, а остальная часть про­
граммы рисует лестницу с s ступенька­
ми. Теперь, для того чтобы приспособить
программу к рисованию лестницы с 3
или 8 ступеньками, нам достаточно изме­
нить в ней одну строку — первую. Нам
уже не нужно искать места, где програм­
му нужно менять, и думать, как именно
это следует делать. Все, что от нас требу­
ется, — это задать переменной s значе­
ние, равное нужному числу ступенек.
s = 5
ПОВТОРИТЬ 2*s РАЗ
закрась
вправо
КОНЕЦ
ПОВТОРИТЬ s РАЗ
закрась
вверх
КОНЕЦ
ПОВТОРИТЬ s РАЗ
закрась
влево
закрась
влево
закрась
вниз
КОНЕЦ
2.Что такое переменные
Итак, число повторений в нашей программе указывает перемен­
ная s. Что же такое переменная? Переменная — это имя, которое
может приним ать различные значения. Пока мы ограничимся
переменными, которые принимают только числовые значения. Зна­
чение переменной (в нашем случае переменной s) можно использо­
вать при исполнении программы. В процессе исполнения программы
значение переменной может меняться. Поэтому переменная и на­
зывается переменной. Именно возможность изменения значения и
является главной причиной введения переменных в языках програм­
мирования.
Переменную можно представить себе как ящичек в памяти
компьютера. Вся память состоит из таких ящичков, но перед нача­
лом исполнения программы эти ящички пусты. Чтобы у переменной
появилось значение, нужно ей значение присвоить.
Команда присваивания записывается с помощью знака равен­
ства. Например, команда /' = 3 присваивает переменной i значение 3.
В результате в ящичек i заносится значение 3. После этого им мож­
но пользоваться в программе: если в очередной команде встречается
переменная i, то она заменяется своим значением 3.
Ящичек нельзя опять сделать пустым, но его значение можно по­
менять с помощью новой команды присваивания. Например, если
10
выполнить команду / = 6, то содержимое ящичка i заменится чис­
лом 6. После этого переменная i будет заменяться своим новым зна­
чением 6. К тому же результату, что и команда / = 6, привело бы ис­
полнение команды / = / + 3. Эту команду нужно понимать так. Снача­
ла мы вычисляем значение выражения i + 3, которое стоит справа от
знака присваивания «=». Для этого мы берем значение переменной i
(которое, как мы знаем, равно 3) и прибавляем к нему 3. Получает­
ся 6. Затем этот результат заносится в переменную i (указанную сле­
ва от знака присваивания). Другими словами, команда / = / + 3 увели­
чивает значение переменной i на 3.
С переменными и равенствами вы уже встречались в курсе ма­
тематики. В алгебраических выражениях переменная — это символ
(или последовательность символов). Но знак равенства в команде
присваивания и алгебраической формуле нужно понимать совершен­
но по-разному. В алгоритмике равенство /' = /' + 3 — это команда, а в
алгебре равенство i = i + 3 — это утверждение (ложное для любого
значения i).
. Применение переменных
Использование переменных делает программу гибкой, позволяя
легко приспосабливать ее к новым требованиям и к новым задачам.
Например, мы можем захотеть менять не только число ступенек в
лестнице, но и ширину ступенек. В исходной программе эта шири­
на равна двум клеточкам, а мы хотим научить Робота рисовать
лесенки, в которых ширина ступенек может быть равна 1 клеточке
или 4 клеточкам. Проще всего этого достичь, используя для хране­
ния ширины ступеньки какую-нибудь переменную. Пусть это будет
переменная ш.
Что должно измениться в программе рисования лестницы? Ясно,
что от ширины ступеньки зависит общая длина лестницы. В пре­
дыдущей программе длина основания лестницы определялась тем,
что в первом цикле Робот закрашивает 2s
клеточек. Коэффициент 2 в этом выраже­
нии не что иное, как ширина ступеньки.
Поэтому при ширине ступеньки w мы мо­
жем заменить коэффициент 2 на w, и пер­
вый цикл примет такой вид, как показано
справа.
Уже из этого простого примера видно, что переменные можно пе­
ремножать: надо, как в алгебре, перемножать их значения. Вообще,
над переменными можно производить все те же арифметические опе­
рации, что и над числами.
При выполнении программы переменным w h s нужно до на­
чала выполнения цикла присвоить значения. После этого уже
можно найти и значение выражения w*s, перемножив значения
ПОВТОРИТЬ w*s РАЗ
закрась
вправо
КОНЕЦ
Что т а к о е п е р е м е н н ы е и к а к с н им и р а б о т а т ь 11
переменных w и s. Мы видим, что в алгоритмике, как и в алгеб­
ре, значение может быть не только у переменных, но и у выра­
жений.
Второй цикл отвечает за высоту лестницы, поэтому при измене­
нии ширины ступеньки он останется неизменным. В третьем цикле
все ступеньки рисуются по очереди сверху вниз. Ширина ступеньки
стала переменной, поэтому мы не можем написать одну последова­
тельность команд Робота для рисования всех таких ступенек. Одна­
ко мы можем вместо этого написать цикл рисования одной ступень­
ки (программа 1).
2)
s = 5
w = 2
ПОВТОРИТЬ w*s РАЗ
закрась
вправо
КОНЕЦ
ПОВТОРИТЬ s РАЗ
закрась
вверх
КОНЕЦ
ПОВТОРИТЬ s РАЗ
ПОВТОРИТЬ w РАЗ
закрась
влево
КОНЕЦ
вниз
КОНЕЦ
О
ПОВТОРИТЬ w РАЗ
закрась
влево
КОНЕЦ
Сводя воедино все уже написанные кусочки, мы получаем про­
грамму 2 рисования лестницы с рисунка 1.
Программа 2 не длиннее исходной программы, но может рисо­
вать с небольшими изменениями очень много разных лестниц, в за­
висимости от того, какие значения мы присвоим переменным s и w
Задача 1.1 Измените программу 2 еще раз, введя в нее до­
полнительно переменную h — высоту ступеньки и
добившись того, чтобы Робот мог рисовать лестни­
цы с переменными — числом, шириной и высотой
ступенек.
4.Переменные в процедурах
В начале написанной нами программы переменным s и w при­
сваиваются значения. Оставшаяся часть программы не меняется,
но она будет работать по-разному в зависимости от того, какие
12 Г Л А В А 1
именно значения были присвоены
переменным. Если мы оформим эту
часть программы в виде процедуры,
то ее можно использовать в лю­
бых программах (не обязательно в
нашей), где есть необходимость ри­
совать лестницу. Такая процедура по­
казана справа.
Теперь для рисования лестницы с
рисунка 1 достаточно выполнить про­
грамму 1, а лестницы с рисунка 2
будут нарисованы программами 2
и 3. Несложно написать и програм­
му, рисующую последовательно не­
сколько лестниц, например две (см.
программу 4).
ПРОЦ лестница
ПОВТОРИТЬ iv*s РАЗ
закрась
вправо
КОНЕЦ
ПОВТОРИТЬ s РАЗ
закрась
вверх
КОНЕЦ
ПОВТОРИТЬ s РАЗ
ПОВТОРИТЬ iv РАЗ
закрась
влево
КОНЕЦ
вниз
КОНЕЦ
КОНЕЦ
1)
s = 5
iv = 2
лестница
2)
s = 3
iv = 2
лестница
3)
s = 8
iv = 2
лестница
4)
iv = 2
лестница
повторить 10 раз
вправо
конец
s = 8
iv = 3
лестница
Как выбирать переменные
В обсуждавшихся выше программах нам встречались перемен­
ные s, w и h. Из каких соображений мы выбрали эти переменные?
Как вообще выбирать переменные и какими они могут быть? Прин­
ципы выбора переменных очень похожи на принципы выбора имен
процедур, которые мы обсуждали в Алгоритмике — 6. Прежде всего
ясно, что не любые символы подходят для переменных. Например,
использование переменной 13 может вызвать путаницу. Поэтому в
языках программирования вводятся синтаксические правила для
переменных. В нашем языке это правило выглядит так:
СИНТАКСИЧЕСКОЕ ПРАВИЛО Г “ — 1---------1
• Переменная должна начинаться с буквы (латинского или
русского алфавита)
Что т а к о е п е р е м е н н ы е и к ак с ними р а б о т а т ь 13
Кроме того, каждая переменная используется в программе с ка­
кой-то целью, и если она будет отражать эту цель, то программисту
будет легче ее запомнить и использовать. Выбранные нами перемен­
ные — это первые буквы в английских словах step (ступенька), width
(ширина) и height (высота). Если программа большая и переменных
много, то нужно брать более длинные переменные. Использование од­
ной и той же переменной в разных целях часто приводит к ошибкам
в программе.
. Условия с переменными
Робот стоит здесь В Алгоритмике — 6 нам встречалась
следующая задача:
Робот стоит в горизонтальном прямо­
угольнике шириной 1, огороженном сте­
нами, на некотором расстоянии от левой
стены. Переведите Робота в клетку, нахо­
дящуюся на таком же расстоянии от пра­
вой стены (рис. 3).
Мы обсудили рекурсивное решение
этой задачи. Переменные позволяют предложить другое решение. Вот
как это делается.
Сначала Робот считает расстояние до левой стены (группа ко­
манд 1).
ПОКА слева свободно ДЕЛАТЬ
влево
d = d+ 1
КОНЕЦ
Робот должен оказаться здесь
Рис. 3
После выполнения этих команд в переменной d хранится рассто­
яние от исходного положения Робота до левой стены. Если Робот
стоял у левой стены, то значение переменной d будет равно 0, если
между ним и стеной была одна клетка, то d будет равно 1 и т. д.
Теперь Робот должен дойти до правой стены и отойти от нее
влево на d клеток. Это можно делать по-разному. Например, подой­
дет группа команд 2.
ПОКА справа свободно ДЕЛАТЬ
вправо
КОНЕЦ
ПОКА d > О ДЕЛАТЬ
влево
d = d - 1
КОНЕЦ
14
Первый цикл ПОКА доводит Робота до правой стены, а второй
цикл отводит его на нужное число клеток влево. В этом втором цик­
ле ПОКА мы использовали условие d > 0. Такое условие истинно, ес­
ли значение переменной d положительно, и оно ложно, если значе­
ние переменной d отрицательно или равно нулю. При каждом про­
ходе второго цикла ПОКА значение переменной d уменьшается на
единицу. Оно становится равным нулю, когда число проходов срав­
нивается с числом шагов Робота из исходного положения до левой
стенки, что и дает требуемый результат.
Условие d > 0 — типичный пример условия, использующего зна­
чения переменных. Мы можем сравнивать переменные с числами:
г < 5, s = 3 и т. д. Можем сравнивать числовые выражения,
содержащие переменные: а + Ъ< 3 - s. Для сравнения используются
знаки <, >, = (меньше, больше и равно). Кроме простых знаков срав­
нения, есть три двойных знака: <=, >=, о . Они используются вмес­
то привычных математических знаков: <= вместо <, >= вместо >,
о вместо 5й. Знаки, используемые в алгоритмике, составные: они со­
стоят из двух символов. Чтобы правильно их прочитать, нужно просто
вставить «или» между этими символами: «меньше или равно», «боль­
ше или равно» и «меньше или больше», т. е. «не равно». Поэтому ус­
ловие а <= Ъсовпадает со сложным условием (а < Ъ) ИЛИ (а = Ь), так
что эти составные знаки можно вообще не использовать. Можно так­
же обойтись без знака >, ведь условие а > b можно переписать как
Ъ< а. Но использование дополнительных знаков, если они имеют яс­
ный смысл, может несколько облегчить процесс записи программы.
Упражнение Напишите сложное условие, совпадающее с условием
s + d >= 3*f, используя условия сравнения < и =.
Использование переменных и условий с переменными позволяет
теперь найти новые решения некоторых задач из Алгоритмики — 6.
В следующем разделе мы обсудим алгоритм переноса Ханойских ба­
шен с точки зрения новых возможностей.
7. Возвращение к Ханойским
В Алгоритмике — 6 мы написали
несколько процедур оптимального пере­
кладывания Ханойских башен. Вот, на­
пример, как выглядит одна из процедур
для башни из трех кружков (см. справа).
Мы видим, что эта процедура вызы­
вает две процедуры оптимального пере­
кладывания башни из двух кружков.
Процедура оптимального перекладывания башни из четырех круж­
ков будет вызывать две процедуры оптимального перекладывания
башням
ПРОЦ 3-башня с А на В
НАЧАЛО
2-башня с А на С
перенеси с А на В(3)
2-башня с С на В
КОНЕЦ
Что т а к о е п е р е м е н н ы е и к ак с ними р а б о т а т ь 15
башни из трех кружков и т. д. Число процедур растет с ростом
числа кружков. Если исходно в башне было 64 кружка, то понадо­
бится довольно много времени и бумаги для написания всех этих
процедур.
Введение переменных позволяет заменить много разных про­
цедур всего шестью. Этих шести процедур достаточно для перекла­
дывания башни из любого числа кружков. Каждая из этих шести
процедур будет отвечать за перекладывание башни с одного из стерж­
ней на другой. Процедуры будут, по существу, одинаковыми и будут
различаться только именами стержней.
Итак, задача состоит в том, чтобы переложить башню высотой h
кружков со стержня А на стержень В по правилам Ханойской баш­
ни. Обсуждавшийся нами алгоритм оптимального переноса состоит
в следующем: нужно сначала перенести все кружки, кроме самого
большого, со стержня А на стержень С, затем перенести этот боль­
шой кружок со стержня А на стержень В, а потом перенести башню
со стержня С на стержень В. Команду переноса кружка с одного
стержня на другой (например, со стержня А на стержень В) будем
записывать просто в виде перенеси с А на В. Такой команде не нуж­
но указывать номер переносимого кружка, она просто берет верхний
кружок со стержня А и устанавливает на стержень В. Если это
действие невозможно (а такое бывает, если на стержне А нет
кружков или переносимый кружок
больше верхнего на стержне В), то
наступает ОТКАЗ. Всего таких ко­
манд 6.
Попробуем написать процеду­
ру переноса. Мы предполагаем, что
в переменной h хранится высота
переносимой башни. Тогда про­
цедура выглядит так, как показа­
но справа.
Здесь две процедуры перенеси башню с А на С и перенеси башню с
С на В еще не написаны, но ясно, что они должны быть очень похо­
жи на нашу первую процедуру. Каждая из них будет вызывать две
другие процедуры. Ясно и то, почему мы обращаемся к ним, умень­
шив предварительно значение переменной h на 1: в переносимой ими
башне на один кружок меньше, чем в исходной. Написанная нами
процедура является рекурсивной — она вызывает саму себя через
другие процедуры. Перед завершением процедуры мы должны уве­
личить значение переменной Л на 1: вызывающая процедура перено­
сит более высокую башню.
Казалось бы, все в порядке, но, присмотревшись к нашей про­
цедуре внимательнее, мы обнаружим, что она не может правильно
работать. Одним из важнейших признаков правильной работы рекур­
сивной процедуры является своевременная остановка — при каких-
то условиях такая процедура должна перестать вызывать себя (в том
числе и через другие процедуры).
16 Г Л А В А 1
ПРОЦ перенеси башню с А на В
НАЧАЛО
h = h - 1
перенеси башню с А на С
перенеси с А на В
перенеси башню с С на В
h = ft + 1
КОНЕЦ
А наша процедура никаких условий не проверяет! Что же это за
необходимые условия?
Если при входе в процедуру h = 0, то попытка ее выполне­
ния приведет к обращению к следующим процедурам со значением
переменной Л, равным -1. Но
это означает, что мы просим
переставить башню из -1
кружка! Ясно, что такая опе­
рация бессмысленна. Если
значение переменной h в про­
цедуре перестановки башни
равно 0, то процедура просто
не должна ничего делать. Вот
к какой процедуре приводит
это рассуждение (программа
справа).
Эта процедура не вызывает никаких процедур при h = 0 (и при
h отрицательном). Вот теперь все правильно, в чем вы легко убеди­
тесь, дописав недостающие процедуры и проверив, как они рабо­
тают, вручную или на компьютере. Например, вы можете выписать
все исполняемые команды и значение переменной h после выполне­
ния каждой из них при h = 4 и вызове процедуры перенеси башню
с А на В.
ПРОЦ перенеси башню с А на В
НАЧАЛО
ЕСЛИ ft > О ТО
ft = h - 1
перенеси башню с А на С
перенеси с А на В
перенеси башню с С на В
ft = ft + 1
КОНЕЦ
КОНЕЦ
Задача 1.2 Напишите недостающие процедуры перенеси башню с
А на С и перенеси башню с С на В.
Задача 1.3 Измените процедуры переноса башни таким образом,
чтобы при h = 1 они не вызывали другие процедуры,
а выполняли команду переноса одного кружка.
ИТОГИ
В этой главе мы познакомились с переменными.
Переменная — это имя, которое принимает числовые зна­
чения.
В процессе работы программы значение переменной
может меняться.
Переменные — основной инструмент упрощения алгорит­
мов.
Переменные можно использовать и в процедурах.
Использование переменных делает программы универ­
сальными и позволяет с помощью одной программы ре­
шать целую серию однотипных задач.
Глава 2
Переменные
в графических Исполнителях
и рисование графиков
Применение переменных в графических Исполнителях, рисую­
щих на плоскости, расширяет их возможности еще значительнее, чем
для Робота и Ханойских башен. Одна короткая программа или про­
цедура теперь может справиться с работой, выполнение которой тре­
бовало большого числа разных программ. Особенно удобно использо­
вание переменных там, где поведение графических Исполнителей
описывается с помощью формул.
В прошлом году мы написали много программ для Чертежника
и Черепахи. Использование переменных облегчает написание прог­
рамм для этих Исполнителей и позволяет заменить большое число
разных программ одной. В этой главе мы научимся пользоваться пе­
ременными при работе с Чертежником и Черепахой.
|
1.| Чертежник и Черепаха: напоминание
Напомним вкратце описание Исполнителей Чертежник и Чере­
паха из Алгоритмики — 6.
Чертежник живет на координатной плоскости, на которой зада­
на прямоугольная система координат. Он рисует пером. У него четы­
ре команды. По команде подними перо Чертежник поднимает перо, а
по команде опусти перо опускает его. Поднятое перо не оставляет сле­
да при перемещении пера по плоскости, а опущенное перо прочерчи­
вает отрезок при каждом перемещении пера из одного положения в
другое. Команд перемещения две, и обе с параметрами. Команда пе­
реведи в точку(з, Ь) перемещает перо в точку с координатами (а, Ь), где
бы оно до этого ни находилось. Команда сдвинь на вектор(а, Ь) сдви­
гает перо из текущего положения на вектор с координатами (а, Ь).
В начале исполнения любой программы перо Чертежника поднято.
В отличие от Чертежника, Черепаха живет на бескоординатной
плоскости и рисует хвостом. У нее шесть команд. Две первые подни­
ми хвост и опусти хвост играют ту же роль, что и команды подними
перо и опусти перо Чертежника. А вот команды с параметрами дру­
гие. Это команды поворота вправо(а) и влево(а) и команды движения
вперед(сО и назад(d). При выполнении команды поворота Черепаха по­
ворачивается вправо или влево на указанный в параметре команды
ГЛАВА 2
угол, выраженный в градусах. При выполнении команды движения
Черепаха сдвигается на указанное в параметре число шагов в нуж­
ном направлении. Она оставляет след, если ее хвост опущен. В нача­
ле выполнения любой программы хвост Черепахи поднят.
Черепаха рисует многоугольники
Чертежник способен нарисовать квадрат. А вот если надо нари­
совать правильный многоугольник с другим числом сторон, то Чер­
тежник сталкивается с серьезными трудностями. Черепаха же рису­
ет не только квадрат, но и другие правильные многоугольники лег­
ко и непринужденно.
Для того чтобы написать процедуру рисования правильного мно­
гоугольника с любым числом сторон, нам нужно лишь вспомнить,
что делала Черепаха в разных
конкретных случаях, и заме­
нить стоявшие в этой процедуре
числа на переменные. Пусть в
переменной п записано число
сторон, а в переменной d —
длина одной стороны. Тогда
процедура рисования правиль­
ного многоугольника с п сторо­
нами длины d будет выглядеть
так, как показано справа.
В этой процедуре собраны все те программы, которые мы писа­
ли отдельно для каждого правильного га-угольника. Теперь для того
чтобы нарисовать, скажем, правильный семиугольник со стороной
20, достаточно написать в программе три команды.
п = 7
d = 20
правильный многоугольник
Упражнение Как будет работать процедура правильный многоуголь­
ник, если значение п отрицательно? Например, если
п = -3?
Упражнение Как будет работать процедура правильный многоуголь­
ник, если значение d отрицательно? Например, если
d = -20?
Упражнение Напишите программу, рисующую рядом правильный
треугольник, квадрат и пятиугольник с одинаковой
длиной сторон.
ПРОЦ правильный многоугольник
опусти хвост
ПОВТОРИТЬ п РАЗ
вперед(сУ)
вправо(360/л)
КОНЕЦ
подними хвост
КОНЕЦ
П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 19
и р и с о в а н и е г р а ф и к о в
1)
ПРОЦ правильная звезда
опусти хвост
ПОВТОРИТЬ л РАЗ
вперед(сУ)
вправо(360*т/л)
КОНЕЦ
подними хвост
КОНЕЦ
2)
ПРОЦ спираль
опусти хвост
ПОВТОРИТЬ 12 РАЗ
вперед(с?)
вправо(120)
d = 9*cf/10
КОНЕЦ
подними хвост
КОНЕЦ
Немного изменив процедуру правильный многоугольник, мы научим
Черепаху рисовать и правильные звезды. Введем для этого дополни­
тельную переменную т, которая будет обозначать число сторон пра­
вильного n-угольника, которые мы пропускаем, выбирая вершину, в
которую проводим очередную сторону звезды (пропуск одной стороны
приводит к тому, что мы ее и нарисуем). В программе 1 (слева вверху)
показана процедура рисования звезды.
Упражнение Какие фигуры нарисует процедура правильная звезда
при следующих значениях переменных:
Рис. 4
а) п =9, т —1, d —20;
б) п =9, т = 2, d = 20;
в) п =9, т = 3, d = 20;
г) п =9, т = 4, d = 20?
Без переменных написание программы рисова­
ния спирали (рис. 4) превратилось бы в довольно неп­
риятный механический процесс. А теперь это легкая
задача. Нужно только при каждом повороте умень­
шать длину d рисуемого отрезка (см. программу 2
вверху).
Упражнение Введите переменные, отвечающие за начальное на­
правление Черепахи, длину первого отрезка, угол
поворота, количество отрезков, и измените процеду­
ру спираль таким образом, чтобы она при соответству­
ющих значениях новых переменных могла рисовать
спирали с рисунка 5.
20 Г Л А В А 2
В отличие от Черепахи, для Чертежника рисование правильных
многоугольников является сложной задачей. Для вычисления ко­
ординат вершин таких многоугольников нужно знать тригономет­
рию — науку о характеристиках углов. Только квадраты даются Чер­
тежнику без особых усилий. Причем не только квадраты, стороны
которых параллельны координатным осям, но и повернутые квадра­
ты. Сейчас мы увидим, как это делается.
Пусть одна сторона квадрата — это отрезок с концами в точках
(О, 0) и (3, 2). Повернув этот отрезок на 90° против часовой стрел­
ки относительно начала координат, мы получим отрезок с концами
(0, 0) и (-2, 3). Поскольку он является результатом поворота исход­
ного отрезка на 90°, два построенных отрезка равны по длине и пер­
пендикулярны друг другу. Поэтому они дают две стороны квадрата.
Теперь можно найти и две другие его стороны.
Упражнение Найдите концы двух оставшихся сторон квадрата.
Напишите программу для Чертежника, рисующую
этот квадрат.
Придуманный нами способ рисования наклонных квадратов ра­
ботает, если второй конец исходного отрезка лежит не только в точ­
ке (3, 2).
Задача 2.1 Напишите для Чертежника процедуру рисования
квадрата, стороной которого является отрезок с кон­
цами (0, 0) и (а, Ь).
Первая вершина рисуемого квадрата тоже может лежать в лю­
бой точке — необязательно в начале координат.
Задача 2.2 Напишите для Чертежника процедуру рисования
квадрата, стороной которого является отрезок с кон­
цами (с, d) и (а, Ь).
3^1 Как Черепаха может нарисовать кривую
Если Черепаха делает резкие повороты, то оставляемый ею след
имеет вид ломаной линии. Если же повороты происходят на неболь­
шой угол, то след имеет вид плавной кривой. Мы уже пользовались
этим в Алгоритмике — 6 при рисовании окружностей. Если процеду­
ре правильный многоугольник из предыдущего параграфа задать боль­
шое число сторон п, например 120 или 360, и небольшую длину d
стороны многоугольника, например 1 или 2, то нарисованный ею
п-угольник будет очень похож на окружность. Так происходит пото­
му, что угол в 360°/120 = 3°или в 360°/360 = 1°. Это очень небольшой
угол. Поэтому короткие стороны сливаются в гладкую кривую.
Этот прием уменьшения угла поворота и уменьшения отрезков
сдвига можно использовать и для рисования других кривых, напри­
П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 21
и р и с о в а н и е г р а ф и к о в
мер спиралей. Будем хранить длину шага Черепахи в переменной d,
а число шагов — в переменной I. Программа (см. ниже) — процедура
рисования спирали с рисунка 6.
Рис. 6 Спираль с d =0.01, / = 900
ПРОЦ гладкая спираль
опусти перо
ПОВТОРИТЬ / РАЗ
вперед(с/)
вправо(1)
d = d + 0.001
КОНЕЦ
подними перо
КОНЕЦ
Упражнение Определите, с какого конца (внутреннего или внеш­
него) процедура гладкая спираль рисует спираль, изоб­
раженную на рисунке 6.
Изображение зависимостей
на графиках — работа для Чертежника
Задача 2.3 Автобус ехал из Москвы в Переславль-Залесский, рас­
стояние до которого 140 км, со скоростью 70 км/ч. По
дороге он остановился на 15 мин в Сергиевом Посаде,
который находится на полпути между Москвой и Пе­
реелавлем-Залесским. Нарисуйте график зависимости
расстояния автобуса до Москвы от времени движения.
Рис. 7. График зависимости рассто­
яния от автобуса до Москвы от вре­
мени
Процесс рисования графиков
требует наличия координат на плос­
кости, поэтому лучше всего для
этой работы подходит Чертежник.
Он для нее и предназначен. Поле
Чертежника расчерчено на квадрат­
ные клетки, и на нем выбраны две
оси координат — горизонтальная и
вертикальная (рис. 7).
Значения времени мы будем
откладывать по горизонтальной оси
системы координат — х. Чтобы
уметь отложить значение, мы
должны выбрать единицу измере­
ния по оси. Пусть одна клеточка
означает 15 мин. На вертикальной
22 Г Л А В А 2
оси у будем откладывать расстояние автобуса до Москвы. Выберем в
качестве единицы расстояния 20 км.
Упражнение Какова будет высота графика (в клетках)?
Ниже нам понадобятся десятичные дроби. В Алгоритмике — 7,
как и в Алгоритмике — 6, для отделения целой части десятичной
дроби от ее дробной части мы используем десятичную точку, а не де­
сятичную запятую. Например, число 3.5 — это три целых пять деся­
тых. Запятая нам нужна для других целей.
Первую часть пути от Москвы до Сергиева Посада автобус шел с
постоянной скоростью, поэтому график зависимости расстояния от
времени на этой части будет отрезком прямой, соединяющим точку
с координатами (0, 0) и точку с координатами (4, 3.5). Эта вторая
точка соответствует времени движения 1 ч (4 клетки по горизонтали
по 15 мин каждая) и расстоянию 70 км до Сергиева Посада (3.5 клет­
ки по вертикали по 20 км каждая). Такой отрезок Чертежник про­
водит с легкостью, исполнив команды
опусти перо
сдвинь на вектор(4, 3.5)
Напомним, что в начале исполнения программы перо Чертежни­
ка располагается в точке (0, 0) и поднято.
Вторая часть графика соответствует стоянке автобуса в Сергие­
вом Посаде и поэтому представляет горизонтальный отрезок — вре­
мя течет, а расстояние автобуса до Москвы не меняется. Стоянка про­
должается 15 мин, поэтому это отрезок длиной в одну клетку, и его
можно нарисовать, выполнив команду
сдвинь на вектор(1, О)
В третьей части пути автобус опять удаляется от Москвы со ско­
ростью 70 км/ч, и график зависимости расстояния от времени снова
является наклонным отрезком. Скорость и продолжительность треть­
ей части пути такие же, как и первой. Поэтому этот отрезок имеет
ту же длину и такой же наклон, что и первый, и его можно нарисо­
вать той же самой командой
сдвинь на вектор(4, 3.5)
Собирая все команды вместе, по­
лучаем программу (см. справа) рисова­
ния графика зависимости расстояния от
времени.
опусти перо
сдвинь на вектор(4, 3.5)
сдвии>- на вектор(1, О)
сдвинь на вектор(4, 3.5)
П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 23
и р и с о в а н и е г р а ф и к о в
Задача 2.4 Простояв 1 ч в Переславле-Залесском, автобус отпра­
вился в обратный путь к Москве с той же скоростью
и 15-минутной стоянкой в Сергиевом Посаде. Допол­
ните программу рисования графика зависимости рас­
стояния автобуса до Москвы от времени таким обра­
зом, чтобы она включила и возвращение автобуса.
Задача 2.5 Измените программу рисования графика таким обра­
зом, чтобы она рисовала график расстояния автобуса
до Переславля-Залесского, а не до Москвы.
Задача 2.6 Измените программу рисования графика зависимости
расстояния автобуса до Москвы от времени, заменив
в ней все команды сдвинь на вектор командами пере­
веди в точку.
Массивы
Нарисованный в предыдущем разделе график расстояния автобу­
са до Москвы устроен очень просто. У нас есть несколько точек на
плоскости, отвечающих:
• начальному положению автобуса;
• положению автобуса, когда он доехал до Сергиева Посада;
• положению автобуса, когда он отъехал от Сергиева Посада;
• положению автобуса, доехавшего до Переславля-Залесского.
Эти точки поочередно соединяются отрезками. Необходимость в
рисовании графиков такого рода возникает очень часто. Предполо­
жим, например, что мы хотим нарисовать график скорости спортсме­
на, бегущего стометровку. У нас нет возможности измерить эту ско­
рость в каждый момент времени. Однако это можно сделать каждую
десятую долю секунды. Соединение точек отрезками — это способ
приблизить скорость в промежутках между двумя последовательны­
ми измерениями.
Функции, изображенные на таких графиках, не задаются фор­
мулами. Для их задания необходимо указать значения функции
через определенный интервал. Если бы для каждого из этих значе­
ний мы завели свою переменную, то быстро столкнулись бы с непри­
ятностями. Во-первых, таких переменных должно быть очень много.
Скажем, для спортсмена на стометровке понадобилось бы около
ста переменных. Во-вторых, написание процедур рисования графи­
ков с таким количеством переменных превратилось бы в непосиль­
ное занятие: мы не смогли бы пре­
дусмотреть их все в процедуре.
Способ преодоления этих труд­
ностей известен давно и применя­
ется в большинстве языков про­
24 Г Л А В А 2
а [1] а [2] а [3] а [4]
Рис. 8
граммирования. Он состоит в том, что вместо большого количества
разных переменных используется одна переменная с разными номе­
рами. Такая переменная называется массивом. Массивы также назы­
вают таблицами. На рисунке 8 изображен пример массива.
Массив можно представлять себе как много переменных-ящич­
ков, для обращения к которым мы должны сначала указать имя
массива, а затем номер ящичка внутри массива. В нашем языке этот
номер указывается в квадратных скобках после имени массива.
Так же как и в случае одиночных перемен­
ных, прежде чем работать с массивом, его необ­
ходимо заполнить — занести значения элемен­
тов массива. Например, в начале программы ри­
сования графика стоимости нефти необходимо
внести данные об этой стоимости (см. команды
справа).
А вот процедура рисования графика может
быть общей для всех таких программ:
у[0]= 54
у[1] =58
У(2] = 56
У [3] = 59
у[4]= 58
У [5] = 56
у[6] = 59
Здесь переменная у задает имя массива, в котором хранятся дан­
ные, предназначенные для изображения на графике, п — длина это­
го массива (или, точнее, количество его элементов, которые мы хо­
тим отобразить на графике), ys — величина шага по вертикальной
оси, ts — величина шага по горизонтальной оси, а в переменной b
содержится начальная цена.
Теперь, чтобы Чертежник нарисовал недельный график цен на
нефть, заданных массивом у, достаточно выполнить команду
график табличной функции
Задача 2.7 Измените процедуру рисования графика табличной
функции таким образом, чтобы график рисовался не­
обязательно с нулевого, но с произвольного момента
времени, заданного значением дополнительной пере­
менной.
П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 25
и р и с о в а н и е г р а ф и к о в
Массивы — универсальный способ работы с переменными. Мы бу­
дем пользоваться ими и дальше. Заполнение длинных массивов требу­
ет много времени, и они занимают много места. Зависимость между
переменными можно описывать по-разному. Очень часто это описание
задается в виде формулы, и Чертежник очень хорошо приспособлен
для рисования графиков таких зависимостей. Формулы гораздо ком­
пактнее массивов. Однако после того как массив заполнен, им гораз­
до легче пользоваться, чем формулой, особенно если она сложная. Кро­
ме того, использование массива требует меньше времени.
6.Откуда берутся формулы
Многие законы природы выражаются математическими форму­
лами. Например, закон всемирного тяготения Ньютона гласит: Лю­
бые два тела притягиваются друг к другу с силой, пропорциональ­
ной массе каждого из них и обратно пропорциональной квадрату
расстояния между ними.
На языке формул этот закон записывается так:
Здесь F — сила притяжения двух тел, т1 — масса первого тела,
т2 — масса второго тела, г — расстояние между ними. Коэффициент
пропорциональности у зависит от выбранной нами системы физичес­
ких единиц.
Но как люди открывают законы природы? Это дело было непрос­
тым в XVII в., во времена Ньютона. Остается оно таким и сейчас. Схе­
матически это происходит так. Обычно открытию закона предшеству­
ют многолетние измерения различных характеристик изучаемых объ­
ектов. Результаты этих измерений записываются в огромные таблицы.
Затем исследователи изучают эти таблицы — обрабатывают результа­
ты измерений, пытаясь выявить в них закономерности. Иногда это
удается. Тогда планируются новые эксперименты — уже для провер­
ки обнаруженных закономерностей и определения границ их приме­
нимости. Этот цикл повторяется много раз, и лишь очень редко уда­
ется обнаружить и подтвердить новый, неизвестный ранее закон.
Из этого описания понятно, чем может помочь — и помогает —
компьютер в изучении природы. Он очень хорошо приспособлен для
хранения большого количества данных — результатов измерения, и
его можно использовать для графического изображения зависимостей
между различными характеристиками. И наконец, к нему можно при­
соединить измерительные приборы для автоматического сбора данных.
Задача 2.8 в массиве таблицы записаны результаты измерений
величины тока (в миллиамперах), проходящего через
данное сопротивление. Первоначально поданное на
26 Г Л А В А 2
сопротивление напряжение равнялось 10 В и уве­
личивалось на 1 В перед каждым новым измерением
тока. Изобразите результат измерений на графике,
выбрав подходящий масштаб по горизонтальной и
вертикальной осям. Сделайте предположение о харак­
тере зависимости величины тока от величины подан­
ного напряжения. Какие эксперименты вы предложи­
ли бы для проверки этого предположения?
Напряжение,
V
10 11 12 13 14 15 16 17 18 19
Величина
тока, а
15.1 16.6 17.9 19.5 21.0 22 .4 23.9 25.6 27.2 28.7
Если вы аккуратно решали предыдущую задачу, то обнаружили,
что приходящая на ум самая простая зависимость между подаваемым
напряжением и проходящим током, строго говоря, не выполняется.
Результат измерений иногда оказывается больше, чем предусматри­
вает эта зависимость, иногда меньше и очень редко в точности та­
ким. Это не означает, однако, что придуманная вами зависимость
плоха. Причины такого несоответствия могут быть совсем другими.
Обсудим их.
Даже если бы закон природы выполнялся в точности, мы бы не
смогли этого обнаружить. Дело в том, что для поиска и проверки
закономерности мы пользуемся приборами: один из приборов пода­
ет напряжение, другой измеряет проходящий при этом ток. Совер­
шенных приборов не бывает, и величина подаваемого напряжения
немного отличается от целого числа вольт. Точно так же измеренная
величина тока немного отличается от величины действительно прохо­
дящего тока. Так что результат измерения 22 мА означает на самом
деле что-то вроде «величина измеряемого тока наверняка лежит в
интервале от 21.8 до 22.2 мА». Если предлагаемая закономерность
предсказывает результат, попадающий в указанный интервал, то это
говорит в ее пользу.
Еще один возможный источник отклонений заключается в том,
что любой закон выполняется (с хорошей точностью) только при
соблюдении определенных условий. Например, зависимость величи­
ны тока от напряжения может быть очень простой, если ток не слиш­
ком мал и не слишком велик. Определение таких условий — важная
часть работы по анализу закона.
Задача 2.9 Как измерить толщину тонкой нитки? Один из спо­
собов состоит в том, чтобы намотать нитку на каран­
даш, не оставляя зазоров между витками. Если сде­
лать это аккуратно, на карандаше появится полоска
из намотанной нитки. Толщину такой полоски мож-
П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 27
и р и с о в а н и е г р а ф и к о в
но уже измерить линейкой с миллиметровыми деле­
ниями. Но толщина полоски должна быть пропор­
циональна толщине нитки. Например, если намотано
100 витков и толщина полоски оказалась 30 мм, это
означает, что толщина нитки 0.3 мм.
Изучите этот способ измерения эксперименталь­
но. Намотайте нитку несколько раз, записывая тол­
щину полученной полоски и число витков. Запишите
результаты ваших измерений в два массива: в массив
с заносите число витков, а в массив w — измеренную
толщину полоски. Изобразите на графике зависи­
мость w от с. Похож ли полученный вами график на
график прямой пропорциональности?
7.Дискретизация
В обыденной жизни и в математике мы часто говорим, что не­
которая величина, например температура, меняется непрерывно.
Противоположностью непрерывности является дискретность. На­
пример, мы видим, что стрелка часов перемещается по циферблату
непрерывно, песок в песочных часах тоже сыпется непрерывно, а
цифры на экране табло или на экране цифровых часов меняются
дискретно, т. е. на экране может быть только целое число часов, ми­
нут (иногда секунд). Даже если какая-то величина, например дли­
на, измеряется с точностью до сотых, тысячных и даже более мел­
ких долей, все равно результат измерения представляет собой конеч­
ную десятичную дробь, и мы говорим о нем как о дискретном.
Заметим, что что-то кажущееся нам непрерывным может при бо­
лее детальном рассмотрении оказаться дискретным. Так, в наших
примерах с часами можно регистрировать дискретное перемещение
стрелки при одном колебании балансира часов (это иногда бывает
видно на циферблате электронных часов со стрелками). В песочных
часах можно зафиксировать падение одной песчинки и т. д. Можно
считать, что объем жидкости в стакане — величина непрерывная, но
теоретически можно посчитать число молекул в стакане и считать
этот объем дискретным. Переход от объектов и величин окружающе­
го мира к их цифровому измерению и представлению называется
дискретизацией.
Мы всегда измеряем физические величины с некоторой точ­
ностью. Например, говорим, что бегун пробежал стометровку за
9.71 с, а можно было бы еще точнее сказать, что за 9.713 с. О рас­
стоянии между двумя городами мы говорим, что оно (измеренное
между главными почтамтами этих городов) равно 46 км, а оно мо­
жет быть равно 46,3 км. Переход от величин в окружающем мире к
их измеренным значениям является примером дискретизации. Ког­
да значение измерено, его уже легко обрабатывать на компьютере.
28 Г Л А В А 2
Вот еще несколько примеров дискретизации. Можно измерять
(приближенно) частоту звука в целых значениях числа колебаний в
секунду (в герцах), а рассматривать дискретизацию высоты музы­
кального тона, считая, что при выполнении семи повышений тона на
одно и то же число раз соответствующая частота повышается вдвое
(это и даст нам дискретную музыкальную гамму). Можно дискрети­
зировать цвет, приближенно представляя его в виде комбинации
красного, зеленого и голубого цветов и дискретизируя интенсивность
каждой из этих трех составляющих.
Чуть более сложный, но очень важный пример. Мы фотографиру­
ем какой-то объект на цифровую камеру. При фотографировании изоб­
ражение объекта представляется в виде так называемой матрицы —
большой таблицы (двумерного массива). В такой таблице может быть
несколько миллионов ячеек (клеток). В каждой ячейке мы можем хра­
нить дискретную информацию о цвете соответствующего фрагмента
изображения (это средний цвет кусочка реального объекта). Вся эта
большая матрица — дискретизация реального изображения.
Человек не может различить очень близкие точки, очень близ­
кие моменты времени, не может отличить непрерывное изображение
от его дискретного приближения. Буквы в тексте, который вы сей­
час читаете, составлены из отдельных точек, не заметных вам. На эк­
ране компьютера и на экране телевизора изображение дискретно. Оно
состоит из отдельных элементов, пикселей. Цвет и яркость каждого
пикселя также дискретны. Более того, изображение на экране диск­
ретно и во времени. Эффект непрерывного с точки зрения человека
процесса на экране создается в результате смены 24 кадров каждую
секунду.
Ясно, что массивы очень хорошо приспособлены для записи в
компьютер результатов дискретизации и дальнейшей работы с ними.
Но можно дискретизировать и математические формулы, которые
описывают непрерывные процессы, используя для этого массивы. Об
этом и пойдет речь дальше.
. Рисование формул
Иногда закон природы удается записать в виде формулы. Зави­
симость, заданную таким образом, также нужно уметь изображать.
Задача 2.10 Нарисовать график зависимости от времени расстоя­
ния до земли камня, отпущенного на высоте 50 м.
Решение Расстояние камня от земли определяется формулой
h(t) = 50 - 9.8t2/2.
Здесь h — измеренное в метрах расстояние кам­
ня до земли, t — измеренное в секундах время с
П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 29
и р и с о в а н и е г р а ф и к о в
Рис. 9. График за­
висимости высоты
положения камня от
времени полета.
Первая попытка
Рис. 10. График за­
висимости высоты
положения камня от
времени полета.
Вторая попытка
начала падения, 50 — начальное расстояние кам-
о
ня до земли, 9.8 м/с — ускорение свободного
падения.
Поручим построение графика движения кам­
ня Чертежнику. Воспользуемся переменными. Бу­
дем откладывать по горизонтальной оси время, по
вертикальной — расстояние до земли и строить
график «по точкам», как в алгебре, соединяя со­
седние точки отрезками прямых. Единицей изме­
рения времени выберем секунду, единицей изме­
рения расстояния — 10 метров. Непонятно лишь,
сколько отрезков надо провести, — это зависит от
времени полета камня. Ясно, однако, что пяти се­
кунд наверняка хватит, чтобы камень долетел до
земли. Теперь программа выглядит так:
переведи в точку(0, 5)
опусти перо
t = 0
ПОВТОРИТЬ 5 РАЗ
переведи в точку^, 50 - 9.8*f*f/2)
t = t + 1
КОНЕЦ
Предложив Чертежнику выполнить эту про­
грамму, мы увидим график (рис. 9). Ясно, что
это не вполне то, чего бы мы хотели. У графика
два главных недостатка.
Первый состоит в том, что зависимость рассто­
яния от времени представлена ломаной линией,
которая хорошо приближает значения перемен­
ной h только в точках излома, а между этими
точками значения переменной заметно разли­
чаются.
Второй недостаток еще существенней: график
показывает, что после удара о землю камень про­
должает падать — значение переменной h стано­
вится отрицательным. Но наша формула хорошо
описывает падение камня только до момента уда­
ра о землю. После этого камень будет лежать на
земле, расстояние до земли будет равно нулю. По­
этому часть графика, лежащая ниже оси абсцисс,
вводит в заблуждение. Ясно, что в жизни так не
бывает.
Формула хорошо описывает высоту положе­
ния камня только до момента его удара о землю,
а потом высота будет равна нулю.
30 Г Л А В А 2
Для преодоления первого недостатка можно, как
мы это уже не раз делали, уменьшить шаг сдвига по
времени. Сделаем его равным не 1 секунде, а 0.1 се­
кунды. В результате количество изломов на ломаной
линии увеличится и она будет гораздо лучше прибли­
жать значения высоты. Кроме того, нам надо прекра­
тить рисование графика после удара камня о землю.
Для этого будем на каждом шаге цикла проверять, не
произошел ли удар. Вот что в результате получается:
переведи в точку(0, 5)
опусти перо
t = 0
ПОКА (50 - 9.8 П / 2 >= 0) ДЕЛАТЬ
переведи в точкуД, 50 — 9.8 t*t/2)
t = t + 0.1
КОНЕЦ
Условие в цикле ПОКА гарантирует, что камень
находится над землей, а шаг мы уменьшили. Новый
график гораздо лучше предыдущего описывает и
математический закон и действительное положение
вещей (рис. 10).
9.Процедуры рисования графиков
При рисовании графиков зависимостей, как бы эти зависимости
ни были заданы, нам приходится выбирать размер шага по каждой
из осей координат. Вид графика зависит от выбранного размера.
При уменьшении шага график растягивается, а при увеличении —
сжимается. Нам хотелось бы, чтобы график помещался на экране
Чертежника и на нем можно было разобрать все важные детали вза­
имозависимости. Очень часто оказывается, что с первой попытки не
удается нарисовать понятный и полезный график. Приходится пе­
репробовать несколько вариантов, прежде чем удастся подобрать
подходящие шаги по осям. Это означает, что шаг по оси должен
задаваться в одном месте, чтобы достаточно было сделать одно изме­
нение. Другими словами, длина шага должна быть переменной.
Некоторые другие данные тоже хочется сделать переменными,
чтобы при их изменении не надо было искать по всей программе, где
нужно внести поправки, рискуя при этом что-нибудь забыть. Так, ес­
ли камень был брошен не с высоты 50 метров, а с высоты 75 метров,
то в предыдущей программе надо поменять три строки:
• условие в цикле ПОКА, где проверяется, долетел ли камень до
земли;
П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 31
и р и с о в а н и е г р а ф и к о в
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с
394  информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с

More Related Content

Similar to 394 информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с

всеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и др
всеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и дрвсеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и др
всеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и дрgdzeyka
 
651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособие651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособиеivanov1566353422
 
651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособие651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособиеefwd2ws2qws2qsdw
 
геополитика цивилизации перспективы становления интегральной цивилизации том6
геополитика цивилизации перспективы становления интегральной цивилизации том6геополитика цивилизации перспективы становления интегральной цивилизации том6
геополитика цивилизации перспективы становления интегральной цивилизации том6Денис Семыкин
 
вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...Иван Иванов
 
I international conference multidisciplinary actual problems of science of th...
I international conference multidisciplinary actual problems of science of th...I international conference multidisciplinary actual problems of science of th...
I international conference multidisciplinary actual problems of science of th...ISO-Cognitio
 
9 кла общес дан 1520
9 кла общес дан 15209 кла общес дан 1520
9 кла общес дан 152011book
 
Bionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific JournalBionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific JournalYafreisy Carrero
 
Bionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific JournalBionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific JournalYafreisy Carrero
 
Innoperm коммерциализация технологий book ii
Innoperm  коммерциализация технологий book iiInnoperm  коммерциализация технологий book ii
Innoperm коммерциализация технологий book iiAndrey Mushchinkin
 
Диагностика работы правоохранительных органов по охране общественного порядка...
Диагностика работы правоохранительных органов по охране общественного порядка...Диагностика работы правоохранительных органов по охране общественного порядка...
Диагностика работы правоохранительных органов по охране общественного порядка...KomitetGI
 
вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...Иван Иванов
 
435.элементы теории множеств и математической логики теория и задачи
435.элементы теории множеств и математической логики теория и задачи435.элементы теории множеств и математической логики теория и задачи
435.элементы теории множеств и математической логики теория и задачиivanov15548
 

Similar to 394 информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с (20)

всеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и др
всеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и дрвсеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и др
всеобщ. история. истор. древнего мира. 5кл.-данилов д.д., сизова е.в. и др
 
651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособие651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособие
 
651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособие651.локальные методы анализа динамических систем учебное пособие
651.локальные методы анализа динамических систем учебное пособие
 
геополитика цивилизации перспективы становления интегральной цивилизации том6
геополитика цивилизации перспективы становления интегральной цивилизации том6геополитика цивилизации перспективы становления интегральной цивилизации том6
геополитика цивилизации перспективы становления интегральной цивилизации том6
 
1055
10551055
1055
 
вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...
 
I international conference multidisciplinary actual problems of science of th...
I international conference multidisciplinary actual problems of science of th...I international conference multidisciplinary actual problems of science of th...
I international conference multidisciplinary actual problems of science of th...
 
9 кла общес дан 1520
9 кла общес дан 15209 кла общес дан 1520
9 кла общес дан 1520
 
Bionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific JournalBionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific Journal
 
Bionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific JournalBionics of Intelligence Scientific Journal
Bionics of Intelligence Scientific Journal
 
Abram inform
Abram informAbram inform
Abram inform
 
Innoperm коммерциализация технологий book ii
Innoperm  коммерциализация технологий book iiInnoperm  коммерциализация технологий book ii
Innoperm коммерциализация технологий book ii
 
Журнал "Будь в курсе" №18
Журнал "Будь в курсе" №18Журнал "Будь в курсе" №18
Журнал "Будь в курсе" №18
 
Grodnitsky2002
Grodnitsky2002Grodnitsky2002
Grodnitsky2002
 
10 e m
10 e m10 e m
10 e m
 
10 e m
10 e m10 e m
10 e m
 
10 e m
10 e m10 e m
10 e m
 
Диагностика работы правоохранительных органов по охране общественного порядка...
Диагностика работы правоохранительных органов по охране общественного порядка...Диагностика работы правоохранительных органов по охране общественного порядка...
Диагностика работы правоохранительных органов по охране общественного порядка...
 
вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...вестник южно уральского-государственного_университета._серия_компьютерные_тех...
вестник южно уральского-государственного_университета._серия_компьютерные_тех...
 
435.элементы теории множеств и математической логики теория и задачи
435.элементы теории множеств и математической логики теория и задачи435.элементы теории множеств и математической логики теория и задачи
435.элементы теории множеств и математической логики теория и задачи
 

394 информатика. алгоритмика. 7кл. ландо, семенов и др-2008 -208с

  • 1.
  • 3. УДК 373.167.1:004 ББК 32.81я72 Л22 Ландо С. К. Л22 Информатика : алгоритмика : учеб, для 7 кл. общеобразоват. учреждений / С. К. Ландо, А. Л. Семенов, М. Н. Вялый. — М. : Просвещение, 2008. — 208 с. : ил. — ISBN 978-5-09-015963-0. Цель этого учебника — продолжить изучение основ алгоритмического мышления, начатое в учебнике «Информатика — 6. Алгоритмика». Алгорит­ мические средства предыдущего учебника расширяются за счет введения пе­ ременных. Изучение переменных начинается на материале Исполнителей, уже известных из предыдущего курса. Далее рассматриваются новые задачи: вос­ становление алгоритмов, поиск, построение игровых стратегий, шифры. УДК 373.167.1:004 ББК 32.81я72 На учебник получено положительное заключение Российской Академии Наук. Учебное издание Ландо Сергей Константинович Семенов Алексей Львович Вялый Михаил Николаевич информатика алгоритмика Учебник для 7 класса общеобразовательных учреждений Зав. редакцией Т. А. Бурмистрова. Редактор А. В. Желонкин. Младший редактор Н. И. Смирнова. Художник О. В. Попович. Художественный редактор О. П. Бого­ молова. Компьютерная графика: Г. М. Дмитриев, И. В. Губина, М. Е. Аксенова. Техническое редактирование и верстка Е. С. Юровой. Корректоры: Е. В. Баранов­ ская, Н. В. Бурдина, Л. С. Вайтман, И. В. Чернова Налоговая льгота — Общероссийский классификатор продукции ОК 005-93—953000. Изд. лиц. Серия ИД № 05824 от 12.09.01. Подписано в печать 24.04.2007. Фор­ мат 70x90Vi6- Бумага офсетная. Гарнитура Школьная. Печать офсетная. Уч.-изд. л. 12,88 + 0,46 форз. Тираж 10 000 экз. Заказ № 16977 щ-гз). Открытое акционерное общество «Издательство «Просвещение». 127521, Москва, 3-й проезд Марьиной рощи, 41. Открытое акционерное общество «Смоленский полиграфический комбинат». 214020, г. Смоленск, ул. Смольянинова, 1. ISBN 978-5-09-015963-0 ©Издательство «Просвещение», 2008 © Художественное оформление. Издательство «Просвещение», 2008 Все права защищены
  • 4. Оглавление От авторов ............................................................................................... 6 УЧЕБНИК Глава 1. Что такое переменные и как с ними работать 1. Лестница для Робота................................................................. 8 2. Что такое переменные............................................................... 10 3. Применение переменных ........................................................ 11 4. Переменные в процедурах ...................................................... 12 5. Как выбирать переменные...................................................... 13 6. Условия с переменными........................................................... 14 7. Возвращение к Ханойским башням ..................................... 15 Глава 2. Переменные в графических Исполнителях и рисова­ ние графиков 1. Чертежник и Черепаха: напоминание .............................. 18 2. Черепаха рисует многоугольники....................................... 19 3. Как Черепаха может нарисовать кривую.......................... 21 4. Изображение зависимостей на графиках — работа для Чертежника .............................................................................. 22 5. Массивы ..................................................................................... 24 6. Откуда берутся формулы ...................................................... 26 7. Дискретизация.......................................................................... 28 8. Рисование формул................................................................... 29 9. Процедуры рисования графиков......................................... 31 10. Сложности в рисовании графиков...................................... 34 Глава 3. Работа с массивами 1. Среднее и максимум................................................................. 38 2. Эффективность работы с массивами..................................... 41 3. Работа с упорядоченными массивами................................... 42 4. Позиционная система счисления........................................... 47 Глава 4. Угадай алгоритм! 1. Изучаем Робота .......................................................................... 55 2. Генераторы числовых последовательностей........................ 63 3
  • 5. Глава 5. Числовые алгоритмы 1. Вычисление значения многочлена......................................... 69 2. Алгоритмы и формулы............................................................. 78 3. Алгоритм Евклида..................................................................... 80 Глава 6. Перебор 1. Ищем к л а д .................................................................................. 87 2. Проверка простоты числа......................................................... 89 3. Выбираем пароль........................................................................ 92 Глава 7. Случайность и неопределенность в программах 1. Случайное и закономерное.........................................................100 2. Вероятность случайного события..............................................101 3. Комбинаторика и вероятность.................................................. 102 4. Несовместимые события и правилосуммы ............................ 103 5. Независимые события и правило произведения............. . 104 6. Как сделать монету с 86 сторонами.....................................106 7. Задача обмена новостями........................................................ 108 8. Псевдослучайность, или Как научить компьютер бросать монету............................................................................................. 112 Глава 8. Игровые алгоритмы 1. Игра в конфеты............................................................................ 117 2. Игры и стратегии ........................................................................120 3. Программирование стратегий.................................................... 123 4. Дерево и гр ы ...................................................................................124 5. Как искать выигрышные стратегии (использование сим­ метрии) ........................................................................................... 130 6. Использование случайности в игровых алгоритмах.........133 Глава 9. Работа с цепочками символов 1. Работа с символами......................................................................135 2. Упорядочение символов и с л о в ................................................ 136 3. Понятие о кодировании и ш ифрах..........................................141 4. Простейшие алгоритмы шифрования..................................... 143 5. Разгадывание алгоритмов шифрования и дешифровка 146 Словарь понятий алгоритмики...........................................................149 4
  • 6. ЗАДАЧНИК Справочник по алгоритмическому языку 1. Программы.....................................................................................152 2. Исполнители...................................................................................156 Задачи 1. Робот рисует. Замена рекурсии в программах для Робо­ та работой с переменными...................................................... 160 2. Чертежник рисует......................................................................168 3. Черепаха рисует..........................................................................173 4. Кривая дракона с переменными ............................................178 5. Условия и выражения...............................................................179 6. Массивы .......................................................................................182 7. Угадай алгоритм ........................................................................188 8. Эффективные вычисления ...................................................... 193 9. Перебор и случайность.............................................................198 10. Вероятности и комбинаторика................................................202 11. Игровые алгоритмы................................................................... 204 12. Символьные переменные...........................................................206
  • 7. От авторов Учебник, который вы держите в руках, служит продолжением учебни­ ка «Информатика — 6. Алгоритмика». А это значит, что основным предме­ том изучения будет по-прежнему алгоритм. Но теперь вы уже много знае­ те об алгоритмах, и мы можем опираться на эти знания. Алгоритмы, кото­ рые мы будем рассматривать, станут богаче и разнообразнее. Это обогащение достигается за счет введения переменных. Окружающий нас мир все время меняется. Люди, предметы, живот­ ные движутся. Ветер нагоняет облака, которые проливаются дождями. Зем­ ля вращается вокруг Солнца — это движение приводит к смене времен го­ да — и вокруг своей оси, что мы замечаем по восходам и заходам Солнца. В процессе жизни человека клетки, составляющие его тело, все время об­ новляются и заменяются другими. Даже, казалось бы, вечно неизменные звезды постепенно уменьшаются за счет излучаемого ими света, а затем не­ ожиданно схлопываются, превращаясь в белых карликов, или взрываются, образуя сверхновые. Записывая характеристики процессов в последовательные моменты времени, можно отследить происходящие изменения. Эти характеристики могут быть самыми разными. Например, числовыми — светимость звезды и ее масса. Другой пример числовых характеристик — стоимость акций той или иной компании или количество произведенных автомобилей. Характе­ ристики могут быть и нечисловыми. Тогда они собираются в списки фами­ лий или библиотечные каталоги, даты и газетные заголовки. Когда человек работает с меняющимися величинами, для него важно каждой такой величине дать имя. Имя при этом как раз не меняется, ме­ няется только значение величины. Переменные — это кусочки компьютерной памяти, предназначенные для хранения различных — как числовых, так и нечисловых — характерис­ тик, которые изменяются в процессе работы программы. Соответственно ме­ няется и содержимое этих кусочков памяти. Пока вы читаете эти строки, значения многих миллиардов переменных меняются в процессе одновремен­ ной работы миллионов программ. Но какими бы сложными ни были эти программы, основы их работы с переменными очень просты. Эти основы мы и будем изучать в курсе алгоритмики. И постараемся при этом сохранить и развить ту ясность мышления, которой, мы надеемся, вам удалось дос­ тичь при изучении первой части курса. За дело! 6
  • 8.
  • 9. Глава Что такое переменные и как с ними работать В этой главе мы знакомимся с переменными. При работе с Ал- горитмикой — 6 нам приходилось писать много программ, которые были очень похожи друг на друга и отличались лишь числами, входившими в команды. Введение переменных позволяет заме­ нить такие программы одной программой. Вместо того чтобы всякий раз переписывать программу заново, мы получаем возможность из­ менить лишь одну строку программы — задать новые значения пере­ менных. К| Лестница для Робота Робот должен нарисовать на поле лест­ ницу (рис. 1), начиная с левого нижнего уг­ ла. Это несложная задача, подобная тем, которые мы научились решать в Алгорит- мике — 6. Одно из возможных ее решений показано в программе справа. ПОВТОРИТЬ 10 РАЗ закрась вправо КОНЕЦ ПОВТОРИТЬ 5 РАЗ закрась вверх КОНЕЦ ПОВТОРИТЬ 5 РАЗ закрась влево закрась влево закрась вниз КОНЕЦ Упражнение Убедитесь, что написанная программа действительно рисует лестницу с рисунка 1 и что Робот возвращает­ ся на свое исходное место. Обратите внимание на то, что высота лестницы 6 клеток, а Робот поднимается вверх 5 раз. 8 ГЛАВА 1
  • 10. Рис. 2 б) Лестницы с рисунка 2 очень похожи на лестницу с рисунка 1, однако они другого размера. Поэтому, для того чтобы нарисовать любую из них, нам потребуется изменить уже написанную програм­ му для Робота. Программа 1 — это новая программа для лестницы с рисунка 2, а. Программа 2 — это новая программа для лестницы с рисунка 2, б. 2) ПОВТОРИТЬ 6 РАЗ ПОВТОРИТЬ 16 РАЗ закрась закрась вправо вправо КОНЕЦ КОНЕЦ ПОВТОРИТЬ 3 РАЗ ПОВТОРИТЬ 8 РАЗ закрась закрась вверх вверх КОНЕЦ КОНЕЦ ПОВТОРИТЬ 3 РАЗ ПОВТОРИТЬ 8 РАЗ закрась закрась влево влево закрась закрась влево влево закрась закрась вниз вниз КОНЕЦ КОНЕЦ Эти две новые программы очень похожи на исходную, но все рав­ но их пришлось писать заново. К тому же даже в таком простом случае при переписывании программы ее пришлось менять в трех местах. В более сложной программе даже поиск мест, в которых ее нужно изменить, становится непростой задачей, а ведь надо еще по­ нять, как именно следует изменить алгоритм. Но программирование призвано облегчить жизнь людям и автоматизировать выполнение Что т а к о е п е р е м е н н ы е и как с н им и р а б о т а т ь Н
  • 11. монотонной, рутинной работы! Значит, должен существовать инстру­ мент, который уменьшает количество изменений в программах, ре­ шающих похожие задачи. Такой инструмент действительно есть. Это переменные. Вот как можно упростить рисование 3) разных лестниц. Введем переменную s, которая будет обозначать число ступенек в лестнице. Тогда программу рисования лестницы с рисунка 1 можно записать так, как показано справа (программа 3). Первая команда в программе задает число ступенек, а остальная часть про­ граммы рисует лестницу с s ступенька­ ми. Теперь, для того чтобы приспособить программу к рисованию лестницы с 3 или 8 ступеньками, нам достаточно изме­ нить в ней одну строку — первую. Нам уже не нужно искать места, где програм­ му нужно менять, и думать, как именно это следует делать. Все, что от нас требу­ ется, — это задать переменной s значе­ ние, равное нужному числу ступенек. s = 5 ПОВТОРИТЬ 2*s РАЗ закрась вправо КОНЕЦ ПОВТОРИТЬ s РАЗ закрась вверх КОНЕЦ ПОВТОРИТЬ s РАЗ закрась влево закрась влево закрась вниз КОНЕЦ 2.Что такое переменные Итак, число повторений в нашей программе указывает перемен­ ная s. Что же такое переменная? Переменная — это имя, которое может приним ать различные значения. Пока мы ограничимся переменными, которые принимают только числовые значения. Зна­ чение переменной (в нашем случае переменной s) можно использо­ вать при исполнении программы. В процессе исполнения программы значение переменной может меняться. Поэтому переменная и на­ зывается переменной. Именно возможность изменения значения и является главной причиной введения переменных в языках програм­ мирования. Переменную можно представить себе как ящичек в памяти компьютера. Вся память состоит из таких ящичков, но перед нача­ лом исполнения программы эти ящички пусты. Чтобы у переменной появилось значение, нужно ей значение присвоить. Команда присваивания записывается с помощью знака равен­ ства. Например, команда /' = 3 присваивает переменной i значение 3. В результате в ящичек i заносится значение 3. После этого им мож­ но пользоваться в программе: если в очередной команде встречается переменная i, то она заменяется своим значением 3. Ящичек нельзя опять сделать пустым, но его значение можно по­ менять с помощью новой команды присваивания. Например, если 10
  • 12. выполнить команду / = 6, то содержимое ящичка i заменится чис­ лом 6. После этого переменная i будет заменяться своим новым зна­ чением 6. К тому же результату, что и команда / = 6, привело бы ис­ полнение команды / = / + 3. Эту команду нужно понимать так. Снача­ ла мы вычисляем значение выражения i + 3, которое стоит справа от знака присваивания «=». Для этого мы берем значение переменной i (которое, как мы знаем, равно 3) и прибавляем к нему 3. Получает­ ся 6. Затем этот результат заносится в переменную i (указанную сле­ ва от знака присваивания). Другими словами, команда / = / + 3 увели­ чивает значение переменной i на 3. С переменными и равенствами вы уже встречались в курсе ма­ тематики. В алгебраических выражениях переменная — это символ (или последовательность символов). Но знак равенства в команде присваивания и алгебраической формуле нужно понимать совершен­ но по-разному. В алгоритмике равенство /' = /' + 3 — это команда, а в алгебре равенство i = i + 3 — это утверждение (ложное для любого значения i). . Применение переменных Использование переменных делает программу гибкой, позволяя легко приспосабливать ее к новым требованиям и к новым задачам. Например, мы можем захотеть менять не только число ступенек в лестнице, но и ширину ступенек. В исходной программе эта шири­ на равна двум клеточкам, а мы хотим научить Робота рисовать лесенки, в которых ширина ступенек может быть равна 1 клеточке или 4 клеточкам. Проще всего этого достичь, используя для хране­ ния ширины ступеньки какую-нибудь переменную. Пусть это будет переменная ш. Что должно измениться в программе рисования лестницы? Ясно, что от ширины ступеньки зависит общая длина лестницы. В пре­ дыдущей программе длина основания лестницы определялась тем, что в первом цикле Робот закрашивает 2s клеточек. Коэффициент 2 в этом выраже­ нии не что иное, как ширина ступеньки. Поэтому при ширине ступеньки w мы мо­ жем заменить коэффициент 2 на w, и пер­ вый цикл примет такой вид, как показано справа. Уже из этого простого примера видно, что переменные можно пе­ ремножать: надо, как в алгебре, перемножать их значения. Вообще, над переменными можно производить все те же арифметические опе­ рации, что и над числами. При выполнении программы переменным w h s нужно до на­ чала выполнения цикла присвоить значения. После этого уже можно найти и значение выражения w*s, перемножив значения ПОВТОРИТЬ w*s РАЗ закрась вправо КОНЕЦ Что т а к о е п е р е м е н н ы е и к а к с н им и р а б о т а т ь 11
  • 13. переменных w и s. Мы видим, что в алгоритмике, как и в алгеб­ ре, значение может быть не только у переменных, но и у выра­ жений. Второй цикл отвечает за высоту лестницы, поэтому при измене­ нии ширины ступеньки он останется неизменным. В третьем цикле все ступеньки рисуются по очереди сверху вниз. Ширина ступеньки стала переменной, поэтому мы не можем написать одну последова­ тельность команд Робота для рисования всех таких ступенек. Одна­ ко мы можем вместо этого написать цикл рисования одной ступень­ ки (программа 1). 2) s = 5 w = 2 ПОВТОРИТЬ w*s РАЗ закрась вправо КОНЕЦ ПОВТОРИТЬ s РАЗ закрась вверх КОНЕЦ ПОВТОРИТЬ s РАЗ ПОВТОРИТЬ w РАЗ закрась влево КОНЕЦ вниз КОНЕЦ О ПОВТОРИТЬ w РАЗ закрась влево КОНЕЦ Сводя воедино все уже написанные кусочки, мы получаем про­ грамму 2 рисования лестницы с рисунка 1. Программа 2 не длиннее исходной программы, но может рисо­ вать с небольшими изменениями очень много разных лестниц, в за­ висимости от того, какие значения мы присвоим переменным s и w Задача 1.1 Измените программу 2 еще раз, введя в нее до­ полнительно переменную h — высоту ступеньки и добившись того, чтобы Робот мог рисовать лестни­ цы с переменными — числом, шириной и высотой ступенек. 4.Переменные в процедурах В начале написанной нами программы переменным s и w при­ сваиваются значения. Оставшаяся часть программы не меняется, но она будет работать по-разному в зависимости от того, какие 12 Г Л А В А 1
  • 14. именно значения были присвоены переменным. Если мы оформим эту часть программы в виде процедуры, то ее можно использовать в лю­ бых программах (не обязательно в нашей), где есть необходимость ри­ совать лестницу. Такая процедура по­ казана справа. Теперь для рисования лестницы с рисунка 1 достаточно выполнить про­ грамму 1, а лестницы с рисунка 2 будут нарисованы программами 2 и 3. Несложно написать и програм­ му, рисующую последовательно не­ сколько лестниц, например две (см. программу 4). ПРОЦ лестница ПОВТОРИТЬ iv*s РАЗ закрась вправо КОНЕЦ ПОВТОРИТЬ s РАЗ закрась вверх КОНЕЦ ПОВТОРИТЬ s РАЗ ПОВТОРИТЬ iv РАЗ закрась влево КОНЕЦ вниз КОНЕЦ КОНЕЦ 1) s = 5 iv = 2 лестница 2) s = 3 iv = 2 лестница 3) s = 8 iv = 2 лестница 4) iv = 2 лестница повторить 10 раз вправо конец s = 8 iv = 3 лестница Как выбирать переменные В обсуждавшихся выше программах нам встречались перемен­ ные s, w и h. Из каких соображений мы выбрали эти переменные? Как вообще выбирать переменные и какими они могут быть? Прин­ ципы выбора переменных очень похожи на принципы выбора имен процедур, которые мы обсуждали в Алгоритмике — 6. Прежде всего ясно, что не любые символы подходят для переменных. Например, использование переменной 13 может вызвать путаницу. Поэтому в языках программирования вводятся синтаксические правила для переменных. В нашем языке это правило выглядит так: СИНТАКСИЧЕСКОЕ ПРАВИЛО Г “ — 1---------1 • Переменная должна начинаться с буквы (латинского или русского алфавита) Что т а к о е п е р е м е н н ы е и к ак с ними р а б о т а т ь 13
  • 15. Кроме того, каждая переменная используется в программе с ка­ кой-то целью, и если она будет отражать эту цель, то программисту будет легче ее запомнить и использовать. Выбранные нами перемен­ ные — это первые буквы в английских словах step (ступенька), width (ширина) и height (высота). Если программа большая и переменных много, то нужно брать более длинные переменные. Использование од­ ной и той же переменной в разных целях часто приводит к ошибкам в программе. . Условия с переменными Робот стоит здесь В Алгоритмике — 6 нам встречалась следующая задача: Робот стоит в горизонтальном прямо­ угольнике шириной 1, огороженном сте­ нами, на некотором расстоянии от левой стены. Переведите Робота в клетку, нахо­ дящуюся на таком же расстоянии от пра­ вой стены (рис. 3). Мы обсудили рекурсивное решение этой задачи. Переменные позволяют предложить другое решение. Вот как это делается. Сначала Робот считает расстояние до левой стены (группа ко­ манд 1). ПОКА слева свободно ДЕЛАТЬ влево d = d+ 1 КОНЕЦ Робот должен оказаться здесь Рис. 3 После выполнения этих команд в переменной d хранится рассто­ яние от исходного положения Робота до левой стены. Если Робот стоял у левой стены, то значение переменной d будет равно 0, если между ним и стеной была одна клетка, то d будет равно 1 и т. д. Теперь Робот должен дойти до правой стены и отойти от нее влево на d клеток. Это можно делать по-разному. Например, подой­ дет группа команд 2. ПОКА справа свободно ДЕЛАТЬ вправо КОНЕЦ ПОКА d > О ДЕЛАТЬ влево d = d - 1 КОНЕЦ 14
  • 16. Первый цикл ПОКА доводит Робота до правой стены, а второй цикл отводит его на нужное число клеток влево. В этом втором цик­ ле ПОКА мы использовали условие d > 0. Такое условие истинно, ес­ ли значение переменной d положительно, и оно ложно, если значе­ ние переменной d отрицательно или равно нулю. При каждом про­ ходе второго цикла ПОКА значение переменной d уменьшается на единицу. Оно становится равным нулю, когда число проходов срав­ нивается с числом шагов Робота из исходного положения до левой стенки, что и дает требуемый результат. Условие d > 0 — типичный пример условия, использующего зна­ чения переменных. Мы можем сравнивать переменные с числами: г < 5, s = 3 и т. д. Можем сравнивать числовые выражения, содержащие переменные: а + Ъ< 3 - s. Для сравнения используются знаки <, >, = (меньше, больше и равно). Кроме простых знаков срав­ нения, есть три двойных знака: <=, >=, о . Они используются вмес­ то привычных математических знаков: <= вместо <, >= вместо >, о вместо 5й. Знаки, используемые в алгоритмике, составные: они со­ стоят из двух символов. Чтобы правильно их прочитать, нужно просто вставить «или» между этими символами: «меньше или равно», «боль­ ше или равно» и «меньше или больше», т. е. «не равно». Поэтому ус­ ловие а <= Ъсовпадает со сложным условием (а < Ъ) ИЛИ (а = Ь), так что эти составные знаки можно вообще не использовать. Можно так­ же обойтись без знака >, ведь условие а > b можно переписать как Ъ< а. Но использование дополнительных знаков, если они имеют яс­ ный смысл, может несколько облегчить процесс записи программы. Упражнение Напишите сложное условие, совпадающее с условием s + d >= 3*f, используя условия сравнения < и =. Использование переменных и условий с переменными позволяет теперь найти новые решения некоторых задач из Алгоритмики — 6. В следующем разделе мы обсудим алгоритм переноса Ханойских ба­ шен с точки зрения новых возможностей. 7. Возвращение к Ханойским В Алгоритмике — 6 мы написали несколько процедур оптимального пере­ кладывания Ханойских башен. Вот, на­ пример, как выглядит одна из процедур для башни из трех кружков (см. справа). Мы видим, что эта процедура вызы­ вает две процедуры оптимального пере­ кладывания башни из двух кружков. Процедура оптимального перекладывания башни из четырех круж­ ков будет вызывать две процедуры оптимального перекладывания башням ПРОЦ 3-башня с А на В НАЧАЛО 2-башня с А на С перенеси с А на В(3) 2-башня с С на В КОНЕЦ Что т а к о е п е р е м е н н ы е и к ак с ними р а б о т а т ь 15
  • 17. башни из трех кружков и т. д. Число процедур растет с ростом числа кружков. Если исходно в башне было 64 кружка, то понадо­ бится довольно много времени и бумаги для написания всех этих процедур. Введение переменных позволяет заменить много разных про­ цедур всего шестью. Этих шести процедур достаточно для перекла­ дывания башни из любого числа кружков. Каждая из этих шести процедур будет отвечать за перекладывание башни с одного из стерж­ ней на другой. Процедуры будут, по существу, одинаковыми и будут различаться только именами стержней. Итак, задача состоит в том, чтобы переложить башню высотой h кружков со стержня А на стержень В по правилам Ханойской баш­ ни. Обсуждавшийся нами алгоритм оптимального переноса состоит в следующем: нужно сначала перенести все кружки, кроме самого большого, со стержня А на стержень С, затем перенести этот боль­ шой кружок со стержня А на стержень В, а потом перенести башню со стержня С на стержень В. Команду переноса кружка с одного стержня на другой (например, со стержня А на стержень В) будем записывать просто в виде перенеси с А на В. Такой команде не нуж­ но указывать номер переносимого кружка, она просто берет верхний кружок со стержня А и устанавливает на стержень В. Если это действие невозможно (а такое бывает, если на стержне А нет кружков или переносимый кружок больше верхнего на стержне В), то наступает ОТКАЗ. Всего таких ко­ манд 6. Попробуем написать процеду­ ру переноса. Мы предполагаем, что в переменной h хранится высота переносимой башни. Тогда про­ цедура выглядит так, как показа­ но справа. Здесь две процедуры перенеси башню с А на С и перенеси башню с С на В еще не написаны, но ясно, что они должны быть очень похо­ жи на нашу первую процедуру. Каждая из них будет вызывать две другие процедуры. Ясно и то, почему мы обращаемся к ним, умень­ шив предварительно значение переменной h на 1: в переносимой ими башне на один кружок меньше, чем в исходной. Написанная нами процедура является рекурсивной — она вызывает саму себя через другие процедуры. Перед завершением процедуры мы должны уве­ личить значение переменной Л на 1: вызывающая процедура перено­ сит более высокую башню. Казалось бы, все в порядке, но, присмотревшись к нашей про­ цедуре внимательнее, мы обнаружим, что она не может правильно работать. Одним из важнейших признаков правильной работы рекур­ сивной процедуры является своевременная остановка — при каких- то условиях такая процедура должна перестать вызывать себя (в том числе и через другие процедуры). 16 Г Л А В А 1 ПРОЦ перенеси башню с А на В НАЧАЛО h = h - 1 перенеси башню с А на С перенеси с А на В перенеси башню с С на В h = ft + 1 КОНЕЦ
  • 18. А наша процедура никаких условий не проверяет! Что же это за необходимые условия? Если при входе в процедуру h = 0, то попытка ее выполне­ ния приведет к обращению к следующим процедурам со значением переменной Л, равным -1. Но это означает, что мы просим переставить башню из -1 кружка! Ясно, что такая опе­ рация бессмысленна. Если значение переменной h в про­ цедуре перестановки башни равно 0, то процедура просто не должна ничего делать. Вот к какой процедуре приводит это рассуждение (программа справа). Эта процедура не вызывает никаких процедур при h = 0 (и при h отрицательном). Вот теперь все правильно, в чем вы легко убеди­ тесь, дописав недостающие процедуры и проверив, как они рабо­ тают, вручную или на компьютере. Например, вы можете выписать все исполняемые команды и значение переменной h после выполне­ ния каждой из них при h = 4 и вызове процедуры перенеси башню с А на В. ПРОЦ перенеси башню с А на В НАЧАЛО ЕСЛИ ft > О ТО ft = h - 1 перенеси башню с А на С перенеси с А на В перенеси башню с С на В ft = ft + 1 КОНЕЦ КОНЕЦ Задача 1.2 Напишите недостающие процедуры перенеси башню с А на С и перенеси башню с С на В. Задача 1.3 Измените процедуры переноса башни таким образом, чтобы при h = 1 они не вызывали другие процедуры, а выполняли команду переноса одного кружка. ИТОГИ В этой главе мы познакомились с переменными. Переменная — это имя, которое принимает числовые зна­ чения. В процессе работы программы значение переменной может меняться. Переменные — основной инструмент упрощения алгорит­ мов. Переменные можно использовать и в процедурах. Использование переменных делает программы универ­ сальными и позволяет с помощью одной программы ре­ шать целую серию однотипных задач.
  • 19. Глава 2 Переменные в графических Исполнителях и рисование графиков Применение переменных в графических Исполнителях, рисую­ щих на плоскости, расширяет их возможности еще значительнее, чем для Робота и Ханойских башен. Одна короткая программа или про­ цедура теперь может справиться с работой, выполнение которой тре­ бовало большого числа разных программ. Особенно удобно использо­ вание переменных там, где поведение графических Исполнителей описывается с помощью формул. В прошлом году мы написали много программ для Чертежника и Черепахи. Использование переменных облегчает написание прог­ рамм для этих Исполнителей и позволяет заменить большое число разных программ одной. В этой главе мы научимся пользоваться пе­ ременными при работе с Чертежником и Черепахой. | 1.| Чертежник и Черепаха: напоминание Напомним вкратце описание Исполнителей Чертежник и Чере­ паха из Алгоритмики — 6. Чертежник живет на координатной плоскости, на которой зада­ на прямоугольная система координат. Он рисует пером. У него четы­ ре команды. По команде подними перо Чертежник поднимает перо, а по команде опусти перо опускает его. Поднятое перо не оставляет сле­ да при перемещении пера по плоскости, а опущенное перо прочерчи­ вает отрезок при каждом перемещении пера из одного положения в другое. Команд перемещения две, и обе с параметрами. Команда пе­ реведи в точку(з, Ь) перемещает перо в точку с координатами (а, Ь), где бы оно до этого ни находилось. Команда сдвинь на вектор(а, Ь) сдви­ гает перо из текущего положения на вектор с координатами (а, Ь). В начале исполнения любой программы перо Чертежника поднято. В отличие от Чертежника, Черепаха живет на бескоординатной плоскости и рисует хвостом. У нее шесть команд. Две первые подни­ ми хвост и опусти хвост играют ту же роль, что и команды подними перо и опусти перо Чертежника. А вот команды с параметрами дру­ гие. Это команды поворота вправо(а) и влево(а) и команды движения вперед(сО и назад(d). При выполнении команды поворота Черепаха по­ ворачивается вправо или влево на указанный в параметре команды ГЛАВА 2
  • 20. угол, выраженный в градусах. При выполнении команды движения Черепаха сдвигается на указанное в параметре число шагов в нуж­ ном направлении. Она оставляет след, если ее хвост опущен. В нача­ ле выполнения любой программы хвост Черепахи поднят. Черепаха рисует многоугольники Чертежник способен нарисовать квадрат. А вот если надо нари­ совать правильный многоугольник с другим числом сторон, то Чер­ тежник сталкивается с серьезными трудностями. Черепаха же рису­ ет не только квадрат, но и другие правильные многоугольники лег­ ко и непринужденно. Для того чтобы написать процедуру рисования правильного мно­ гоугольника с любым числом сторон, нам нужно лишь вспомнить, что делала Черепаха в разных конкретных случаях, и заме­ нить стоявшие в этой процедуре числа на переменные. Пусть в переменной п записано число сторон, а в переменной d — длина одной стороны. Тогда процедура рисования правиль­ ного многоугольника с п сторо­ нами длины d будет выглядеть так, как показано справа. В этой процедуре собраны все те программы, которые мы писа­ ли отдельно для каждого правильного га-угольника. Теперь для того чтобы нарисовать, скажем, правильный семиугольник со стороной 20, достаточно написать в программе три команды. п = 7 d = 20 правильный многоугольник Упражнение Как будет работать процедура правильный многоуголь­ ник, если значение п отрицательно? Например, если п = -3? Упражнение Как будет работать процедура правильный многоуголь­ ник, если значение d отрицательно? Например, если d = -20? Упражнение Напишите программу, рисующую рядом правильный треугольник, квадрат и пятиугольник с одинаковой длиной сторон. ПРОЦ правильный многоугольник опусти хвост ПОВТОРИТЬ п РАЗ вперед(сУ) вправо(360/л) КОНЕЦ подними хвост КОНЕЦ П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 19 и р и с о в а н и е г р а ф и к о в
  • 21. 1) ПРОЦ правильная звезда опусти хвост ПОВТОРИТЬ л РАЗ вперед(сУ) вправо(360*т/л) КОНЕЦ подними хвост КОНЕЦ 2) ПРОЦ спираль опусти хвост ПОВТОРИТЬ 12 РАЗ вперед(с?) вправо(120) d = 9*cf/10 КОНЕЦ подними хвост КОНЕЦ Немного изменив процедуру правильный многоугольник, мы научим Черепаху рисовать и правильные звезды. Введем для этого дополни­ тельную переменную т, которая будет обозначать число сторон пра­ вильного n-угольника, которые мы пропускаем, выбирая вершину, в которую проводим очередную сторону звезды (пропуск одной стороны приводит к тому, что мы ее и нарисуем). В программе 1 (слева вверху) показана процедура рисования звезды. Упражнение Какие фигуры нарисует процедура правильная звезда при следующих значениях переменных: Рис. 4 а) п =9, т —1, d —20; б) п =9, т = 2, d = 20; в) п =9, т = 3, d = 20; г) п =9, т = 4, d = 20? Без переменных написание программы рисова­ ния спирали (рис. 4) превратилось бы в довольно неп­ риятный механический процесс. А теперь это легкая задача. Нужно только при каждом повороте умень­ шать длину d рисуемого отрезка (см. программу 2 вверху). Упражнение Введите переменные, отвечающие за начальное на­ правление Черепахи, длину первого отрезка, угол поворота, количество отрезков, и измените процеду­ ру спираль таким образом, чтобы она при соответству­ ющих значениях новых переменных могла рисовать спирали с рисунка 5. 20 Г Л А В А 2
  • 22. В отличие от Черепахи, для Чертежника рисование правильных многоугольников является сложной задачей. Для вычисления ко­ ординат вершин таких многоугольников нужно знать тригономет­ рию — науку о характеристиках углов. Только квадраты даются Чер­ тежнику без особых усилий. Причем не только квадраты, стороны которых параллельны координатным осям, но и повернутые квадра­ ты. Сейчас мы увидим, как это делается. Пусть одна сторона квадрата — это отрезок с концами в точках (О, 0) и (3, 2). Повернув этот отрезок на 90° против часовой стрел­ ки относительно начала координат, мы получим отрезок с концами (0, 0) и (-2, 3). Поскольку он является результатом поворота исход­ ного отрезка на 90°, два построенных отрезка равны по длине и пер­ пендикулярны друг другу. Поэтому они дают две стороны квадрата. Теперь можно найти и две другие его стороны. Упражнение Найдите концы двух оставшихся сторон квадрата. Напишите программу для Чертежника, рисующую этот квадрат. Придуманный нами способ рисования наклонных квадратов ра­ ботает, если второй конец исходного отрезка лежит не только в точ­ ке (3, 2). Задача 2.1 Напишите для Чертежника процедуру рисования квадрата, стороной которого является отрезок с кон­ цами (0, 0) и (а, Ь). Первая вершина рисуемого квадрата тоже может лежать в лю­ бой точке — необязательно в начале координат. Задача 2.2 Напишите для Чертежника процедуру рисования квадрата, стороной которого является отрезок с кон­ цами (с, d) и (а, Ь). 3^1 Как Черепаха может нарисовать кривую Если Черепаха делает резкие повороты, то оставляемый ею след имеет вид ломаной линии. Если же повороты происходят на неболь­ шой угол, то след имеет вид плавной кривой. Мы уже пользовались этим в Алгоритмике — 6 при рисовании окружностей. Если процеду­ ре правильный многоугольник из предыдущего параграфа задать боль­ шое число сторон п, например 120 или 360, и небольшую длину d стороны многоугольника, например 1 или 2, то нарисованный ею п-угольник будет очень похож на окружность. Так происходит пото­ му, что угол в 360°/120 = 3°или в 360°/360 = 1°. Это очень небольшой угол. Поэтому короткие стороны сливаются в гладкую кривую. Этот прием уменьшения угла поворота и уменьшения отрезков сдвига можно использовать и для рисования других кривых, напри­ П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 21 и р и с о в а н и е г р а ф и к о в
  • 23. мер спиралей. Будем хранить длину шага Черепахи в переменной d, а число шагов — в переменной I. Программа (см. ниже) — процедура рисования спирали с рисунка 6. Рис. 6 Спираль с d =0.01, / = 900 ПРОЦ гладкая спираль опусти перо ПОВТОРИТЬ / РАЗ вперед(с/) вправо(1) d = d + 0.001 КОНЕЦ подними перо КОНЕЦ Упражнение Определите, с какого конца (внутреннего или внеш­ него) процедура гладкая спираль рисует спираль, изоб­ раженную на рисунке 6. Изображение зависимостей на графиках — работа для Чертежника Задача 2.3 Автобус ехал из Москвы в Переславль-Залесский, рас­ стояние до которого 140 км, со скоростью 70 км/ч. По дороге он остановился на 15 мин в Сергиевом Посаде, который находится на полпути между Москвой и Пе­ реелавлем-Залесским. Нарисуйте график зависимости расстояния автобуса до Москвы от времени движения. Рис. 7. График зависимости рассто­ яния от автобуса до Москвы от вре­ мени Процесс рисования графиков требует наличия координат на плос­ кости, поэтому лучше всего для этой работы подходит Чертежник. Он для нее и предназначен. Поле Чертежника расчерчено на квадрат­ ные клетки, и на нем выбраны две оси координат — горизонтальная и вертикальная (рис. 7). Значения времени мы будем откладывать по горизонтальной оси системы координат — х. Чтобы уметь отложить значение, мы должны выбрать единицу измере­ ния по оси. Пусть одна клеточка означает 15 мин. На вертикальной 22 Г Л А В А 2
  • 24. оси у будем откладывать расстояние автобуса до Москвы. Выберем в качестве единицы расстояния 20 км. Упражнение Какова будет высота графика (в клетках)? Ниже нам понадобятся десятичные дроби. В Алгоритмике — 7, как и в Алгоритмике — 6, для отделения целой части десятичной дроби от ее дробной части мы используем десятичную точку, а не де­ сятичную запятую. Например, число 3.5 — это три целых пять деся­ тых. Запятая нам нужна для других целей. Первую часть пути от Москвы до Сергиева Посада автобус шел с постоянной скоростью, поэтому график зависимости расстояния от времени на этой части будет отрезком прямой, соединяющим точку с координатами (0, 0) и точку с координатами (4, 3.5). Эта вторая точка соответствует времени движения 1 ч (4 клетки по горизонтали по 15 мин каждая) и расстоянию 70 км до Сергиева Посада (3.5 клет­ ки по вертикали по 20 км каждая). Такой отрезок Чертежник про­ водит с легкостью, исполнив команды опусти перо сдвинь на вектор(4, 3.5) Напомним, что в начале исполнения программы перо Чертежни­ ка располагается в точке (0, 0) и поднято. Вторая часть графика соответствует стоянке автобуса в Сергие­ вом Посаде и поэтому представляет горизонтальный отрезок — вре­ мя течет, а расстояние автобуса до Москвы не меняется. Стоянка про­ должается 15 мин, поэтому это отрезок длиной в одну клетку, и его можно нарисовать, выполнив команду сдвинь на вектор(1, О) В третьей части пути автобус опять удаляется от Москвы со ско­ ростью 70 км/ч, и график зависимости расстояния от времени снова является наклонным отрезком. Скорость и продолжительность треть­ ей части пути такие же, как и первой. Поэтому этот отрезок имеет ту же длину и такой же наклон, что и первый, и его можно нарисо­ вать той же самой командой сдвинь на вектор(4, 3.5) Собирая все команды вместе, по­ лучаем программу (см. справа) рисова­ ния графика зависимости расстояния от времени. опусти перо сдвинь на вектор(4, 3.5) сдвии>- на вектор(1, О) сдвинь на вектор(4, 3.5) П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 23 и р и с о в а н и е г р а ф и к о в
  • 25. Задача 2.4 Простояв 1 ч в Переславле-Залесском, автобус отпра­ вился в обратный путь к Москве с той же скоростью и 15-минутной стоянкой в Сергиевом Посаде. Допол­ ните программу рисования графика зависимости рас­ стояния автобуса до Москвы от времени таким обра­ зом, чтобы она включила и возвращение автобуса. Задача 2.5 Измените программу рисования графика таким обра­ зом, чтобы она рисовала график расстояния автобуса до Переславля-Залесского, а не до Москвы. Задача 2.6 Измените программу рисования графика зависимости расстояния автобуса до Москвы от времени, заменив в ней все команды сдвинь на вектор командами пере­ веди в точку. Массивы Нарисованный в предыдущем разделе график расстояния автобу­ са до Москвы устроен очень просто. У нас есть несколько точек на плоскости, отвечающих: • начальному положению автобуса; • положению автобуса, когда он доехал до Сергиева Посада; • положению автобуса, когда он отъехал от Сергиева Посада; • положению автобуса, доехавшего до Переславля-Залесского. Эти точки поочередно соединяются отрезками. Необходимость в рисовании графиков такого рода возникает очень часто. Предполо­ жим, например, что мы хотим нарисовать график скорости спортсме­ на, бегущего стометровку. У нас нет возможности измерить эту ско­ рость в каждый момент времени. Однако это можно сделать каждую десятую долю секунды. Соединение точек отрезками — это способ приблизить скорость в промежутках между двумя последовательны­ ми измерениями. Функции, изображенные на таких графиках, не задаются фор­ мулами. Для их задания необходимо указать значения функции через определенный интервал. Если бы для каждого из этих значе­ ний мы завели свою переменную, то быстро столкнулись бы с непри­ ятностями. Во-первых, таких переменных должно быть очень много. Скажем, для спортсмена на стометровке понадобилось бы около ста переменных. Во-вторых, написание процедур рисования графи­ ков с таким количеством переменных превратилось бы в непосиль­ ное занятие: мы не смогли бы пре­ дусмотреть их все в процедуре. Способ преодоления этих труд­ ностей известен давно и применя­ ется в большинстве языков про­ 24 Г Л А В А 2 а [1] а [2] а [3] а [4] Рис. 8
  • 26. граммирования. Он состоит в том, что вместо большого количества разных переменных используется одна переменная с разными номе­ рами. Такая переменная называется массивом. Массивы также назы­ вают таблицами. На рисунке 8 изображен пример массива. Массив можно представлять себе как много переменных-ящич­ ков, для обращения к которым мы должны сначала указать имя массива, а затем номер ящичка внутри массива. В нашем языке этот номер указывается в квадратных скобках после имени массива. Так же как и в случае одиночных перемен­ ных, прежде чем работать с массивом, его необ­ ходимо заполнить — занести значения элемен­ тов массива. Например, в начале программы ри­ сования графика стоимости нефти необходимо внести данные об этой стоимости (см. команды справа). А вот процедура рисования графика может быть общей для всех таких программ: у[0]= 54 у[1] =58 У(2] = 56 У [3] = 59 у[4]= 58 У [5] = 56 у[6] = 59 Здесь переменная у задает имя массива, в котором хранятся дан­ ные, предназначенные для изображения на графике, п — длина это­ го массива (или, точнее, количество его элементов, которые мы хо­ тим отобразить на графике), ys — величина шага по вертикальной оси, ts — величина шага по горизонтальной оси, а в переменной b содержится начальная цена. Теперь, чтобы Чертежник нарисовал недельный график цен на нефть, заданных массивом у, достаточно выполнить команду график табличной функции Задача 2.7 Измените процедуру рисования графика табличной функции таким образом, чтобы график рисовался не­ обязательно с нулевого, но с произвольного момента времени, заданного значением дополнительной пере­ менной. П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 25 и р и с о в а н и е г р а ф и к о в
  • 27. Массивы — универсальный способ работы с переменными. Мы бу­ дем пользоваться ими и дальше. Заполнение длинных массивов требу­ ет много времени, и они занимают много места. Зависимость между переменными можно описывать по-разному. Очень часто это описание задается в виде формулы, и Чертежник очень хорошо приспособлен для рисования графиков таких зависимостей. Формулы гораздо ком­ пактнее массивов. Однако после того как массив заполнен, им гораз­ до легче пользоваться, чем формулой, особенно если она сложная. Кро­ ме того, использование массива требует меньше времени. 6.Откуда берутся формулы Многие законы природы выражаются математическими форму­ лами. Например, закон всемирного тяготения Ньютона гласит: Лю­ бые два тела притягиваются друг к другу с силой, пропорциональ­ ной массе каждого из них и обратно пропорциональной квадрату расстояния между ними. На языке формул этот закон записывается так: Здесь F — сила притяжения двух тел, т1 — масса первого тела, т2 — масса второго тела, г — расстояние между ними. Коэффициент пропорциональности у зависит от выбранной нами системы физичес­ ких единиц. Но как люди открывают законы природы? Это дело было непрос­ тым в XVII в., во времена Ньютона. Остается оно таким и сейчас. Схе­ матически это происходит так. Обычно открытию закона предшеству­ ют многолетние измерения различных характеристик изучаемых объ­ ектов. Результаты этих измерений записываются в огромные таблицы. Затем исследователи изучают эти таблицы — обрабатывают результа­ ты измерений, пытаясь выявить в них закономерности. Иногда это удается. Тогда планируются новые эксперименты — уже для провер­ ки обнаруженных закономерностей и определения границ их приме­ нимости. Этот цикл повторяется много раз, и лишь очень редко уда­ ется обнаружить и подтвердить новый, неизвестный ранее закон. Из этого описания понятно, чем может помочь — и помогает — компьютер в изучении природы. Он очень хорошо приспособлен для хранения большого количества данных — результатов измерения, и его можно использовать для графического изображения зависимостей между различными характеристиками. И наконец, к нему можно при­ соединить измерительные приборы для автоматического сбора данных. Задача 2.8 в массиве таблицы записаны результаты измерений величины тока (в миллиамперах), проходящего через данное сопротивление. Первоначально поданное на 26 Г Л А В А 2
  • 28. сопротивление напряжение равнялось 10 В и уве­ личивалось на 1 В перед каждым новым измерением тока. Изобразите результат измерений на графике, выбрав подходящий масштаб по горизонтальной и вертикальной осям. Сделайте предположение о харак­ тере зависимости величины тока от величины подан­ ного напряжения. Какие эксперименты вы предложи­ ли бы для проверки этого предположения? Напряжение, V 10 11 12 13 14 15 16 17 18 19 Величина тока, а 15.1 16.6 17.9 19.5 21.0 22 .4 23.9 25.6 27.2 28.7 Если вы аккуратно решали предыдущую задачу, то обнаружили, что приходящая на ум самая простая зависимость между подаваемым напряжением и проходящим током, строго говоря, не выполняется. Результат измерений иногда оказывается больше, чем предусматри­ вает эта зависимость, иногда меньше и очень редко в точности та­ ким. Это не означает, однако, что придуманная вами зависимость плоха. Причины такого несоответствия могут быть совсем другими. Обсудим их. Даже если бы закон природы выполнялся в точности, мы бы не смогли этого обнаружить. Дело в том, что для поиска и проверки закономерности мы пользуемся приборами: один из приборов пода­ ет напряжение, другой измеряет проходящий при этом ток. Совер­ шенных приборов не бывает, и величина подаваемого напряжения немного отличается от целого числа вольт. Точно так же измеренная величина тока немного отличается от величины действительно прохо­ дящего тока. Так что результат измерения 22 мА означает на самом деле что-то вроде «величина измеряемого тока наверняка лежит в интервале от 21.8 до 22.2 мА». Если предлагаемая закономерность предсказывает результат, попадающий в указанный интервал, то это говорит в ее пользу. Еще один возможный источник отклонений заключается в том, что любой закон выполняется (с хорошей точностью) только при соблюдении определенных условий. Например, зависимость величи­ ны тока от напряжения может быть очень простой, если ток не слиш­ ком мал и не слишком велик. Определение таких условий — важная часть работы по анализу закона. Задача 2.9 Как измерить толщину тонкой нитки? Один из спо­ собов состоит в том, чтобы намотать нитку на каран­ даш, не оставляя зазоров между витками. Если сде­ лать это аккуратно, на карандаше появится полоска из намотанной нитки. Толщину такой полоски мож- П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 27 и р и с о в а н и е г р а ф и к о в
  • 29. но уже измерить линейкой с миллиметровыми деле­ ниями. Но толщина полоски должна быть пропор­ циональна толщине нитки. Например, если намотано 100 витков и толщина полоски оказалась 30 мм, это означает, что толщина нитки 0.3 мм. Изучите этот способ измерения эксперименталь­ но. Намотайте нитку несколько раз, записывая тол­ щину полученной полоски и число витков. Запишите результаты ваших измерений в два массива: в массив с заносите число витков, а в массив w — измеренную толщину полоски. Изобразите на графике зависи­ мость w от с. Похож ли полученный вами график на график прямой пропорциональности? 7.Дискретизация В обыденной жизни и в математике мы часто говорим, что не­ которая величина, например температура, меняется непрерывно. Противоположностью непрерывности является дискретность. На­ пример, мы видим, что стрелка часов перемещается по циферблату непрерывно, песок в песочных часах тоже сыпется непрерывно, а цифры на экране табло или на экране цифровых часов меняются дискретно, т. е. на экране может быть только целое число часов, ми­ нут (иногда секунд). Даже если какая-то величина, например дли­ на, измеряется с точностью до сотых, тысячных и даже более мел­ ких долей, все равно результат измерения представляет собой конеч­ ную десятичную дробь, и мы говорим о нем как о дискретном. Заметим, что что-то кажущееся нам непрерывным может при бо­ лее детальном рассмотрении оказаться дискретным. Так, в наших примерах с часами можно регистрировать дискретное перемещение стрелки при одном колебании балансира часов (это иногда бывает видно на циферблате электронных часов со стрелками). В песочных часах можно зафиксировать падение одной песчинки и т. д. Можно считать, что объем жидкости в стакане — величина непрерывная, но теоретически можно посчитать число молекул в стакане и считать этот объем дискретным. Переход от объектов и величин окружающе­ го мира к их цифровому измерению и представлению называется дискретизацией. Мы всегда измеряем физические величины с некоторой точ­ ностью. Например, говорим, что бегун пробежал стометровку за 9.71 с, а можно было бы еще точнее сказать, что за 9.713 с. О рас­ стоянии между двумя городами мы говорим, что оно (измеренное между главными почтамтами этих городов) равно 46 км, а оно мо­ жет быть равно 46,3 км. Переход от величин в окружающем мире к их измеренным значениям является примером дискретизации. Ког­ да значение измерено, его уже легко обрабатывать на компьютере. 28 Г Л А В А 2
  • 30. Вот еще несколько примеров дискретизации. Можно измерять (приближенно) частоту звука в целых значениях числа колебаний в секунду (в герцах), а рассматривать дискретизацию высоты музы­ кального тона, считая, что при выполнении семи повышений тона на одно и то же число раз соответствующая частота повышается вдвое (это и даст нам дискретную музыкальную гамму). Можно дискрети­ зировать цвет, приближенно представляя его в виде комбинации красного, зеленого и голубого цветов и дискретизируя интенсивность каждой из этих трех составляющих. Чуть более сложный, но очень важный пример. Мы фотографиру­ ем какой-то объект на цифровую камеру. При фотографировании изоб­ ражение объекта представляется в виде так называемой матрицы — большой таблицы (двумерного массива). В такой таблице может быть несколько миллионов ячеек (клеток). В каждой ячейке мы можем хра­ нить дискретную информацию о цвете соответствующего фрагмента изображения (это средний цвет кусочка реального объекта). Вся эта большая матрица — дискретизация реального изображения. Человек не может различить очень близкие точки, очень близ­ кие моменты времени, не может отличить непрерывное изображение от его дискретного приближения. Буквы в тексте, который вы сей­ час читаете, составлены из отдельных точек, не заметных вам. На эк­ ране компьютера и на экране телевизора изображение дискретно. Оно состоит из отдельных элементов, пикселей. Цвет и яркость каждого пикселя также дискретны. Более того, изображение на экране диск­ ретно и во времени. Эффект непрерывного с точки зрения человека процесса на экране создается в результате смены 24 кадров каждую секунду. Ясно, что массивы очень хорошо приспособлены для записи в компьютер результатов дискретизации и дальнейшей работы с ними. Но можно дискретизировать и математические формулы, которые описывают непрерывные процессы, используя для этого массивы. Об этом и пойдет речь дальше. . Рисование формул Иногда закон природы удается записать в виде формулы. Зави­ симость, заданную таким образом, также нужно уметь изображать. Задача 2.10 Нарисовать график зависимости от времени расстоя­ ния до земли камня, отпущенного на высоте 50 м. Решение Расстояние камня от земли определяется формулой h(t) = 50 - 9.8t2/2. Здесь h — измеренное в метрах расстояние кам­ ня до земли, t — измеренное в секундах время с П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 29 и р и с о в а н и е г р а ф и к о в
  • 31. Рис. 9. График за­ висимости высоты положения камня от времени полета. Первая попытка Рис. 10. График за­ висимости высоты положения камня от времени полета. Вторая попытка начала падения, 50 — начальное расстояние кам- о ня до земли, 9.8 м/с — ускорение свободного падения. Поручим построение графика движения кам­ ня Чертежнику. Воспользуемся переменными. Бу­ дем откладывать по горизонтальной оси время, по вертикальной — расстояние до земли и строить график «по точкам», как в алгебре, соединяя со­ седние точки отрезками прямых. Единицей изме­ рения времени выберем секунду, единицей изме­ рения расстояния — 10 метров. Непонятно лишь, сколько отрезков надо провести, — это зависит от времени полета камня. Ясно, однако, что пяти се­ кунд наверняка хватит, чтобы камень долетел до земли. Теперь программа выглядит так: переведи в точку(0, 5) опусти перо t = 0 ПОВТОРИТЬ 5 РАЗ переведи в точку^, 50 - 9.8*f*f/2) t = t + 1 КОНЕЦ Предложив Чертежнику выполнить эту про­ грамму, мы увидим график (рис. 9). Ясно, что это не вполне то, чего бы мы хотели. У графика два главных недостатка. Первый состоит в том, что зависимость рассто­ яния от времени представлена ломаной линией, которая хорошо приближает значения перемен­ ной h только в точках излома, а между этими точками значения переменной заметно разли­ чаются. Второй недостаток еще существенней: график показывает, что после удара о землю камень про­ должает падать — значение переменной h стано­ вится отрицательным. Но наша формула хорошо описывает падение камня только до момента уда­ ра о землю. После этого камень будет лежать на земле, расстояние до земли будет равно нулю. По­ этому часть графика, лежащая ниже оси абсцисс, вводит в заблуждение. Ясно, что в жизни так не бывает. Формула хорошо описывает высоту положе­ ния камня только до момента его удара о землю, а потом высота будет равна нулю. 30 Г Л А В А 2
  • 32. Для преодоления первого недостатка можно, как мы это уже не раз делали, уменьшить шаг сдвига по времени. Сделаем его равным не 1 секунде, а 0.1 се­ кунды. В результате количество изломов на ломаной линии увеличится и она будет гораздо лучше прибли­ жать значения высоты. Кроме того, нам надо прекра­ тить рисование графика после удара камня о землю. Для этого будем на каждом шаге цикла проверять, не произошел ли удар. Вот что в результате получается: переведи в точку(0, 5) опусти перо t = 0 ПОКА (50 - 9.8 П / 2 >= 0) ДЕЛАТЬ переведи в точкуД, 50 — 9.8 t*t/2) t = t + 0.1 КОНЕЦ Условие в цикле ПОКА гарантирует, что камень находится над землей, а шаг мы уменьшили. Новый график гораздо лучше предыдущего описывает и математический закон и действительное положение вещей (рис. 10). 9.Процедуры рисования графиков При рисовании графиков зависимостей, как бы эти зависимости ни были заданы, нам приходится выбирать размер шага по каждой из осей координат. Вид графика зависит от выбранного размера. При уменьшении шага график растягивается, а при увеличении — сжимается. Нам хотелось бы, чтобы график помещался на экране Чертежника и на нем можно было разобрать все важные детали вза­ имозависимости. Очень часто оказывается, что с первой попытки не удается нарисовать понятный и полезный график. Приходится пе­ репробовать несколько вариантов, прежде чем удастся подобрать подходящие шаги по осям. Это означает, что шаг по оси должен задаваться в одном месте, чтобы достаточно было сделать одно изме­ нение. Другими словами, длина шага должна быть переменной. Некоторые другие данные тоже хочется сделать переменными, чтобы при их изменении не надо было искать по всей программе, где нужно внести поправки, рискуя при этом что-нибудь забыть. Так, ес­ ли камень был брошен не с высоты 50 метров, а с высоты 75 метров, то в предыдущей программе надо поменять три строки: • условие в цикле ПОКА, где проверяется, долетел ли камень до земли; П е р е м е н н ы е в г р а ф и ч е с к и х И с п о л н и т е л я х 31 и р и с о в а н и е г р а ф и к о в