ную человеку, а также делать § 9. Исполнитель Робот 51многие вещи, которые людямвыполнить сложно или вообще Робот LS3, созданный дляневозможно. Роботы используют- транспортировки грузов по пе-ся на производстве и в быту, мо- ресеченной местности.гут работать в сфере услуг и раз-влечений. Есть роботы, похожиена человека, а есть совсем непо-хожие. Робот — автоматическое устройство, которое действует по заранее составленной про- грамме.Робот получает информациюо внешнем мире от датчиков —аналогов органов чувств живыхорганизмов — и предназначен Автономный робот GROVER,для осуществления различных который изучает слои льда наопераций. ледниковом щите Гренландии. Мир роботов очень разнообра-зен. В быту современного челове-ка используются автоматическиестиральные и посудомоечные ма-шины, роботы-пылесосы и др.С помощью роботов можно выра-щивать растения или управлять Роботизированная система,домом. предназначенная для выращи- вания овощей. Управление дан- Робот может быть материаль- ной системой осуществляетсяным или виртуальным. Вирту- через Wi-Fi. Есть возможностьальный робот — специальная удаленного контроля через Ин-программа, выполняющая опре- тернет.деленные действия.Правообладатель Народная асвета
52 Глава 3. Основные алгоритмические конструкции Робот-пылесос с помощью си- Роботы являются исполните-стемы камер и сенсоров может лями. Для исполнителей обычноориентироваться в комнате и определяют среду обитания и си-строить маршрут уборки. стему команд. Общим для всех роботов явля- ется то, что человек может ими управлять. Робот получает ко- манды от оператора и выполняет их по одной или действует авто- номно по предварительно состав- ленной программе. 9.2. Среда обитания и система команд исполнителя Робот Пример 9.1. Поле исполните- В среде программированияля Робот с начальной обстанов- PascalABC, кроме исполнителя Чертежник, можно выбрать ис-кой имеет следующий вид:§ËÊÂÔÊË ®ÏÂÊØ полнителя Робот.ÌËÈËÃÂÊÅ Средой обитания исполнителя ˾ËϽ Робот является прямоугольное клетчатое поле. Размеры поля, как и для исполнителя Чертежник, задаются командой Field(n, m). Первоначально Робот находится в центральной клетке поля. Между некоторыми клетками, а также по периметру поля нахо- дятся стены. Робот может пере- двигаться по полю и закраши- вать указанные клетки. Большойª½Ô½ÈÙÊË §ÈÂÏÇÅ желтый квадрат внутри клеткиÌËÈËÃÂÊÅ ÇËÏËÍØÂ означает начальное положение ÊÂ˾ÒËÁÅÉË Робота, маленький — конечное ˾ËϽ ĽÇͽÎÅÏÙ (пример 9.1). Правообладатель Народная асвета
§ 9. Исполнитель Робот 53 Поле Робота, на котором Пример 9.2. Вызов задачи a1определено положение стен, на- из встроенного задачника:чальное и конечное положениеисполнителя, называют обста-новкой. Для подключения исполни- Запись команд исполнителя:теля Робот в программе пропи-сывается команда uses Robot. Запишем в программе коман-Готовые задания с обстановками ду up.для Робота хранятся в задачни-ке, встроенном в систему про- uses Robot;граммирования, и вызываются beginкомандой task. Эта же командаиспользовалась для Чертежника. Task('a1'); up; Система команд исполнителя: end. Сверху находится стена, по-Команда Действие этому перемещение Робота вверх невозможно:Right Перемещает Робота вправоLeft Перемещает Робота влевоUp Перемещает Робота вверхDown Перемещает Робота внизPaint Закрашивает текущую ячейку Робот может становиться на Сообщение об ошибкеобычную и на закрашенную клет-ку, но не может переместитьсяс клетки на клетку, если междуними стена. Робот не может пере-меститься за границы поля. Этидействия вызывают ошибку (при-мер 9.2). Робот может закраситьуже закрашенную клетку. Такоедействие ошибку не вызывает. Правообладатель Народная асвета
54 Глава 3. Основные алгоритмические конструкции Пример 9.3. Начальная об- 9.3. Использованиестановка: алгоритмической конструкции следование для исполнителя Робот Рассмотрим примеры решения задач для исполнителя Робот. Пример 9.3. Робот находится на поле размером 3 3 клетки. Нужно закрасить все клетки, кроме средней (задача a2). Программа для исполнителя Для решения задачи РоботРобот: должен выполнить следующий uses Robot; алгоритм: begin закрасить; Task('a2'); вправо; paint; right; закрасить; paint; right; вправо; paint; down; закрасить; paint; down; вниз; paint; left; закрасить; paint; left; вниз; paint; up; закрасить; paint; up; влево;end. Результат работы программы закрасить;имеет следующий вид: влево; закрасить; вверх; закрасить; вверх. В данном алгоритме Робот обхо- дит клетки, двигаясь по часовой стрелке. Тот же результат можно получить, если Робот будет обхо- дить поле против часовой стрел- ки, изначально двигаясь вниз.Правообладатель Народная асвета
§ 9. Исполнитель Робот 55 Пример 9.4. Составим про- Пример 9.4. В данном случаеграмму для закрашивания кле- программа для учебного ком-ток поля Робота по образцу: пьютерного исполнителя Робот может быть составлена таким Такой обстановки нет в за- образом:дачнике, поэтому вначале нуж-но создать поле Робота размером uses Robot;5 3. Начальное положение Ро- beginбота на таком поле отмечено за-штрихованной клеткой. Field(5, 3); down; Для решения задачи Робот paint;должен выполнить алгоритм: left; up; создать поле; paint; вниз; left; закрасить; up; влево; paint; вверх; right; закрасить; right; влево; right; вверх; right; закрасить; paint; вправо; left; вправо; down; вправо; paint; вправо; end. закрасить; влево; Результат работы записанной вниз; закрасить. выше программы будет иметь ∗ Какими еще способами мож-но решить данную задачу? следующий вид:Правообладатель Народная асвета
56 Глава 3. Основные алгоритмические конструкции Пример 9.5. Начальная об- Пример 9.5. Решим задачу a1становка: из встроенного задачника. Программа для Робота: Для решения данной задачи uses Robot; begin Робот должен обойти линию (сте- Task('a1'); ну), закрасить указанные клетки right; right; right; right; и переместиться в клетку, опре- up; left; paint; деляющую конечное положение left; paint; left; paint; исполнителя. left; paint; left; Алгоритм решения задачи: end. сдвинуться вправо на 4 кле- Результат работы программы: тки; вверх; сдвинуться влево на 4 кле- тки, закрашивая их по пути; влево. В примерах 9.3 — 9.5 коман- ды исполнителя Робот выполня- лись последовательно, одна за другой, в том порядке, в котором они были записаны. Поэтому все приведенные алгоритмы реали- зованы с использованием алго- ритмической конструкции следо- вание. 9.4. Вспомогательные алгоритмы Пример 9.6. Начальная об- Пример 9.6. Решим задачу a3становка: из встроенного задачника. Робот должен закрасить все клетки поля. Но двигаться по пря- мой ему мешают стены, которые исполнитель должен обходить. Алгоритм решения задачи: закрасить; вниз; закрасить; вправо;Правообладатель Народная асвета
§ 9. Исполнитель Робот 57 закрасить; вверх; Программа 1 для исполните- закрасить; вправо; ля Робот: закрасить; вниз; закрасить; вправо; uses Robot; закрасить; вверх; begin закрасить. Task('a3'); Если проанализировать дан- paint; down;ный алгоритм, то можно заме- paint; right;тить, что дважды повторяется paint; up;последовательность команд, ко- paint;торая закрашивает квадрат из right;четырех клеток: paint; down; paint; right; закрасить; вниз; paint; up; закрасить; вправо; paint; закрасить; вверх; end. закрасить. Оформим эти команды как Результат работы программы:вспомогательный алгоритм, кото- Программа 2 (с использова-рый назовем квадрат. Тогда ал-горитм решения исходной задачи нием вспомогательного алго-может быть записан так: ритма) для исполнителя Робот: квадрат; вправо; uses Robot; квадрат. procedure kvadrat; При решении данной задачи beginиспользование вспомогательногоалгоритма позволило не записы- paint; down;вать дважды одну и ту же после- paint; right;довательность команд. paint; up; Вспомогательные алгоритмы paint;можно использовать и в том слу- end; beginчае, когда исходная задача раз- Task('a3'); kvadrat;бивается на несколько независи- right; kvadrat;мых друг от друга задач. Тогда end.Правообладатель Народная асвета
58 Глава 3. Основные алгоритмические конструкции Пример 9.7. Программа для каждую из них можно оформить как вспомогательный алгоритм.учебного компьютерного испол- Пример 9.7. Напишем про-нителя Робот: грамму для закрашивания кле- ток поля Робота по образцу: uses Robot; procedure krest; Такой обстановки нет в задач- begin нике, поэтому создадим поле 7 3. Начальное положение Робота от- left; paint; мечено заштрихованной клеткой. down; left; paint; up; left; paint; В данной задаче Робот должен right; paint; нарисовать две отдельные фигу- up; paint; ры: крест и квадрат. Составим end; два вспомогательных алгоритма. procedure kvadrat; begin Вспомогательный алгоритм paint; right; крест: paint; right; paint; down; влево; закрасить; paint; down; вниз; влево; закрасить; paint; left; вверх; влево; закрасить; paint; left; вправо; закрасить; paint; up; вверх; закрасить. paint; up; В качестве вспомогательного end; алгоритма для рисования квадра- begin та можно использовать алгоритм field(7,3); решения задачи a2 (пример 9.3). krest; Для перехода от одной фигуры к right; right; right; kvadrat; end. Результат работы записаннойвыше программы будет иметьследующий вид: другой Робот должен сдвинуться на 3 клетки вправо: крест; вправо; вправо; вправо; квадрат.Правообладатель Народная асвета
§ 9. Исполнитель Робот 59? 1. Что такое робот? 2. Какие команды входят в систему команд учебного компьютерно- го исполнителя Робот? 3. Опишите среду обитания учебного исполнителя Робот.Упражнения Начальная обстановка на поле Робота изобра- вжена на рисунке справа. Трое учащихся составилии выполнили алгоритм, по которому Робот закра-сил все клетки пути от начальной к конечной. Накаком из рисунков — а, б или в — изображенорешение данной задачи? Почему?аб Какой из приведенных алгоритмов решает задачу, сформулирован-ную в предыдущем задании? Объясните, почему другие программы немогут быть алгоритмами решения данной задачи.а) paint; down; б) paint; down; в) ToPoint(0,3); right; paint; right; PenDown; paint; down; paint; down; OnVector(1,0); right; paint; right; OnVector(0,-1); paint; right; paint; right; OnVector(1,0); up; paint; up; OnVector(0,-1); paint; right; paint; right; OnVector(1,0); up; paint; up; OnVector(0,1); paint; paint; OnVector(1,0); OnVector(0,1); OnVector(1,0); Для какого исполнителя приведен алгоритм в задании 2, в? Сфор-мулируйте для этого исполнителя задачу, решением которой будет при-веденный алгоритм.Правообладатель Народная асвета
60 Глава 3. Основные алгоритмические конструкции Для исполнителя Робот была составлена следующая программа: paint; right; up; paint; right; down;Изобразите в тетради «узор», который нарисует Робот. При каких мини-мальных размерах поля Робот сможет выполнить данную программу? Все команды в программе из задания 4 учащийся скопировал трираза. Как изменится «узор» после выполнения программы? Как можнопо-другому записать этот алгоритм? Какого размера поле нужно соз-дать? П о д с к а з к а. Воспользуйтесь вспомогательным алгоритмом. Программа решения задачи была записана на доске. Два учащихся,переписывая этот алгоритм для исполнителя Робот, пропустили из-за не-внимательности по одной команде. Какую команду пропустил каждый изучащихся? Что будет результатом работы каждой программы? Программа, Программа,записанная первым учащимся записанная вторым учащимся uses Robot; uses Robot; begin begin Field(15,15); Field(15,15); paint; right; paint; right; paint; right; paint; right; paint; down; paint; down; paint; down; paint; down; paint; paint; down; left; down; left; down; left; paint; paint; down; down; left; paint; down; paint; down; paint; right; paint; down; paint; right; paint; right; paint; up; paint; right; paint; up; paint; up; paint; up; paint; up; left; up; paint; up; left; left; up; paint; up; paint; up; paint; up; paint; up; end. end.Правообладатель Народная асвета
§ 10. Алгоритмическая конструкция повторение 61 Составьте программу для решения за-дачи a4 из встроенного задачника (см. рис.справа). Предложите два алгоритма: 1. С использованием алгоритмической конструкции следование. 2. С использованием вспомогательного алгоритма.Сравните полученные решения. Робот-огородник может разбить гряд-ку на посадочные зоны-клетки. На рисункесправа изображена схема посадки овощей(красная клетка — томаты, зеленая —огурцы). Предложите систему команд дляробота-огородника и разработайте алго-ритм посадки овощей (робот сажает однорастение в одну клетку).§ 10. Алгоритмическая конструкция повторение10.1. Алгоритмы с циклами В окружающем мире можно на- Понятие цикла используетсяблюдать ситуации, при которых в различных сферах человече-различные действия и процессы ской деятельности.повторяются. Некоторые повто-ряются несколько раз и заверша- Под циклом понимают сово-ются. Другие могут повторяться купность явлений, процессов,очень долго (например, кругово- составляющих кругооборот врот воды в природе, движение течение определенного проме-планет в космическом простран- жутка времени. С этой точкистве, смена времен года и т. д.). зрения можно говорить о го-Человеку тоже регулярно прихо- довом цикле вращения Землидится выполнять повторяющиеся вокруг Солнца или о производ-действия: умываться, одеваться, ственном цикле.посещать парикмахерскую, за-втракать, ходить на работу и др. Циклом является закончен- ный ряд каких-либо произве- дений, чего-либо излагаемого, исполняемого: цикл лекций, цикл стихотворений.Правообладатель Народная асвета
62 Глава 3. Основные алгоритмические конструкции Пример 10.1. Приготовление Как правило, человек состав-пельменей. ляет программы, в которых каж- дая команда в отдельности и весь алгоритм в целом выполняются за конечное число повторений. Алгоритм: Алгоритмическая конструк- 1. Вскипятить воду. ция повторение (цикл) опре- 2. Для i = 1..10 повторять: деляет последовательность дей- ствий, выполняемых много- 2.1. Достать пельмень из кратно. Эту последовательностьупаковки. действий называют телом цикла. 2.2. Бросить пельмень в ки-пящую воду. Существует несколько возмож- ностей управлять тем, сколько 3. Варить 7 минут. раз будет повторяться тело цикла. В данном примере параметрцикла i изменяется от 1 до 10. Алгоритмическая конструк-Действия «достать пельмень из ция цикл с параметром (циклупаковки» и «бросить пельмень со счетчиком) — способ орга-в кипящую воду» выполняются низации цикла, при котором10 раз и составляют тело цикла. количество повторов зависит Блок-схема данного алгорит- от начального и конечного зна-ма выглядит таким образом: чений параметра цикла. ª½Ô½ÈË ÎÇÅÌÜÏÅÏÙ¿ËÁÐi ªÂÏ ¡½ Таким образом, цикл с параме-¡ËÎϽÏÙÌÂÈÙÉÂÊÙ тром организует выполнение ко- манд тела цикла заранее извест- ÅÄÐ̽ÇË¿ÇÅ ное число раз (пример 10.1).ÍËÎÅÏÙÌÂÈÙÉÂÊÙ Параметр цикла определяет ¿ÇÅÌÜÖÐÛ¿ËÁÐ нумерацию действий в цикле. Па- раметр цикла может принимать ½ÍÅÏÙÉÅÊÐÏ только целые значения. Часто ну- мерацию начинают с 1 и закан- §ËÊÂÓПравообладатель Народная асвета
§ 10. Алгоритмическая конструкция повторение 63чивают числом N (пример 10.2). Пример 10.2. Вычислим anВ этом случае цикл выполнится (например, 35 = 243).N раз. Если нумерация установ-лена двумя произвольными чис- Алгоритм возведения числа влами N1 (начальное значение) и степень:N2 (конечное значение), то циклвыполнится (N2 – N1 + 1) раз. 1. Ввести значения a и n. 2. Определить начальное зна- Алгоритмическая конструк- чение результата r = 1.ция цикла с параметром может 3. Для i = 1..n повторять:изображаться на блок-схеме сле-дующим образом (значение пара- 3.1. Умножить результат на a.метра изменяется от 1 до N): 4. Записать результат. ¡½ i = 1..N ªÂÏ Пример 10.3. В фольклорных§ËɽÊÁ½ Ø произведениях часто встреча- ется многоголовый Змей Горы- В данной конструкции в ныч (количество голов можетпрямоугольнике(-ах) записыва- быть, например, 7).ются повторяющиеся команды Алгоритм победы над Змеем Горынычем: 1. Найти Змея Горыныча. 2. Для i = 1..7 повторять: 2.1. Отрубить голову Змею Го- рынычу. 3. Отпраздновать победу. Блок-схема данного алгоритма:алгоритма (тело цикла), которые ª½Ô½ÈËвыполняются N раз (Да). При ª½ÆÏÅэтом после каждого выполнения ¤ÉÂÜ ËÍØÊØÔ½команд тела цикла происходитпроверка, который раз выполня- i ªÂÏется цикл. На блок-схеме переходна проверку условия изображает- ¡½ся в виде стрелки, выходящей из «ÏÍоÅÏÙÀËÈË¿Ðтела цикла и возвращающейся ¤ÉÂÛ ËÍØÊØÔÐк проверке. Как только коман- «ÏÌͽÄÁÊË¿½ÏÙ Ì˾ÂÁÐды тела цикла выполнятся N раз §ËÊÂÓ(Нет), цикл завершится (пример10.3). Если N - 0, то команда телацикла не выполнится ни разу.Правообладатель Народная асвета
64 Глава 3. Основные алгоритмические конструкции Многие роботы, которые ис- 10.2. Использование командыпользуются в быту и на про- цикла с параметромизводстве, могут выполнять для исполнителя Роботциклические алгоритмы. При-мером такого робота является Чтобы составлять алгоритмы ссуши-робот, который может циклами для компьютерного ис-производить от 450 до 4000 за- полнителя Робот, нужно знать,готовок для суши за 1 час. как записывается команда цикла. Пример 10.4. Начальная об- Для записи цикла с параме-становка: тром используется команда for. Формат записи команды: Программа для исполнителяРобот: for var i:= N1 to N2 do1 begin uses Robot; begin тело цикла; end; Task('c2'); Строка for var i:= N1 to N2 do for var i:= 1 to 10 do является заголовком цикла. Его begin читают так: «Для переменной i от N1 до N2 делай». Если N2 , N1, paint; то команды тела цикла выпол- right; нятся (N2 − N1 + 1) раз, иначе end; цикл не выполнится ни разу. end. Слова begin и end; являются Результат работы программы: операторными скобками в языке Pascal. Если тело цикла состоит из одной команды, операторные скобки можно опустить. Операторные скобки — пара слов, определяющих в языке программирования блок ко- манд, воспринимаемый как единое целое, как одна команда. Пример 10.4. Решим задачу с2 из встроенного задачника.1 Команда в таком формате записывается только в среде PascalABC.Net.Правообладатель Народная асвета
§ 10. Алгоритмическая конструкция повторение 65 Робот должен закрасить все Пример 10.5. Начальная об-клетки поля (кроме последней), становка для учебного компью-перемещаясь вправо. Для этого терного исполнителя Робот:в цикле нужно 10 раз выполнитькоманды: Программа для исполнителя Робот составляется следующим закрасить; образом: вправо. Данные команды образуют uses Robot;тело цикла. procedure kvadrat; Командами, образующими тело beginцикла, могут быть любые коман-ды из системы команд исполните- paint;ля. Кроме того, в теле цикла мо- down;жет вызываться вспомогательный paint;алгоритм. Использование вспомо- left;гательного алгоритма позволит со- paint;кратить запись тела цикла и сде- up;лает программу более понятной. paint; Пример 10.5. Решим задачу с7 left;из встроенного задачника. end; На поле исполнителя Робот beginесть стены. При обходе стен Робот Task('c7');выполняет следующие команды: for var i:= 1 to 5 do закрасить; вниз; закрасить; влево; kvadrat; закрасить; вверх; end. закрасить; влево. Чтобы решить задачу, Роботдолжен повторить эти команды Результат работы записанной выше программы будет иметь5 раз. Оформим данные команды следующий вид:как вспомогательный алгоритмkvadrat и вызовем его в цикле. В данном примере тело цикласостоит из одной команды kvad-rat, поэтому операторные скобкиможно не использовать.Правообладатель Народная асвета
66 Глава 3. Основные алгоритмические конструкции ? 1. Что понимают под алгоритмической конструкцией повторение? 2. Что такое цикл с параметром? 3. Что такое операторные скобки? 4. Приведите примеры использования цикла. Упражнения Опишите словесно или изобразите с помощью блок-схемы следую-щие алгоритмы: 1. Рисование в графическом редакторе изобра- жения из 4 квадратов с диагоналями и закра- шенными областями (см. рис. справа). 2. Каждую минуту бактерия делится на две. Изначально есть одна бактерия. За бактериями наблюдали 10 минут. Определите количество бактерий в конце наблю- дения. Заполните таблицу.Время, мин 0 1 2 3 4 5 6 7 8 9 10 12Количествобактерий 3. Сверление 10 отверстий. ª½Ô½ÈË 4. Сервировка стола к обе- ду на 6 персон. i = 1..5 ªÂÏ Семиклассник Андрей после ¡½школы пригласил своего друга ®×ÂÎÏÙ¾ÐÏÂ;ÍËÁЮру помочь ему в решении 5 за-дач по математике. В гостях Юра ¬ËÎÉËÏÍÂÏÙÉÐÈÙÏÑÅÈÙÉпосоветовал Андрею провестиостаток дня, воспользовавшись ÂÕÅÏÙĽÁ½ÔÐÌËɽÏÂɽÏÅÇÂалгоритмом, записанным в виде §ËÊÂÓблок-схемы (см. рис. справа).Объясните, почему за выполне-ния этого задания Андрей полу-чил двойку по математике.Правообладатель Народная асвета
§ 10. Алгоритмическая конструкция повторение 67 Составьте программу для ре- Составьте программу для ре-шения задачи с3 из встроенного шения задачи с4 из встроенногозадачника. Сравните алгоритм задачника. Сравните ее решениерешения этой задачи с примером с предыдущим упражнением и10.4. Что у них общего? Чем они с примером 10.4.отличаются? Составьте программу для ре- Составьте программу для ре-шения задачи с8 из встроенного шения задачи с5 из встроенногозадачника. Используйте вспомо- задачника.гательный алгоритм. Для решения задачи с14 Петя uses Robot;составил алгоритм и записал про- beginграмму. Петин младший брат Олегудалил несколько команд. Опреде- Task('c14');лите, сколько команд удалил Олег. paint;Восстановите программу, которую for var i:= 1 to 4 doнаписал Петя. begin paint; right; down; end; for var i:= 1 to 4 do begin right; up; end; for var i:= 1 to 4 do begin paint; end; end.Правообладатель Народная асвета
68 Глава 3. Основные алгоритмические конструкции Максим пытается представить, как можно было бы использоватьроботов в различных ситуациях, описанных в литературных произведе-ниях. Например, для Тома Сойера, которого тетушка Полли отправилакрасить забор, Максим придумал робота-маляра и решил, что такомуроботу достаточно одной команды: покрась доску. Алгоритм покраскизабора из 20 досок Максим записал так: 1. Установить робота у левого края забора. 2. Для i = 1..20 повторять: 2.1. Покрась доску.Сможет ли робот-маляр покрасить забор? В чем ошибка Максима? Ис-правьте алгоритм, добавив необходимую(-ые) команду(-ы).§ 11. Использование условий Условия используются в пра- 11.1. Понятие условиявилах дорожного движения.Так, если горит зеленый свет, Принятие решений зачастуюто можно переходить улицу. зависит от различных условий. Если на улице дождь, то нужно Условия также встречаются взять зонт; если хорошо подгото-в фольклоре, например при вы- вился к уроку, то получишь высо-боре пути сказочными героями. кую отметку, иначе низкую и др. Человек способен понимать условия, сформулированные в произвольной форме. Но для того чтобы Робот или другой испол- нитель мог принимать решения, нужно «научить» его «понимать» условия. В. Васнецов. «Витязь на Условием для исполнителяраспутье» (фрагмент). 1882 г. является понятное ему выска- зывание, которое может быть истинным (соблюдаться) либо ложным (не соблюдаться).Правообладатель Народная асвета
§ 11. Использование условий 69 Исполнитель может проверить Применяются условия в ма-истинность условий, входящих в тематике, например:его систему условий. Треугольник существует, если Рассмотрим систему условий для большей стороны a выпол-для исполнителя Робот. няется неравенство a < b + c. ÎWallFromLeft Истинно, если слева bWallFromRight от Робота стена AWallFromUpWallFromDown Истинно, если спра- a ва от Робота стена bÎ Истинно, если ® aB сверху от Робота стена Пример 11.1. Рассмотрим на- чальную обстановку поля ис- Истинно, если сни- полнителя Робот: зу от Робота стенаFreeFromLeft Истинно, если слева от Робота свободноFreeFromRight Истинно, если справа от Робота свободноFreeFromUp Истинно, если В данном случае для Робо-FreeFromDown сверху от РоботаCellIsPainted свободно та будут истинны следующиеCellIsFree Истинно, если сни- условия: зу от Робота свобод- но WallFromLeft WallFromUp Истинно, если FreeFromRight ячейка, в которой FreeFromDown находится Робот, CellIsPainted закрашена Ложными при такой началь- Истинно, если ной обстановке будут условия: ячейка, в которой находится Робот, не WallFromRight закрашена WallFromDown FreeFromLeft Образцы истинных и ложных FreeFromUpусловий для исполнителя Робот CellIsFreeпредставлены в примере 11.1. Правообладатель Народная асвета
70 Глава 3. Основные алгоритмические конструкции Пример 11.2. Сбор грибов. 11.2. Цикл с предусловием Использование цикла с па-раметром при составлении ал- Цикл с параметром использу-горитма решения этой задачи ется при составлении алгоритма вможет привести к разным ре- том случае, когда заранее извест-зультатам. но количество повторений. Одна- Корзина может быть или по- ко часто до выполнения цикла ко-лупустой, или не все найден- личество повторений не известно.ные грибы в нее поместятся. Пример 11.2. Вы с родителями Если использовать цикл с пошли в лес за грибами. Вашипредусловием, то в результате действия можно описать коман-домой можно унести полную дами: найти гриб, срезать гриб,корзину грибов. положить гриб в корзину. Эти действия будут выполняться в ª½Ô½ÈË цикле, но вы заранее не знаете, сколько грибов войдет в корзину. ¬ËÆÏÅ¿ÈÂÎ Поэтому следует говорить не о ко- личестве повторений (количестве грибов), а об условии, при котором вы будете продолжать сбор гри- бов: пока корзина не заполнена. Алгоритмическая конструк- §ËÍÄÅʽ ªÂÏ ция цикл с предусловием (циклÊÂĽÌËÈÊÂʽ «пока») — способ организации¡½ цикла, при котором количествоª½ÆÏÅÀÍž выполнений команд тела цик- ла зависит от истинности или®ÍÂĽÏÙÀÍž ложности условия цикла.¬ËÈËÃÅÏÙÀÍž¿ÇËÍÄÅÊÐ Цикл с предусловием исполь- зуется, когда количество повто- рений тела цикла заранее не из-¬ËÆÏÅÁËÉËÆ вестно, но известно условие про- должения работы.§ËÊÂÓ Условие цикла определяет, как долго будет выполняться цикл.Правообладатель Народная асвета
§ 11. Использование условий 71Пока условие истинно, выпол- Российский академик А н дрейняются команды, составляющие Андреевич Марков (младший)тело цикла. Цикл прекращает (1903—1979) в своих исследова-выполняться тогда, когда усло- ниях в области теории алгорит-вие становится ложным. Цикл с мов показал, что в общем слу-предусловием имеет такое назва- чае алгоритмы должны содер-ние, поскольку проверка условия жать предписания двух видов:предваряет выполнение командтела цикла. 1) функциональные операто- ры, направленные непосред- Алгоритмическая конструк- ственно на преобразование ин-ция цикла с предусловием изоб- формации;ражается на блок-схеме так: 2) логические операторы, ¡½ °ÎÈ˿ŠªÂÏ определяющие дальнейшее на-§ËɽÊÁ½ Ø правление действий. В данной конструкции в Оператор — элемент языка,прямоугольнике(-ах) записыва- задающий полное описаниеются повторяющиеся команды действия, которое необходимоалгоритма (тело цикла), которые выполнить. В английском язы-совершаются, пока верно условие ке данное понятие обозначается(Да). При этом после каждого словом statement, означающимвыполнения команд тела цикла также ‘предложение’.происходит проверка, истинно лиусловие. Как только условие ста- Если применить вышеска-нет ложным (Нет), цикл заверша- занное к компьютерным испол-ется. Если условие сразу ложно, нителям, то предписания пер-то цикл не выполнится ни разу. вого вида составляют систему команд исполнителя, а предпи- Если условие в цикле будет сания второго вида — систему всегда истинно (всегда Да), то условий исполнителя. такой цикл не сможет завер- шиться. Возникшую ситуацию называют зацикливанием.Правообладатель Народная асвета
72 Глава 3. Основные алгоритмические конструкции Пример 11.3. Одна из возмож- Для записи цикла с предусло-ных начальных обстановок: вием используется команда while. Формат записи команды: while <условие> do Другая возможная началь- beginная обстановка: тело цикла; end; do Строка while <условие> Запишем программу для является заголовком цикла. Эту строку можно прочитать сле-учебного компьютерного испол- дующим образом: «Пока верно условие, делай». Команды beginнителя Робот: и end; в данном случае играют uses Robot; роль операторных скобок. begin Task('w2'); Пример 11.3. Напишем про- while FreeFromRight do грамму для решения задачи w2 begin из встроенного задачника. paint; right; Робот должен закрасить кори- end; дор переменной длины. paint; end. В данной задаче нам точно не известна длина коридора, но из- Результат работы указанной вестно, что Робот может двигать-выше программы для первой ся, пока справа пусто, и закра-начальной обстановки будет шивать клетки:иметь следующий вид: Пока справа пусто, повторять закрасить; вправо. После прохода всего коридора Результат работы программы Робот должен закрасить послед-для второй начальной обста- нюю клетку. Это происходит посленовки: выполнения цикла, так как для последней клетки условие «спра- ва пусто» уже не выполняется.Правообладатель Народная асвета
Пример 11.4. Напишем про- § 11. Использование условий 73грамму для решения следующейзадачи. Робот находится в верх- Пример 11.4. Одна из возмож-нем левом углу поля. Снизу от ных начальных обстановок:него вдоль всего поля располо-жена стена с проходом в одну Программа для исполнителяклетку. Составить алгоритм, вы- Робот:полнив который Робот сможетпройти через проход и закрасить uses Robot, RobTasks1;клетку. Расположение прохода beginзаранее не известно. Task('myrob3'); Проход не ограничен стеной while WallFromDown doснизу. Робот может двигатьсявправо, пока внизу есть стена: right; down; Пока снизу стена, повторять paint; вправо. end. Результат работы программы Робот остановится в той клет- будет следующим:ке, у которой снизу нет стены.После этого Робот должен сдви-нуться вниз и закрасить клетку.? 1. Что понимают под условием для исполнителя? 2. Когда используется цикл с предусловием? 3. В каком случае возникает ситуация зацикливания? Упражнения Напишите программу для решения задач w3 и w8 из встроенногозадачника. Обращайте внимание на начальное и конечное положениеРобота. 1 Модуль RobTasks, содержащий данную обстановку и задачу, можноскачать по адресу: http://e-vedy.adu.by/course/view.php?id=423. Правообладатель Народная асвета
74 Глава 3. Основные алгоритмические конструкции Для исполнителя Робот был написан следующий алгоритм: uses Robot; begin Field( , ); while FreeFromRight do begin paint; down; right; paint; up; right; end; end. Нарисуйте в тетради результат работы данного алгоритма. Какими долж- ны быть размеры поля, чтобы Робот не врезался в стену? Определите начальное положение Робота. Составьте алгоритм, выполнив который Робот нарисует «узор» из за- дания 2 вдоль левого края поля исполнителя. Каким должен быть верти- кальный размер поля исполнителя? (Задача myrob5 из модуля RobTasks.) Робот находится на квадратном поле неизвестного размера. Началь- ное положение Робота — верхний левый угол. Составьте и выполните алгоритм, по которому Робот переместится из начального положения в нижний правый угол и закрасит все клетки своего пути. На каком (на каких) из рисунков изображено решение этой задачи? Почему? а бв На поле Робота размещен «забор» — горизонтальная стена. Забор нужно «покрасить» — закрасить все клетки сверху стены. В «за- боре» могут быть одни «ворота» — клетка без линий. Длина «забора» и Правообладатель Народная асвета
§ 11. Использование условий 75расположение «ворот» не известны. (Задачаmyrob7 из модуля RobTasks.) По блок-схеме запишите программу дляисполнителя Робот. Каким будет резуль-тат для каждой из предложенных началь-ных обстановок? (Задача myrob8 из модуляRobTasks.) ª½Ô½ÈË Ë¾ËϿȿËÉ ¿ÂÍÒÊÂÉÐÀÈÐ ¡½ ÊÅÄÐ ªÂÏ ÎÏÂʽÌͽ¿Ë ¡½ ®Ìͽ¿½ ªÂÏ ÎÏÂʽÊÅÄ ¤½ÇͽÎÅÏÙ §ÈÂÏǽ ĽÇͽÕÂʽ §ËÊÂÓ Решите задачу w10 из встроенногозадачника. Напишите вспомогательныйалгоритм для обхода одной стены. Правообладатель Народная асвета
76 Глава 3. Основные алгоритмические конструкции§ 12. Алгоритмическая конструкция ветвление Понятие ветвления использу- 12.1. Команда ветвленияется в различных сферах чело- Довольно часто на поставлен-веческой деятельности. ный вопрос человек получает от- В ботанике под ветвлением вет «Да» или «Нет». В зависимо-побегов понимают процесс об- сти от ответа он определяет своиразования боковых побегов у действия и выполняет одну илирастений. другую команду (группу команд). При употреблении термина Роботы и другие техническиев переносном смысле под вет- устройства тоже могут выпол-влением понимают наличие не- нять различные действия в зави-скольких путей, направлений, симости от условия. Если условиесюжетных линий и т. д. истинно (на вопрос получен ответ «Да»), то выполняются одни дей- Ветвления используются в ствия, если ложно, то другие.дорожной разметке и картогра-фии. Алгоритмическая конструк- ция ветвление обеспечивает выполнение одной или другой последовательности команд в зависимости от истинности или ложности некоторого условия. Ветвление может изображать- ся на блок-схеме таким образом: ¡½ °ÎÈ˿ŠªÂÏ §ËɽÊÁ½ Ø §ËɽÊÁ½ Ø В данной конструкции в прямоугольнике(-ах) записыва- ются команды алгоритма. ПриПравообладатель Народная асвета
§ 12. Алгоритмическая конструкция ветвление 77такой организации алгоритма Пример 12.1. Выбор обувиможет выполниться только однаиз двух команд (последователь- весной в зависимости от погоды:ностей команд). Другая последо-вательность будет проигнориро- Если на улице дождь, тована (пример 12.1). надеть резиновые сапоги; Иначе надеть туфли.Для записи конструкции вет-вления в языке программирова-ния Pascal используется командаif. Формат записи команды: В данном примере в текущий момент времени может быть if <условие> then выполнена только одна коман- begin да из двух: или надеть сапоги, или надеть туфли. команды 1; end Блок-схема данного алгорит- else ма будет выглядеть следующим begin образом: команды 2; end; Строка if <условие> then яв-ляется заголовком ветвления.Эту строку можно прочитать так:«Если условие верно, то». Послеслова then записывается после-довательность команд 1, которая ª½Ô½ÈËвыполнится, если условие истин-но. После слова else записывает- ¡½ ª½ÐÈÅÓ ªÂÏся последовательность команд 2, ÁËÃÁÙкоторая выполнится, если усло-вие ложно. Слова begin и end; ª½ÁÂÏÙ ª½ÁÂÏÙв данном случае играют роль ÍÂÄÅÊË¿ØÂ ÏÐÑÈÅоператорных скобок. Обратите νÌËÀÅвнимание, что перед словом elseточка с запятой не ставится.Ветвление может быть записано §ËÊÂÓв полной или сокращенной форме.Правообладатель Народная асвета
78 Глава 3. Основные алгоритмические конструкции Пример 12.2. Выход на ули- Полная форма ветвления преду-цу осенью. сматривает организацию выпол- нения двух разных наборов ко- Если на улице дождь, то манд, из которых выполняется взять зонт; только один. В сокращенной фор- ме один из наборов команд (чаще выйти на улицу. по ответу «Нет») опускается. Здесь используется сокращен- В этом случае, если условие лож-ная форма команды ветвления. ное, то никакие действия не вы-Если условие истинно, выполня- полняются.ется команда «взять зонт».Если условие ложно, никаких Блок-схема сокращенной фор-действий не происходит. Ко-манда «выйти на улицу» вы- мы ветвления:полняется всегда. Блок-схема алгоритма: ª½Ô½ÈË ¡½ °ÎÈ˿ŠªÂÏ §ËɽÊÁ½ Ø ¡½ ª½ÐÈÅÓ ªÂÏÄÜÏÙÄËÊÏ ÁËÃÁÙ ØÆÏÅʽÐÈÅÓÐ (Рассмотрите пример 12.2.) §ËÊÂÓ На языке программирования Pascal команда запишется так: Пример 12.3. Имеется три мо-неты, среди которых одна фаль- if <условие> thenшивая. Фальшивая монета лег- beginче настоящих. Найдем фаль-шивую монету за минимальное команды 1;число взвешиваний на чашеч- end;ных весах без гирь: Алгоритм может содержать Положить на каждую чашу более одной конструкции ветвле-весов монеты 1 и 2; ния (пример 12.3). Если весы в равновесии, то Пример 12.4. Решим задачу фальшивая монета 3; if1 из встроенного задачника. Иначе Робот должен закрасить клет- Если монета 1 тяжелее, то ку, которая находится за стеной. фальшивая монета 2; В зависимости от обстановки об- Иначе ход стены может осуществляться фальшивая монета 1. по-разному. Правообладатель Народная асвета
§ 12. Алгоритмическая конструкция ветвление 79 Вначале Робот должен сдви- Пример 12.4. Возможные на-нуться вправо. Если стена снизу, чальные обстановки:то сверху свободно и можно обой-ти стену сверху, в противном слу- Программа для Робота:чае Робот обходит стену снизу. uses Robot; begin После обхода стены Робот за-крашивает клетку. Алгоритм Task('if1');можно записать так: right; if FreeFromUp then вправо; begin Если сверху свободно, то up; right; down; вверх; вправо; вниз; end Иначе else begin вниз; вправо; вверх; закрасить. down; right; up; end; Пример 12.5. Робот находит- paint;ся на неизвестной клетке поля end.без линий. Он должен закрасить Пример 12.5. Программа дляклетку слева от себя. исполнителя Робот: uses Robot, RobTasks; Для того чтобы закрасить beginклетку слева от себя, Робот дол- Task('myrob9');жен переместиться влево, а за- if FreeFromLeft thenтем закрасить клетку. Однако beginсделать это Робот сможет толькотогда, когда не находится в клет- left; paint;ках, являющихся левой грани- end;цей поля. Поэтому, прежде чем end.сдвинуться влево, Робот должен Возможные начальные обста-проверить, свободно ли слева. новки: Результат работы данной про-граммы зависит от начальногоположения Робота. Поэтому дляпроверки правильности работыпрограммы необходимо подгото-вить начальные обстановки, ко-торые дают разные ответы на во-прос: слева пусто?Правообладатель Народная асвета
80 Глава 3. Основные алгоритмические конструкции Пример 12.6. Рассмотрим 12.2. Составные условияследующую начальную обста-новку поля для исполнителя В качестве условия в алгорит-Робот: мах с циклами и ветвлениями используется любое понятное ис- полнителю этого алгоритма вы- сказывание, которое может быть либо истинным, либо ложным. Все условия, с которыми нам приходилось до сих пор встре- чаться при составлении алгорит- мов для Робота, были простыми Проверим для Робота следу- высказываниями. Однако можноющие составные условия: строить и составные условия. 1. WallFromLeft and or Составное условие — усло-CellIsPainted. вие, которое образуется из не- скольких простых условий, 2. WallFromUp or соединенных друг с другом ло-WallFromDown. гическими операциями. 3. Not (WallFromRightFreeFromUp). Первое условие состоит из С логическими операциями над высказываниями вы уже знако-двух простых: WallFromLeft мы. В PascalABC используются(условие А) и CellIsPainted(условие В). Условие можетбыть записано как «А И В». следующие логические операции:Это условие верно только тогда, Логическая Запись операция в PascalABCкогда верны и А, и В. УсловиеА — WallFromLeft — истинно, Не Notусловие В — CellIsPainted — Andистинно, условие А И В — ис- И Orтинно. Или Второе условие может быть (Рассмотрите пример 12.6.)записано как «А ИЛИ В», где Система условий для РоботаА — WallFromUp, В — Wall- построена так, что можно обой-FromDown. Условие А — истин- тись без использования логиче-но, условие В — ложно. Зна- ской операции отрицания. Для условия FreeFromLeftчит, условие «А ИЛИ В» — ис-тинно. отрицанием будет условие notПравообладатель Народная асвета
§ 12. Алгоритмическая конструкция ветвление 81FreeFromLeft. Но условие «слева В третьем условии частицане свободно» означает, что тамстена. Поэтому вместо условия Not отрицает составное условиеnot FreeFromLeft можно писать WallFromRight or FreeFromUp.WallFromLeft. Отрицания дру- Условие может быть записаногих условий показаны в таблице: как НЕ («А ИЛИ В»). Для того Условие Отрицание чтобы определить, истинно илиWallFromLeft FreeFromLeft ложно это условие, нужно сна-WallFromRight FreeFromRightWallFromUp FreeFromUp чала определить истинностьWallFromDown FreeFromDownCellIsPainted CellIsFree условия «А ИЛИ В». Условие А — ложно, условие В тоже ложно. Поэтому ложным будет и условие «А ИЛИ В», но тогда условие НЕ «А ИЛИ В» будет истинным.? 1. Что такое алгоритмическая конструкция ветвление? 2. Чем отличается полная конструкция ветвления от сокращенной? 3. Что такое составное условие? 4. Какие логические операции можно использовать для записи со- ставных условий? 5. Какими способами можно построить отрицание условия для ком- пьютерного исполнителя Робот? Упражнения Выделите конструкцию ветвления в отрывке из поэмы А. С. Пушкина«Руслан и Людмила» и изобразите ее с помощью блок-схемы. У лукоморья дуб зеленый; Златая цепь на дубе том: И днем и ночью кот ученый Все ходит по цепи кругом; Идет направо — песнь заводит, Налево — сказку говорит. Там чудеса: там леший бродит, Русалка на ветвях сидит…1 1 Пушкин, А. С. Руслан и Людмила : поэма. — М. : Изд. Дом «При-бой». — 1996. — С. 5. Правообладатель Народная асвета
82 Глава 3. Основные алгоритмические конструкции Для заданной обстановки поля Робота определите, какие из состав-ных условий истинны, а какие ложны.Начальная обстановка Условия WallFromLeft or CellIsPainted; WallFromUp and WallFromDown; Not CellIsPainted and FreeFromRight; Not (WallFromUp or FreeFromRight); WallFromDown and CellIsFree; (WallFromUp or WallFromDown) and FreeFromRight. В задании 2 замените условия, содержащие not, соответствующимиусловиями без использования отрицания. Для каждого из ложных условий задания 2 придумайте обстановку,в которой данное условие будет верным, а для каждого истинного —обстановку, в которой условие будет ложным. Измените программу из примера 12.5 так, чтобы Робот закрашивалклетку справа (снизу, сверху) от себя. Нарисуйте в тетради различныеначальные обстановки для проверки данного условия. Решите задачи if2 и if3 из встроенного задачника.Правообладатель Народная асвета
§ 13. Использование основных алгоритмических конструкций для исполнителя Робот 83§ 13. Использование основных алгоритмических конструкций для исполнителя Робот Последовательное выполнение Перед человеком постояннокоманд в программе определяет- возникают разнообразные за-ся структурой следование. Для дачи, для которых существуюторганизации повторяющихся дей- различные алгоритмы реше-ствий в алгоритме используется ния. При всем многообразиикоманда цикла. Команда ветвле- алгоритмов для их записи до-ния позволяет выполнять одну статочно трех алгоритмическихили другую последовательность конструкций (структур): следо-команд в зависимости от истин- вание, цикл, ветвление.ности условия.Следование, цикл и ветвле-ние — базовые алгоритмиче-ские конструкции. Используяэти конструкции как элементынекоего «конструктора», мож- но составлять и разрабатывать Это положение было выдви- любые алгоритмы. нуто в середине 70-х гг. ХХ в. нидерландским ученым Эдсге- Команды цикла и ветвления ром Вибе Дейкстрой (1930—управляют порядком выполне- 2002).ния других команд в программеи относятся к командам управле- Его труды оказали влияниения. Использование алгоритми- на развитие информатики ической конструкции следование информационных технологий.предполагает отсутствие управ- Э. Дейкстра является однимляющих конструкций. из разработчиков концепции структурного программиро- Рассмотрим подробнее приме- вания, участвовал в созда-ры алгоритмов, содержащих не- нии языка программированиясколько алгоритмических кон- Алгол. Известен своими до-струкций. стижениями в области мате- матической логики и теории графов.Правообладатель Народная асвета
84 Глава 3. Основные алгоритмические конструкции Пример 13.1. Одна из возмож- Пример 13.1. Решим задачуных начальных обстановок: cif1 из встроенного задачника. Робот передвигается вправо до тех пор, пока не встретит стену. По пути он должен закрасить Программа для Робота: клетки, над которыми есть стена. Для решения задачи Робот дол-uses Robot;begin жен проверять каждую клетку на своем пути. Если условие «сверху Task('cif1'); стена» выполняется, Робот закра- while FreeFromRight do шивает эту клетку. После про- begin верки клетки Робот сдвигается вправо. Такие действия выполня- if WallFromUp then ются в цикле, пока справа пусто. paint; После цикла нужна команда right; ветвления, так как для крайней end; клетки поля команда «справа пу- if WallFromUp then сто» не выполняется и клетка в ци- кле не закрашивается. В этой за- paint; даче внутри структуры цикла ис-end. Пример 13.2. Возможные на-чальные обстановки: пользуется структура ветвления. Пример 13.2. Решим задачу cif17 из встроенного задачника. Программа для Робота: Робот должен дойти до конца «коридора» переменного размера.uses Robot; «Коридор» может сворачиватьbegin влево или вправо. Task('cif17'); Для решения задачи Робот сна- while FreeFromUp do чала перемещается вверх до тех пор, пока вверху пусто. Стена, up; появившаяся сверху, означает, if FreeFromLeft then что начался поворот «коридора». «Коридор» поворачивает влево, while FreeFromLeft do если слева пусто, иначе «коридор» left поворачивает вправо. Дальше Ро- else while FreeFromRight do right;end.Правообладатель Народная асвета
§ 13. Использование основных алгоритмических конструкций для исполнителя Робот 85бот двигается в том направлении, Пример 13.3∗. Начальная об-где пусто, пока не встретит стену. становка: В данной задаче используется Программа для Робота:сначала структура цикла, а за- uses Robot;тем структура ветвления. Каж- beginдая последовательность команд вструктуре ветвления, в свою оче- Task('cc5');редь, является циклом. for var i:= 1 to 4 do begin Операторные скобки опущены,поскольку последовательность со- while FreeFromRight doстоит из одной команды цикла. right; Пример 13.3∗. Решим задачу down;cc5 из встроенного задачника. while FreeFromLeft do Робот находится в верхнем ле- left;вом углу поля и должен переме- down;ститься в нижний левый угол. end;На поле присутствуют стены, end.которые Робот должен обойти. Блок-схема вложенных ци-При этом он должен сначала дви- клов:гаться до правой границы поля,затем спуститься вниз, а потом ¤½ÀËÈË¿ËÇдвигаться до левой границы поля ¿ÊÂÕÊÂÀËÓÅÇȽи спуститься вниз. Эти действияРобот должен повторить 4 раза. §ËɽÊÁ½ Ø ¿ÊÂÕÊÂÀËÓÅÇȽ В данной задаче внутри циклас параметром используются два ¤½ÀËÈË¿ËÇдругих цикла с предусловием. ¿ÊÐÏÍÂÊÊÂÀËÓÅÇȽ Структуру, когда внутри одно- го цикла выполняется другой, на- зывают вложенными циклами. Таким образом, базовые алго- §ËɽÊÁ½ Øритмические структуры можно ¿ÊÐÏÍÂÊÊÂÀËÓÅÇȽкомбинировать друг с другом.Правообладатель Народная асвета
86 Глава 3. Основные алгоритмические конструкции? 1. Назовите базовые алгоритмические конструкции. 2. Приведите примеры использования базовых алгоритмических конструкций. 3∗. Что такое вложенный цикл?Упражнения Какие алгоритмические конструкции используются в приведенныхпрограммах? Нарисуйте блок-схемы данных алгоритмов. Предложитепример начальной обстановки, в которой алгоритм выполнится корректно.а) uses Robot; б) uses Robot;begin beginwhile WallFromLeft do while CellIsPainted dobegin if FreeFromleft thendown; left;paint; end.end; end. uses Robot; Для решения задачи cif3 из beginвстроенного задачника Миша на-писал программу, но она работает Task('cif3');неправильно. Какие ошибки допу- while WallFromRight doстил Миша? begin if WallFromDown or WallFromUp then paint; right; end; if WallFromUp and WallFromDown then paint; end.Используя базовые алгоритмические конструкции, запишите алго-ритмы, соответствующие описаниям. Постройте для них блок-схемы.1. Тело цикла, выполняющегося при условии WallFromUp,состоит из двух команд: right и paint.2. Если условие FreeFromRight не выполняется, то, есликлетка не закрашена, ее нужно закрасить, а если закраше-на, то сдвинуться влево. Правообладатель Народная асвета
§ 13. Использование основных алгоритмических конструкций для исполнителя Робот 87 3. Проверку условия CellIsPainted нужно производить до тех пор, пока снизу нет стен. При выполнении условия сдви- нуться вниз, при невыполнении условия закрасить клетку. Заполните пропуски в программе решения задачи cc14 из встроен-ного задачника так, чтобы она работала верно. uses Robot; begin Task('cc14'); for var i: =1 to 4 do begin while … do right; down; while … do left; down; end; end. Решите задачу cif2 из встроенного задачника, используя внутри цик-ла команду ветвления. Решите задачу cc7 из встроенного задачника, использовав внутриодного цикла два вложенных цикла. Придумайте задачу для исполнителя Робот, в которой будут исполь-зоваться различные алгоритмические конструкции. Правообладатель Народная асвета
88 Глава 3. Основные алгоритмические конструкции§ 14. Язык программирования Паскаль Компьютер (от англ. Желание упростить и ускоритьcomputer — вычислитель) — всевозможные расчеты присущеустройство или система, спо- человеку с древних времен. Сегод-собные выполнять заданную ня компьютер способен выпол-четко определенную изменяе- нять сотни миллионов операциймую последовательность опе- в секунду. Для решения вычисли-раций (чаще всего численных тельных задач требуется снача-расчетов). ла составить алгоритм их реше- ния, а затем записать его в виде Электронно-вычислительная программы, используя какой-машина (ЭВМ) — комплекс либо язык программирования.технических средств, где основ-ные функциональные элементы Язык программирования(логические, запоминающие, устанавливает набор правил,индикационные и др.) выполне- определяющих внешний видны на электронных приборах, программы и действия, кото-предназначенных для автома- рые выполнит исполнитель подтической обработки информа- ее управлением.ции в процессе решения вычис-лительных задач. Никлаус Вирт (родился в Язык программирования Па-1934 г.) — швейцарский уче- скаль (Pascal) используется дляный, специалист по информа- обучения программированию итике, один из известнейших является базой для ряда профес-теоретиков в области разработ- сиональных языков программи-ки языков программирования, рования.профессор компьютерных наук.Создатель и ведущий проекти- Существует множество средровщик языков программирова- программирования, поддержива-ния Паскаль, Модула-2, Оберон. ющих язык Паскаль: PascalABC, FreePascal, Delphi, GNU Pascal, Dev-Pascal, Rad Studio и др. В учебном курсе используется сре- да PascalABC (с ней вы работали, знакомясь с учебными компью- терными исполнителями).Правообладатель Народная асвета
§ 14. Язык программирования Паскаль 8914.1. Команда вывода По традиции, начавшейся в 1978 г. с примера из книги Демонстрировать работу любой Б. Кернигана и Д. Ритчи «Языкпрограммы имеет смысл только программирования Си», перваятогда, когда она выводит какую- программа на любом языке про-либо информацию. граммирования должна выво- дить на экран приветствие миру: Программа на языке Pascal(тело программы) должна начи- Пример 14.1. Окно средынаться со слова begin, а закан- PascalABC с результатом рабо-чиваться словом end и точкой. ты программы:Программа, состоящая из этихкоманд, разделенных пробелом ÂÄÐÈÙϽÏили переводом строки, может ¯ÂÇÎÏÌÍËÀͽÉÉØ ͽ¾ËÏØÌÍËÀͽÉÉØбыть запущена на выполнение, ноона ничего не делает. Добавим внее команду вывода приветствия: begin write('Привет!'); end. Результат работы программыотражается в нижней части окнапрограммы PascalABC в окне вы-вода (пример 14.1). Команда write( ); предна- значена для вывода данных. Текст, который нужно вывестина экран, заключают в апострофы(одинарные кавычки). Этот текстне анализируется и выводится втом виде, в котором он записан.Текст можно записать на лю-бом языке. Текстом может бытьпроизвольный набор символов. В одной программе может бытьнесколько команд вывода. Для Правообладатель Народная асвета
90 Глава 3. Основные алгоритмические конструкции Пример 14.2. Текст програм- вывода текста, записанного в не-мы: сколько строк, используют ко- манду writeln( ). Сочетание «ln» begin (сокр. от англ. line — линия, стро- write('Привет! '); writeln('Я компьютер!!!'); ка), записанное в конце команды, write('Я умею выполнять '); writeln('программы!'); означает, что после вывода нужно write('Сегодня ты '); write('написал свою '); перевести курсор в новую строку. write('первую программу,'); writeln(' а я ее выполнил.'); Пример 14.2. Выведем на write('Сейчас на экране -'); экран компьютера следующий writeln(' результат этой текст: «Привет! Я компьютер!!! Я умею выполнять программы! программы.'); Сегодня ты написал свою пер- end. вую программу, а я ее вы- полнил. Сейчас на экране – Результат работы программы: результат этой программы». Используя сочетание команд write и writeln, текст можно расположить по-разному. Пример 14.3. Текст програм- Как вы уже знаете, текст в команде write( ), записанныймы: в кавычках, не анализируется. Если кавычки опустить, то про- begin изводится анализ данных, за- write('2+ 2*2='); писанных в скобках. Так, если write(2+ 2*2); в скобках написать арифметиче- end. Результат работы программы: ское выражение, то сначала вы- числяется его значение, а затем выводится результат. Две команды write в про- Пример 14.3. Посчитаем значе-грамме можно объединить в ние выражения 2 + 2 * 2.одну, отделив текст от выраже- Если записать выражение в кавычках, то будет выведенония запятой: само выражение. При отсутствии begin кавычек на экран будет выведено write('2+ 2*2=', 2+ 2*2); end. значение данного выражения.Правообладатель Народная асвета
§ 14. Язык программирования Паскаль 9114.2. Понятие типа данных До начала 1950-х гг. ХХ в. программисты ЭВМ при соз- На практике редко прихо- дании программ пользовалисьдится писать программы, кото- машинным кодом. Запись про-рые решают только одну задачу. граммы на машинном кодеОбычно программы пишутся для состояла из единиц и нулей.решения целого класса задач, ко- Машинный код принято счи-торые можно сформулировать в тать языком программирова-общем виде. ния первого поколения. Типы данных не использовались. С такими задачами вы ужесталкивались в курсе математи- Первым языком программи-ки. Например, решение задачи рования, в котором появилась«Найдите площадь прямоуголь- возможность создавать пере-ника» можно записать так: S = менные, считается Ассемблер.= a b, где переменные a и b обо- В этом языке вместо машин-значают соответственно длину ных кодов стали использоватьи ширину прямоугольника, а команды, записанные текстом.S — площадь. Зная эту формулу, Ассемблер относится к языкамможно найти площадь любого программирования второго по-прямоугольника. коления. В программировании для ре- В 1957 г. появился языкшения задач в общем виде так- Фортан, открывший эру язы-же используют переменные. По- ков программирования тре-скольку с такими переменными тьего поколения. Он позволилбудет работать компьютер, то они использовать разные числовыедолжны храниться в его памяти. типы данных, необходимые для сложных расчетов: целые, Информацию, представлен- вещественные (действитель- ную в пригодном для обработ- ные) и комплексные. ки на компьютере виде, назы- вают данными. Дальнейшее развитие языков программирования позволило Переменная в программи- добавить возможность работы ровании — это именованная с другими типами данных. Со- ячейка памяти, хранящая зна- временные языки программи- чение переменной. рования позволяют работать с большим количеством типов данных.Правообладатель Народная асвета
92 Глава 3. Основные алгоритмические конструкции В среде программирования Компьютер может обрабаты-PascalABC реализовано более вать данные разных типов: целые30 различных типов данных. и действительные числа, симво- лы, тексты и др. Тип данных определяет спо- соб хранения данных в памяти компьютера, диапазон возмож- ных значений данных и опе- рации, которые с этим типом данных можно выполнять. Пример 14.4. Примеры опи- Чтобы использовать какую-сания переменных: либо переменную, ее нужно опи- сать. Описание переменных вы- var x: real; полняется до начала программы var x1, y1: real; (команды begin) (пример 14.4). var a _ 1, a _ 2, a _ 3: real; При описании переменной выде- ляется память для хранения ее Диапазон возможных значе- значения. В процессе выполне-ний типа real задается числами ния программы значение пере-в стандартном представлении менной может изменяться.от –1.8 10308 до 1.8 10308. Наи-меньшее положительное число Для описания переменных ис-типа real приблизительно рав- пользуется команда var (сокр. отно 5.0 10–324. При вычислени- англ. variable — переменная).ях в числе хранится до 16 цифр. Формат записи команды: var <имя переменной>: <тип>; Для обозначения имени пере- менной используют буквы латин- ского алфавита, цифры и знак «_». Первым символом должна быть буква или знак подчеркивания. Тип данных real в языке Pascal позволяет работать с числами и выполнять над ними арифмети- ческие действия.Правообладатель Народная асвета
§ 14. Язык программирования Паскаль 9314.3. Оператор присваивания Пример 14.5. Примеры запи- Одной из основных команд для си оператора присваивания:обработки данных в программе x:= 7;является оператор присваивания. x1:= 3.5; a _ 1: = 20 * (x + x1) - 32; Оператор присваивания пред- y:= y + 7; назначен для того, чтобы: Пример 14.6. Запишем опера- задавать значения перемен- тор присваивания на Pascal для ным; математических выражений: вычислять значения ариф- Выражение Запись на Pascalметического выражения (ре-зультат вычисления будет запи- S = 2(a + b) S:= 2*(a + b);сан как значение переменной). S = a2 S:= a * a; a= x+y Формат записи оператора: a:= (x + y)/3; <имя переменной>= <выражение>; 3 (Рассмотрите пример 14.5.) Пример 14.7. Запишем опера- В записи арифметического вы- тор присваивания, после выпол- нения которого значение пере-ражения используются знаки ма- менной a увеличится в 2 раза, а переменной b уменьшитсятематических действий. на 3.Математические Запись В Pascal допустимы коман- операции в Pascal ды присваивания следующего вида: + (сложение) +– (вычитание) - a:= a * 2; (умножение) * Смысл такой команды сле- / дующий: из ячейки памяти из- (деление) влекается значение переменной a, затем оно умножается на 2, Приоритет выполнения опера- результат записывается в ту жеций соответствует принятому в ячейку памяти. Старое значе-математике: сначала выполняют- ние переменной a будет поте-ся умножение и деление, а затем ряно.сложение и вычитание. Для из- Запись оператора присваива-менения порядка действий в вы- ния для изменения значенияражениях используют скобки. переменной b следующая: b:= b − 3;Правообладатель Народная асвета
94 Глава 3. Основные алгоритмические конструкции В PascalABC.NET определе- Для записи обыкновенной дро-ны операторы присваивания со би используется знак деления.значками +=, –=, *=, /=. Они Знак умножения опускать нель-позволяют изменить значение зя. Целая часть дробного числапеременной. Например: отделяется от дробной части точ- кой. (Рассмотрите примеры 14.6 a *= 2; // увеличить a и 14.7 на с. 93.)в 2 раза; 14.4. Ввод данных b –= 3; // уменьшить bна 3. Начальные значения перемен- ным можно задавать не только Пример 14.8. Ввести два чис- с помощью оператора присваива-ла, найти и вывести их сумму. ния, но и путем ввода с клавиату- ры. В этом случае, если необходи- Текст программы: мы вычисления с новым набором var a, b, S: real; значений исходных данных, текст begin программы не нужно изменять. read(a, b); Команда read( ) предна- S:= a + b; значена для ввода данных. В writeln('a + b =', S); скобках через запятую пере- end. числяются имена переменных, Ввод данных: значения которых необходимо ввести.Результат: Ввод данных происходит в нижней части окна программы PascalABC. Для этого исполь- зуется окно «Ввод данных». По- сле нажатия кнопки «Ввести» или клавиши «Enter» введенные значения переносятся в окно вы- вода. После завершения работы программы в этом же окне будет выведен результат (пример 14.8). Правообладатель Народная асвета
§ 14. Язык программирования Паскаль 9514.5. Структура программы Пример 14.9. Программа, со- Все программы на языке про- держащая все разделы (подсчи-граммирования Pascal имеют об- тывается количество закрашен-щую структуру. В программе мож-но выделить следующие разделы: ных клеток в поле Робота раз- мером 10 10): заголовок (не обязателен); подключаемые библиотеки //заголовок программы(модули) (если подключать допол- //(необязательно)нительные библиотеки не нужно, program Primer;раздел отсутствует; известные //описание библиотекбиблиотеки: Drawman, Robot, uses Robot, RobTasks;RobTasks); //описание переменных описание переменных с ука- var k: integer;занием их типа; //описание вспомогательных описание вспомогательных //алгоритмовалгоритмов (если использовать procedure line;вспомогательные алгоритмы не beginнужно, раздел отсутствует); begin … end. — служебные for var i:= 1 to 9 doслова, обрамляющие тело основ- beginной программы, в которой на-ходятся исполняемые команды; if CellisPainted thenbegin начинает исполняемую k:= k + 1;часть программы, а end. (точка вконце обязательна) ее завершает. right; В минимально возможном набо- end;ре программа состоит из пустого if CellisPainted thenтела программы: begin end. Про-грамма, содержащая все разде- k:= k + 1;лы, представлена в примере 14.9. end; Для каждого раздела определе- procedure back;но ключевое служебное слово, кото- beginрым он начинается. При написаниипрограммы ключевые слова вы- for var i:= 1 to 9 do left;деляются полужирным шрифтом. end; //основная программа begin //тело программы Task('myrob11'); k:= 0; for var i:= 1 to 9 do begin line; back; down; end; line; writeln(k); end.Правообладатель Народная асвета
96 Глава 3. Основные алгоритмические конструкции? 1. Какая команда языка программирования Pascal предназначена для вывода данных? 2. Что определяет тип данных? 3. Для чего используется команда присваивания? 4. Какая команда языка программирования Pascal предназначена для ввода данных? 5. Из каких разделов состоит программа на языке программирова- ния Pascal?Упражнения Для программы из примера 14.2 выполните следующие задания(файл с программой можно скачать): 1. Замените все команды writeln на команды write и вы- полните программу. Что произошло? Объясните почему. 2. Как изменится результат работы программы, если в ис- ходном тексте заменить все команды write на writeln? 3. Измените программу так, чтобы текст на экране выглядел следующим образом: Привет! Я компьютер!!! Я умею выполнять программы! Ты сегодня написал свою первую программу!!! Я выполнил твою программу. Посмотри на экране ре- зультат! Внесите необходимые изменения в программу из примера 14.3, что-бы действия выполнялись в том порядке, в котором записаны, т. е. сна-чала сложение, а потом умножение. Вводится возраст пользователя в годах. Определите возраст поль-зователя через 5 лет. Напишите программу, в которой вводятся два числа a и b. Затемпервое число уменьшается в 2 раза, а второе увеличивается на 30. Вы-ведите измененные значения переменных.Напишите программу для вычисления значения числовых выражений:1. 23 + 45 11 – 15. 2. 37 +2 27 . 413. 5638 − 2347 + 123 756 . 49 4455Правообладатель Народная асвета
§ 15. Организация вычислений 97§ 15. Организация вычислений При решении любой задачи Пример 15.1. Решение задаччеловеку приходится выполнять по физике принято оформлятьследующие действия: определенным образом. определение исходных дан- Слева записывается то, чтоных (что дано в задаче); дано и что нужно получить, справа — последовательность определение результатов (что действий, приводящая к ре-нужно получить); шению задачи. Аналогично оформляются решения задач по обработка исходных данных химии, геометрии.в соответствии с известнымиправилами так, чтобы получить Этапы решения задачи по про-результат. граммированию можно пред- ставить следующим образом: Применяя указанные правилак решению задачи по програм- ª½Ô½ÈËмированию, получим следующиеэтапы решения задачи: «ÌÍÂÁÂÈÂÊÅÂÅÎÒËÁÊØÒÁ½ÊÊØÒ I. Определение исходных дан- «ÌÍÂÁÂÈÂÊÅÂÍÂÄÐÈÙϽÏË¿ных. ®ËÎϽ¿ÈÂÊŽÈÀËÍÅÏɽ II. Определение результатов. ÍÂÕÂÊÅÜĽÁ½ÔÅ II. Составление алгоритма ре-шения задачи. «ÌÍÂÁÂÈÂÊÅÂÏÅÌË¿Á½ÊÊØÒ IV. Определение типов данных ÁÈÜÌÂÍÂÉÂÊÊØÒдля переменных, используемыхпри реализации алгоритма. ª½ÌÅνÊÅÂÌÍËÀͽÉÉØ V. Написание программы. VI. Тестирование программы. ¯ÂÎÏÅÍË¿½ÊÅÂÌÍËÀͽÉÉØ VII. Анализ результатов. (Рассмотрите пример 15.1.) ʽÈÅÄÍÂÄÐÈÙϽÏË¿ Тестирование программы — §ËÊÂÓ проверка правильности работы программы при разных набо- рах исходных данных.Правообладатель Народная асвета
98 Глава 3. Основные алгоритмические конструкции Пример 15.2. 15.1. Вычисление значения V. Программа: var x, y, z, a: real; арифметического выражения begin Пример 15.2. Даны перемен- write('введите x = '); ные x, y, z. Напишем программу read(x); write('введите y = '); для вычисления значения выра- read(y); write('введите z = '); жения a = 2x + 3y − z . read(z); 3 + x2 a:=(2*x+ 3*y-z)/(3+ x*x); writeln('a = ',a); Этапы выполнения задания: end. VI. Тестирование программы. I. Определение исходных дан- Запустите программу и вве-дите значения: x = 2, y = 3, z = 1. ных: переменные x, y, z. Результат работы программыдолжен быть следующим: II. Определение результатов: переменная a. А для значений x = 2, y = 4,z = 2 получим: III. Алгоритм решения задачи: 1. Ввод исходных данных. 2. Вычисление значения выражения. 3. Вывод результата. IV. Описание переменных. Все переменные, определенные для решения задачи, имеют тип real. В приведенном примере перед каждой командой ввода записана команда вывода с пояснениями о том, значение какой переменной нужно вводить. При написании программ для вычисления значения арифмети- ческого выражения часто допу- скают следующие ошибки: VII. Проверка правильности 2x + 3; Пропущен знак *вычислений может быть вы- (x - 4)(x + 2); Пропущена скобка (2 + y)/(x * x ;полнена на калькуляторе. Будьте внимательны!Правообладатель Народная асвета
§ 15. Организация вычислений 9915.2. Использование языка Пример 15.3.программирования для решениязадач Пример 15.3. Напишем про- a S = a2грамму для решения геометри-ческой задачи. Задан квадрат P = 4aс длиной стороны a. Требуетсянайти его площадь и периметр. V. Программа: var a,S,P: real; Этапы выполнения задания: begin I. Определение исходных дан-ных: переменная а (длина сто- write('введите a = ');роны). read(a); II. Определение результатов: s:= a*a;переменные S (площадь) и P (пе- p:= 4*a;риметр). writeln('площадь = ',S); III. Алгоритм решения задачи: writeln('периметр = ',P); end. 1. Ввод исходных данных. VI. Тестирование программы. 2. Вычисление значений пло- Запустите программу и вве- щади в математике произво- дите значение a = 5.2. дится по формуле S = a2, а пе- Результат работы программы риметра — по формуле P = 4a. должен быть следующим: В программе этим формулам будут соответствовать коман- VII. Проверка правильности ды присваивания: S:= a * a; вычислений может быть вы- P:= 4 * a. полнена на калькуляторе. 3. Вывод результата. IV. Описание переменных: Все переменные, определенныедля решения задачи, имеют типreal. Обратите внимание: записьформул в операторе присваива-ния может отличаться от записиматематических формул.Правообладатель Народная асвета
100 Глава 3. Основные алгоритмические конструкцииПример 15.4. Пример 15.4. Напишем про- грамму для решения физической задачи. Расстояние между двумя городами составляет s км. Само- лет пролетает это расстояние за t ч. Определите скорость самолета.t Ô Этапы выполнения задания:ȣ – ? I. Определение исходных дан-s ÇÉ ных: переменные s (расстояние) и t (время). V. Программа: II. Определение результатов: var s, t, v: real; переменная v (скорость). begin III. Алгоритм решения задачи: write('введите s = '); 1. Ввод исходных данных. read(s); 2. Согласно формуле рас- write('введите t = '); read(t); стояния: s = vt. Отсюда выра- v:= s / t; зим v: v = s . writeln('скорость = ', v); end. t 3. Вывод результата. VI. Тестирование программы. IV. Описание переменных: Все переменные, определенные Запустите программу и вве- для решения задачи, имеют типдите значения s = 3550 и t = 4. real. При написании программ об- Результат работы программы ращайте внимание на формати-должен быть следующим: рование их текста: в первой позиции на экране пишут только слова var, begin end, а остальные со сдвигом на 2—4 позиции вправо; если в программе несколько частей, то их можно отделить VII. Проверка правильности друг от друга пустой строкой.вычислений может быть вы- Выполнение этих правил по-полнена на калькуляторе. вышает читаемость программы.Правообладатель Народная асвета
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176