Kcenterxhlxsmal Ixa href=http ;//lib.ru/>Lib.Ru : Библиотека Максима МошковакЬгхТопб size=-2>npM поддержке Федерального агентства по печати и массовым коммуникациям . noMCK: KiNIPUT TYPE=text NAHE=query size=9xinput type=hidden name=groupl value=si tesxi nput type=submit va 1 ue=searchx/font>npo3a nepeBOAbi Поэзияа> Фaнтacтикa fleTeKTMBb! HcTopnfl И ДР. >>> [HOBHHKH] [). Заглавные и строчные буквы при написании тегов не различаются. Существуют два типа тегов — парные и непарные. Парные теги можно сравнить со скобками алгебраического выражения. Парные теги характеризуют текст с того места, где употреблен открывающий тег пары, до того места, где находится закрывающий тег, указывающий на окончание его действия, — такой же тег, но начинающийся с наклонной черты — символа /. Теги делятся на категории по выполняемым ими функциям — структурные теги (табл. 6.1), теги символов (табл. 6.2), теги форматирования абзацев (табл. 6.3), теги оформления списков (табл. 6.4) и др. Тема 6.4 . Язык разметки гипертекста HTML 227 Таблица 6.1. Структурные теги Название тега Комментарий Ter, указывающий браузеру, что далее следует HTML-файл. Этот тег как бы обрамляет документ — весь текст должен находиться внутри этого тега. Далее надо разбить документ на две части — заголовок и собственно текст Внутри этого тега будет находиться информация о документе, состоящая из нескольких частей Внутри этого тега содержится информация, которая будет отображена в области просмотра браузера. Этот тег может иметь несколько параметров, описывающих цвет фона окна просмотра, рисунок в нем, цвет текста и т. п. Таблица 6.2. Виды форматирования символов на веб-странице Название тега Комментарий <В> В> Слово, заключенное в этот тег, будет отображено жирным шрифтом <1> !> Слово, заключенное в этот тег, будет отображено курсивом <и> и> Слово, заключенное в этот тег, будет отображено подчеркнутым шрифтом Таблица б.З. Теги управления внешним видом веб-страницы Название тега Комментарий <Р> Тег «параграф», отделяет абзацы друг от друга, ставится в конце абзаца. В соответствии с международным стандартом абзацы разделяются пустыми строками и не начинаются с красной строки
Следующее за этим тегом содержание HTML-файла будет просто начинаться с новой строки
Этот тег указывает на то, что браузер должен отобразить горизонтальную линию, идущую через весь экран. Он может иметь несколько параметров, задающих ширину и цвет линиис помощью этого тега вставляется предварительно отформатированный текст <Н1> Н1> Тег, определяющий заголовок документа. После буквы Н указывается уровень заголовка — от 1 до 5. Чем меньше цифра, тем больше шрифт, отображающий заголовок 228 Раздел 6. Коммуникации в глобальной сети Интернет Таблица 6.4. Теги оформления списков данных на веб-странице Название тега КомментарийЭтот тег служит для представления абзаца — элемента списка <0L> 0L> Этот тег служит для представления информации в виде упорядоченного списка, абзацы которого последовательно нумеруются. Каждый абзац списка помечается тегом <Ы> Этот тег отображает неупорядоченный (маркированный) список в виде последовательности помеченных элементов. Каждый абзац списка помечается тегом <Ы>
Тег для вывода списка определений или словаря терминов. Каждый элемент такого списка состоит из двух частей — термина и его определения. Термин предваряется тегом
, а определение тегом Средства создания HTML-файлов Существует множество программных продуктов, с помощью которых создают HTML-файлы. Все они делятся на три категории: ♦ редакторы; ♦ шаблоны; ♦ программы-преобразователи. Использование шаблонов и программ-преобразователей позволяет пользователю не иметь представления о том, что такое теги. Однако язык HTML постоянно развивается и обогащается все новыми возможностями. Соответствующие изменения в программные продукты вносятся намного реже и не в полном объеме. Уже имея начальные знания о тегах, вы сможете постоянно расширять и углублять их, изучая и анализируя понравившиеся веб-страницы. Таким образом, сначала необходимо научиться пользоваться редакторами для создания HTML-файлов, а затем, имея базовые знания, использовать шаблоны и преобразователи. Существует много редакторов для составления веб-документов. Наиболее известными являются HTML Writer, HTML Assistant, WebEdit, HomeSite. Тема 6.4*. Язык разметки гипертекста HTML 229 Задание 6.13 Ознакомьтесь со средой HTML-редактора HomeSite и научитесь использовать описанные выше теги для создания веб-страниц. Для выполнения этого задания необходимо, чтобы на компьютере была установлена бесплатно распространяемая программа HomeSite. Ее можно легко найти в Интернете с помощью поисковых систем или, например, на сайте www.design.rsu.ru/club/software.shtml. Технология работы 1. Для выполнения задания подготовьте рабочий стол Windows: запустите приложения HomeSite и Internet Explorer. С помощью приложения HomeSite вы будете создавать страницу, а с помощью браузера Internet Explorer — просматривать ее. 2. Познакомьтесь с главным окном приложения HomeSite (рис. 6.11). Активизируйте панель QuickTab. 3. Начните редактирование веб-страницы с создания HTML-файла: • с помощью команды меню File ► New (Файл ► Новый) или кнопки на панели инструментов New (Новый) создайте бланк нового документа (рис. 6.12); • воспользуйтесь командой меню File ► Save as и задайте имя файла, например probal.htm, поместив его в предназначенном для этого каталоге. Структура HTML-файла описывается с помощью тегов, перечисленных в табл. 6.1. Кнопка New Панель Тег QuickTab Title Кнопка QuickAnckor Кнопка QuickStart Кнопка Quickimage Рис. 6.11. Главное окно HTML-редактора HomeSite 230 Раздел 6, Коммуникации в глобальной сети Интернет Для определения структуры HTML-файла щелкните на кнопке QuickStart (Быстрый старт) (рис. 6.11). На экране появится диалоговое окно, в котором можно не делать никаких изменений и принять установленные по умолчанию цвета. В результате все структурные теги будут внесены в текст файла (рис. 6.12). Сохраните изменения, сделанные в файле. Рис. 6.12. Основные структурные теги HTML-файла 5. Заголовок HTML-файла можно было сделать сразу, в окне QuickStart, но можно это сделать и позже. Для этого необходимо использовать тег . Щелкните мышью внутри тега и воспользуйтесь кнопкой Ttl (см. рис. 6.11). Наберите заголовок. Это не заголовок веб-страницы, а заголовок HTML-файла. Конечно, они должны совпадать по смыслу, однако для того чтобы содержание тега <Н2>Мир и MHTepHeT <Ь><1>Система.1х/Ь> Что есть система? <Ьх1>Система1х/Ь> -это некоторое множество <1>элементов1>, находящихся в отношениях и связях друг с другом, но при этом образующих определенную целостность, единство.1хНЯ> 232 Раздел 6. Коммуникации в глобальной сети Интернет <Ьх1>Наш мир.1х/Ь> Мир, в котором мы живем, - представляет ли он собой <Ьх1>систему?1х/Ь> Каждый из нас, читающих эти строки, думает о своем. Для кого-то такой <Ьх1>мир1х/Ь> - это его семья. Каждый член этой семьи - это элемент множества, и все вместе они образуют собой целостность, потому что умеют понимать, договариваться друг с дру-roM. Может быть, мир, который представляет собой систему, - это наш город? Элементы такого множества разнородны - это и отдельные горожане, и целые семьи, и более крупные общности людей, но систему они представляют собой потому, что образуют определенную целостность - <1>умеют понимать и договариваться друг с другом1>. Как было бы прекрасно, если бы люди разных стран, регионов, национальностей, <1>умели понимать и договариваться друг с другом1>! Тогда весь наш мир - наша <Ьх1>планета Земля1х/Ь> - представлял бы собой <Ьх1>систему1х/Ь>. 9. Посмотрите, как отображается созданный вами файл в браузере (рис. 6.14). World on'd П» Intor.». - U,cro.oB Inlerno. E.plor.r ‘ Йайл dpaeiM Вид; И?6ра^в Си»ис О^авка фнамд - © ^ >1^®/5Поиск Ф 0» Й Адресу т Е: \Практикум\ргоЬа2. ht ml и v1 Поре! од Мир и Интернет Систелгэ. Что есть система? Система ■ это некоторое множество элементов, находящихся в отношениях и связях друг с другом, но при этом образующих определенную целостность, единство. Наш мир. Мир, в котором мы живем, - представляет ли он собой систему? Каждый из нас, читающих эти строки, думает о своем. Для кого-то такой мир - это его семья. Каждый член этой семьи - это элемент множества, и все вместе они образуют собой целостность, потому что умеют понимать, договариваться друг с другом. Может быть, мир, который представляет собой систему, - это наш город? Элементы такого множества разнородны - это и отдельные горожане, и целые семьи, и более крупные общности людей, но систему они представляют собой потому, что образуют определенную целостность - умеют понимать и договариваться друг с другом. Как было бы прекрасно, если бы люди разных стран, регионов, национальностей, умели понимать и договариваться друг с другом\ Тогда весь наш мир - наша ппанета Земля - представлял бы собой систему. 3 г отово 8 «ей компьютер Рис. 6.14. Созданная веб-страница Тема 6.4 . Язык разметки гипертекста HTML 233 Задания для самостоятельной работы Задание 6.14. Создайте веб-страницу о любимых улицах вашего города. Задание 6.15. Создайте веб-страницу о своих друзьях и о себе. Задание 6.16. Создайте веб-страницу на тему из области фантастики. Задание 6.17. Создайте веб-страницу на свободную тему. Тема 6.5 Веб-страница с графическими объектами к графическим объектам относится все, что нельзя назвать текстом: отсканированные фотографии и рисунки, изображения, созданные на компьютере, и т. п. Иллюстрации делают привлекательной любую веб-страницу. Тег, описывающий графический файл на веб-странице, выглядит следующим образом: Имя файла заключается в кавычки. Для оформления веб-страницы необходимо сначала подготовить графический файл в любом редакторе или отсканировать изображение, а затем перевести его в формат, удобный для передачи по сети. Графическая информация не сохраняется непосредственно в HTML-файле. Рисунки и фотографии хранятся каждый в своем файле и передаются на компьютер пользователя по отдельному запросу браузера. Для пересылки по компьютерным сетям используются специально предусмотренные форматы графических файлов. Формат GIF (от англ. Graphics Interchange Format — формат взаимообмена графикой) был разработан компанией CompuServe Incorporation для пересылки графических файлов по сети. Файлы с графикой в этом формате имеют расширение .gif. Этот формат идеально подходит для монохромных, 16-цветных, а также 256-цветных рисунков, не содержащих большого количества мелких деталей. Формат JPEG был разработан для хранения и отображения фотографий объединенной группой экспертов по фотографии. Файлы с графикой в этом формате имеют расширение .jpg или .jpeg. Задание 6.18^ Разместите на веб-странице графическое изображение (рисунок). Тема 6.5'. Веб-араница с графическими объектами 235 Рис. 6.15. Рисунок в формате BMP Для выполнения этого задания кроме редактора HTML и браузера нужен любой графический редактор, с помощью которого будет подготовлена графическая иллюстрация. Затем, преобразовав графический объект в формат, допустимый для компьютерных сетей, и пользуясь соответствующими экранными кнопками, вы вставите иллюстрацию в свою веб-страницу. Технология работы 1. Подготовьте иллюстрацию в графическом редакторе, например Paint Shop Pro (рис. 6.15), и сохраните его в формате GIF или JPEG либо найдите готовый рисунок в одном из указанных форматов. В нашем примере создан лягушонок, поэтому рисунок имеет имя frogl.bmp, а после преобразования, соответственно, — frogl.gif. 2. Подготовьте рабочий стол: запустите редактор HTML и браузер. 3. Поместите подготовленный графический файл на веб-страницу. Для этого создайте в HomeSite новый HTML-файл или используйте подготовленный заранее файл с текстом. Щелкните мышью в любом месте внутри тега и нажмите кнопку Quickimage (см. рис. 6.11). 4. В открывшемся окне (рис. 6.16) заполните поля. Обязательным для заполнения является поле Source, в котором указывается имя подготовленного графического файла. Нажмите кнопку ОК, чтобы подтвердить вставку рисунка. HTML-файл примет вид, показанный на рис. 6.17. 5. Сохраните измененный HTML-файл. 6. Посмотрите, как теперь выглядит HTML-файл в браузере. Задания для самостоятельной работы* Задание 6.19. Отсканируйте или найдите в Интернете фотографию улицы вашего города и вставьте ее в подготовленную ранее веб-страницу. Задание 6.20. Вставьте графические иллюстрации в созданные ранее веб-страницы. 236 Раздел 6. Коммуникации в глобальной сети Интернет ■ -.а Nnage-T«e [Advarto«di lourcft |Е ^ПрактикумУгод! grf <*.1вй [Пяг1^шсмокв($абочк.в ЦяМар I И«Н [тГ" Цапм (эГ" HS(M« j VSp»»r~ B«tte fTjj #gn j 3 r fSMAP B«rt:See [ TWa JO. S|£ie: |v Quote tfauribufe» Ciee, I r* Slni^ QiX^M on «№bute$ QK Рис. 6.16. Окно Image c заполненными полями iiiil CDOCTYPE HTBL PUBLIC "-//Bacz/DTO HTHl Л.0 Transicional//nr>отображалось на любом компьютере, необходимо написать его латинскими буквами, например на английском языке. В нашем примере файл называется The Internet is the model of our World (рис. 6.13). Сохраните сделанные в файле изменения. Тема 6.4*. Язык разметки гипертекста HTML 231 Файл ijiaasa giw ;йз6р»<нов Cspe*«: ^.правка; О НазадQ ' Н ® ^ i РПоиск '^Иабрвнное ^ ’ Адрес]. E:\npaKTHKyM\probal.html за Переход @ Готово S Мойкоигьгатер Рис. 6.13. Добавление тега — названия HTML-файла 6. Просмотрите созданную страницу в браузере. Для этого в Internet Explorer в меню Файл выберите пункт Открыть, нажмите кнопку Обзор, перейдите в каталог, где сохранен только что созданный файл, и щелкните мышью на его имени. 7. Научитесь форматировать и оформлять текст веб-страницы. Для этого используйте кнопки Fonts (Шрифты) и Lists (Списки) на панели QuickTab. Эти кнопки позволят вам быстро использовать теги, приведенные в табл. 6.2-6.4. 8. Изучите содержание и теги приведенного ниже текстового файла и продолжите редактирование файла probal.htm. Можно придумать свой текст. The World and The Internet Untitled Рис. 6.17. HTML-файл с включением графического файла frogl.gif Тема 6.6* Веб-страница с гиперссылками Выполнив задания этой темы, вы научитесь: III* вставлять гиперссылки в веб-страницу. Гиперссылки делают информационную систему World Wide Web распределенной и тем самым отличают ее от любой другой гипертекстовой информации. Для вставки в веб-страницу гиперссылки используется тег <А>: <А HREF= "имя файла">текст гиперссылкиА> Слова текст гиперссылки являются так называемым якорем этой гиперссылки. Эти слова при просмотре HTML-страницы в браузере будут выделены цветом и подчеркиванием. Вместо слов имя файла в кавычках может быть написано имя файла, находящегося в этой же папке, или может быть указан полный путь к файлу, находящемуся на этом же или на другом компьютере. Рисунок также может быть оформлен как гиперссылка. Задание 6.21 Разместите на веб-странице гиперссылку. Выполняя это задание, вы научитесь использовать кнопку редактора HTML для вставки гиперссылки на веб-страницу. Технология работы 1. Подготовьте рабочий стол: запустите и расположите на рабочем столе редактор HTML и браузер. 2. С помощью кнопки QuickStart (см. рис. 6.11) создайте структуру нового HTML-файла и задайте его имя. 3. Щелкните на кнопке QuickAnckor (см. рис. 6.11) для вставки гиперссылки на веб-страницу. 4. В открывшемся окне (рис. 6.18) в первом поле введите следующий URL: https://www.ict.nsc.ru/rus/docs/html-gd. Остальные поля можно не заполнять. 5. Обратите внимание на мигающий курсор и введите фразу Краткое руководство по HTML. Слова Краткое руководство 238 Раздел б. Коммуникации в глобальной сети Интернет по HTML связывают данную веб-страницу с другой страницей, находящейся на другом компьютере. 6. Сохраните файл и просмотрите результат в браузере. Щелкните мышью на сделанной вами гиперссылке и перейдите на веб-страницу, размещенную на другом компьютере (рис. 6.19). ■WtdiuiF-A - ; ■; . jhttps://www.ict.nsc.ru/[us/docs/htmJ-gd jd 1^1 Д1ЙЭ| I*sei 1 В bam ! ■ ■■■■ ТЩе 1, 10: j ^ • g«* 1 Sliih 1 м I^etcnphon. ок Cancel Рис. 6.18. Окно Anchor с заполненным полем гиперссылки rVci £аил . gHA ^^gpwHoe 0Намд О " ti ' Р Поиск.; IV Избранное ^ Адрес: 1*^1 https://www.ict.nsc,ru/riJs/bocs(html-gd/ Ва Краткое руководство по HTML 3.2 Содержание WWW Структура Команды Разметка Таблицы Списки Гипеассыдки URL МЕТА Ивета Шрифты Содержание Содержание WWW •• Есемирная паутина Структура -и стиль документа HTML Форматирование документа -• ра.зметка Фо;шатирование дсп умента - Cihclu Гиректосылк.и 0 1^арнет^ Рис. 6.19. Полезная для вас информация на другом компьютере Тема 6.6'. Веб-страница с гиперссылками 239 8, Повторите пп. 3 и 4 этого задания, введя в открывшемся окне https://www.darsbydesign.com/index.html. Обратите внимание, где мигает курсор, и щелкните на кнопке Quickimage. Задайте имя созданного ранее графического файла frogl.gif и щелкните на кнопке ОК. В результате этих действий якорем гиперссылки будет являться рисунок. Текст HTML-файла показан на рис. 6.20. Сохраните и просмотрите в браузере созданный HTML-файл. Перейдите по сделанной гиперссылке. Е* |B(owm| Dw^I Uncitled : Рис. 6.20. Текст HTML-файла с гиперссылкой, якорем которой служит рисунок Задания для самостоятельной работы'^ Задание 6.22. Найдите с помощью поисковой системы веб-страницу с информацией о своем городе. Подберите слово или фразу, которая могла бы служить якорем для гиперссылки на эту страницу, и создайте гиперссылку на нее на созданной ранее вебстранице о своем городе. Задание 6.23. Создайте файл, в котором рассказывается, например, о вашем любимом занятии. Сделайте гиперссылку на этот файл с созданной ранее веб-страницы, где вы рассказываете о себе или о своих друзьях. Задание 6.24. Разместите гиперссылки на созданной ранее вебстранице с текстом на свободную или фантастическую тему. Тема 6.7 Возможности электронной почты Выполнив задания этой темы, вы научитесь: III#- создавать, отправлять и принимать электронные сообщения; |||Ф присоединять к электронному сообщению файлы. Электронная почта, или e-mail (от англ, electronic mail), — это самый распространенный вид сетевой коммуникации. Каждый пользователь электронной почты имеет собственный электронный почтовый адрес. Он получает e-mail в той компьютерной системе, в которой регистрируется. Можно зарегистрироваться в нескольких системах и иметь сразу несколько электронных адресов. В сети Интернет электронные адреса пользователей состоят из двух частей, разделенных символом @. Перед символом @ указывается имя пользователя, а после него — доменное имя почтового сервера, например: [email protected]. Электронное письмо представляет собой обычный текст с подготовленным специальным образом заголовком, в котором содержится основная информация о письме (рис. 6.21). По электронной почте можно пересылать не только текстовые сообщения, но и файлы любых форматов: документы, графику, программы и др. Для использования возможностей электронной почты необходима специальная программа. Одной из наиболее удобных почтовых программ является Outlook Express — приложение, поставляемое вместе с операционной систе- ” ________ _ мой Windows. Рис. 6.21. Заголовок электронного письма Qj^tjjjll flofipoi^ i Г Заголовки Интернета для данного сообщения: ;Received-SPF: pass (mx16.mail.ru: domain of gmail.com designates 64.233.16(^ i DomainKey-Signatue: a«tsa-sha1; q^dns; c>°nofws; $«bete; d>gmail.com; h«received:me$sage-id:date:from:lo:$ubiect:mirne*ve(sion;corUenl-type:cc b*UppSGd7l2Ef5BVnSilMwvUt+nyvv5l6MmMou7to34DP8QV9auRqQG : Me$$age-ID: i Date: Sun, 25 Dec 2005 02:50:41 -0800 jFrom; -?K.OI8*R?B?68/MzMXL1MrXIEdfTWI$?« jTo: Jane iSubject; -?K0I8-R?Q?-F3-CF-DA-C4-C1-CE«C1_-F7-C1-DB-C1_»D5«D1 iMIME-Vefsion: 1.0 (Content-Type: text/plain; chaiset*KOI8-R Тема 6.7. Возможности электронной почты 241 Задание 6.25 Изучите основные функции программы электронной почты Outlook Express. Технология работы 1. Запустите приложение Outlook Express. 2. Познакомьтесь с главным окном Outlook Express (рис. 6.22). Пользуясь стандартными возможностями Windows-приложений, настройте главное окно. ; Файл Правка §ид Сервис ' Сообщение ^ р1равка ■ / ) S** ’ в»* Ответить Ответить всен Перестать X . GSi ДР^тавить почту '• .v' р1 Папки Outlook Express Локальные папки ^ ^ Входшие:: I ^ Исходящие I ^ Отправленные i @ Удаленные i ^ Черновики '?\ От [email protected] [email protected] 0 Коллектив Gmail 0 Коллектив Gmail Тема Отгрузка Вашего заказа 02777766-022... Заказ N 02317766*0001 принят в интер... Подтверждение Gmail - отправьте со... Создана Ваша учетная запись служб».. I Поздравляем с созданием новой учетной записи Gmail \0i i Сохраните это сообщение, так как оно содержит важный код верификС I Код верификации может понадобиться, если возникнут проблемы или забудете пароль. .11*. 4, не Прочитано; О S Работа в 1:етц Рис. 6.22. Главное окно приложения Outlook Express 3. Создайте новое сообщение. Для этого щелкните мышью на кнопке Создать сообщение на панели инструментов (рис. 6.22). 4. Заполните поля в открывшемся окне (рис. 6.23). Обязательным для заполнения является поле Кому, содержащее адрес получателя. Если остальные поля останутся пустыми, то будет отправлено так называемое пустое письмо. 242 Раздел 6. Коммуникации в глобальной сети Интернет Файл Ойвка;? Й1Д :: Вставка Форват Сервис Сообщение Справка ■ аотправить ! X й О *0 ; S' ^ I *! -'ч а А От ev'a. [email protected] ffljKoWi I ........................ ' ^ [[^ Копия: I ....... .............. .......... Тема; 3 Рис. 6.23. Окно создания электронного сообщения В поле Тема указывается тема письма (о чем оно), а в рабочем поле записывается собственно текст письма. В поле Копия указывается адрес электронной почты, по которому должна быть направлена копия письма. 5. Отправьте письмо щелчком на кнопке Отправить. Письмо переместится в специальную папку Исходящие (см. рис. 6.22) и во время ближайшего сеанса связи будет отправлено получателю. 6. Научитесь работать с полученной почтой: читать сообщения, отвечать на них, удалять ненужные и перемещать в другие папки для хранения. • Для получения почты необходимо установить соединение с почтовым сервером и щелкнуть мышью на кнопке Доставить почту. Все настройки соединения уже подготовлены системным администратором. • Для прочтения письма щелкните мышью на папке Входящие (см. рис. 6.22), а затем — на заголовке письма в списке сообщений. 7. Создайте новое сообщение и присоедините к письму файл. Для этого воспользуйтесь кнопкой Вложить файл в сообщение. В открывшемся окне выберите папку, в котором лежит нужный файл, выделите его и щелкните на кнопке Вложить. Тема 6.7. Зо.зможности эг^ектроиной почть! 243 8. Переместите электронное письмо в другую папку: • найдите сообщение, которое надо переместить, в списке сообщений и щелкните на нем правой кнопкой мыши; 0 в появившемся контекстном меню выберите команду Переместить в папку или Копировать в папку; в в открывшемся диалоговом окне выберите нужную папку (или создайте новую) и щелкните на кнопке ОК. 9. Познакомьтесь с другими возможностями, предоставляемыми контекстным меню. Задания для самостоятельной работы Задание 6.26. Создайте и отправьте письмо с указанием адреса веб-сайта или адреса e-mail. Задание 6.27. Создайте рисунок в графическом редакторе и заархивируйте его. Напишите письмо в текстовом редакторе. Создайте сообщение без текста, присоедините к нему оба файла и отправьте его. Часть 2 Основы алгоритмизации и программирования Раздел 7 Программирование в среде ЛОГО Раздел 8 Основы алгоритмизации РАЗДЕЛ 7 Программирование в среде ЛОГО Тема 7.1 Знакомство с основным инструментарием среды . . 246 Тема 7.2 Понятие программы . 255 Тема 7.3 Последовательный алгоритм . 263 Тема 7.4 Циклический алгоритм . 267 Тема 7.5 Процедура и модуль . 275 Тема 7.6 Процедура с параметрами . 282 Тема 7.7 Переменная в алгоритме . 290 Тема 7.8 Логика в среде программирования .... . 293 I Примеры и задания записаны на русском ЛОГО среды ЛогоМиры 2 (https://www.int-edu.ru/logo). Они также действуют в средах Logo-Writer и MSWLogo. Краткий словарь языка ЛОГО для разных сред приведен в приложении. Тема 7.1 Знакомство с основным инструментарием среды Выполнив задания этой темы, вы научитесь: И11«. вводить команды на языке ЛОГО; т#- измерять и изменять значения параметров объекта; :,11» производить вычисления. Интерфейс среды программирования Каждая программа для компьютера разрабатывается на одном из специальных языков — языков программирования. В этом разделе вы познакомитесь с языком ЛОГО. Название ЛОГО образовано от древнегреческого слова logos, которое означает мысль, слово. Основу ЛОГО, как и любого другого языка, составляет алфавит. Алфавит ЛОГО включает буквы — русские (кириллица) и английские (латиница), цифры и другие символы, имеющиеся на клавиатуре. Алфавит используется для образования слов. В любом языке программирования есть специальные встроенные слова, значение которых определено заранее. Из этих слов составляются предложения, которые называют командами. Команда — это предложение на языке программирования для указания действия объекту. Правило записи команды; на первом месте пишется название команды, а затем указываются ее параметры. Параметр команды — это слово, число или выражение, уточняющее действие команды. Интерфейс программной среды ЛОГО состоит из трех окон: рабочего поля, командного центра {поля команд) и листа программ. После загрузки приложения ЛОГО на экране появляются два окна — командный центр и рабочее поле. На рабочем поле отображаются графический исполнитель в виде Черепашки и результаты его действий. Черепашка может перемещаться по рабочему полю в разных направлениях и рисовать. Тема 7.1. Знакомство с основным инструментарием средь! 247 Договоримся называть верхнюю границу рабочего поля Севером, нижнюю границу — Югом, правую — Востоком, а левую — Западом. Обычно после загрузки нового листа Черепашка находится в центре рабочего поля, и голова ее направлена на Север. Командный центр служит для ввода команд Черепашке на языке ЛОГО. Команды графического шспопншепя Черепашка является исполнителем для создания графических объектов на рабочем поле. Посмотрите внимательно команды языка ЛОГО для управления Черепашкой (табл. 7.1). Для некоторых команд принята краткая форма. I По правилгим оформления и результату действия команда в краткой форме записи ничем не отличается от команды в полной форме. Расстояние на рабочем поле измеряется в шагах Черепашки. Один шаг равен одному пикселу. Угол поворота головы Черепашки измеряется в градусах. Задание 7,1 Установите Черепашку в центр командой домой. Введите команду по. Используя команду вперед, передвиньте Черепашку до верхней границы рабочего поля. Подсчитайте, сколько шагов прошла Черепашка. С помои^ью команды назад передвиньте Черепашку до нижней границы рабочего поля. Подсчитайте количество пройденных Черепашкой шагов. Верните Черепашку в центр поля командой домой. После этих действий на экране появилась вертикальная линия, разделяющая рабочее поле на правую и левую равные части. I Обратите внимание; один шаг Черепашки равен одному пикселу. Команды домой, по, пп, сотри состоят только из названия, а команды вперед и назад требуют указания параметра — количества шагов. Если в команде, требующей параметра, не указать его, то в командном центре появится сообщение об ошибке. 248 Раздел 7. Программирование в среде ЛОГО Таблица 7.1. Графические команды Название команды и краткая форма Параметр Действие исполнителя вперед, вп ЧИСЛО шагов Продвигается в направлении головы на указанное число шагов назад, нд число шагов Продвигается в направлении, противоположном направлению головы, на указанное число шагов НОВ_Х число шагов от оси X Перемещается по горизонтали в точку с указанной координатой по оси X (абсциссой) нов_у число шагов от оси Y Перемещается по вертикали в точку с указанной координатой по оси У (ординатой) сотри нет Стирает рисунок, состояние Черепашки сохраняется домой нет Устанавливается в центр рабочего поля, голова направлена на Север пп нет Поднимает перо по номер цвета Опускает перо нов_цвет, нц номер цвета Принимает цвет с указанным номером нов_фон, нф нет Рабочее поле принимает цвет с указанным номером сч нет Становится невидимым пч число градусов Становится видимым направо, пр число градусов Поворачивается направо относительно направления, заданного головой черепашки налево, лв число градусов Поворачивается налево относительно направления, заданного головой черепашки нов_курс, НК число градусов Поворачивается по часовой стрелке относительно Севера Тема 7.1. Знакомство с основным инструментарием среды 249 I Запомните правила записи команд: IZI Правило точного названия. Название команды должно быть записано без ошибок — точно как в словаре. 0 Правило одного слова. Между буквами в названии команды не должно быть пробелов. 0 Правило пробела. Если в команде есть параметр, то он отделяется от названия пробелом. Если в одной строке записывается несколько команд, то они разделяются пробелами. Задание 7.2 Используя команду нов_х, определите расстояние от центра до границ видимого рабочего поля по горизонтали. При выполнении заданий 7.1 и 7.2 Черепашка переметцалась по рабочему полю, но направление ее головы не изменялось. Задание 7.3 Введите команды, каждую на своей строке: направо 30 налево 30 нов_курс 90 Черепашка сначала поворачивается направо, затем — налево. После выполнения последней команды голова Черепашки смотрит на Восток. Обратите внимание на то, что центр Черепашки не меняет свое положение на рабочем поле. f Вспомните, что такое угол и как он измеряется. Что такое прямой угол, р£1звернутый угол, полный угол? Задание 7.4 Верните Черепашку «домой». Наберите в командном центре приведенную ниже последовательность команд (по три в каждой строке). Команды отделите друг от друга пробелом. Какая фигура появилась на рабочем поле? Где оказалась Черепашка? по вперед 50 направо 90 вперед 50 направо 90 вперед 50 направо 90 вперед 50 направо 90 домой 250 Раздел 7. Программирование в среде ЛОГО Вычисления на компьютере в среде программирования ЛОГО можно не только рисовать графические объекты, но и вычислять значения математических выражений. Математическое выражение используется как параметр в любой команде, где требуется число. Для изменения порядка вычислений в математическом выражении в языке ЛОГО, как и в математике, применяются круглые скобки. В среде ЛОГО допустимы целые и дробные числа. Дробная часть числа записывается в десятичном виде и отделяется от целой части точкой. Обозначения арифметических действий и некоторых математических операций в языке ЛОГО приведены в табл. 7.2. Таблица 7.2. Основные арифметические действия и математические функции Действие Обозначение в ЛОГО Пример записи Результат Сложение + 5 + 2 7 Вычитание - 25 - 10 15 Умножение * 25 * 12 300 Деление / 121 / 11 11 Получение случайного числа случайный (сл) сл 100 число в интервале от 0 до 99 Вычисление остатка от деления остаток остаток 100 16 4 Получение целой части числа целое целое 13,345 13 Получение числа с противоположным знаком минус минус 567 -567 Округление числа округли округли 256,56 257 Задание 7.5 Черепашка должна нарисовать отрезок длиной 150 шагов, а затем встать на середину этого отрезка. Запишите последовательность действий Черепашки. Тема 7.1. Знакомство с основным инструментарием среды 251 Введите команды: вп 150 нд 150 / 2 Черепашка окажется точно посередине нарисованного отрезка. Для вывода на экран результата вычисления или текстовых данных используются команды вывода текста (табл. 7.3). Таблица 7.3. Команды вывода на экран Название команды Результат исполнения ПИШИ Указанный текст или число выводится в текстовое окно на рабочем поле покажи Указанный текст или число выводится в командном центре Задание 7.6 Выведите в текстовом окне надпись: «Решение примера: 25 + 27» и результат вычисления указанной суммы. Введите команды: пиши [Решение примера: 25 + 27] пиши 25 + 27 Информационная модель среды ЛОГО в средах программирования суш;ествуют инструменты для измерения значений параметров объектов. В среде ЛОГО эти инструменты называются датчиками. После выполнения команды изменяется определенный параметр рабочего поля или Черепашки. По командам движения изменяется положение Черепашки на рабочем поле и может появиться линия — траектория ее движения. Команды управления пером изменяют положение пера. Команды установки цвета изменяют цвет фона рабочего поля или Черепашки, а команды поворота изменяют направление ее головы. С помощ;ью датчиков можно узнать значения всех этих параметров. Так как и Черепашка, и рабочее поле являются объектами, для них, как и для любого объекта, можно составить информационные модели (табл. 7.4 и 7.5). 252 Раздел 7. Программирование в среде ЛОГО Таблица 7.4. Информационная модель объекта «Черепашка» Параметр объекта Название датчика в ЛОГО Действие объ- Название Значения екта Положение на Рабочем поле [0 0], [100 125]... х_коор у_коор место Передвижение по рабочему полю Направление головы 0, 90, 270... курс Поворот Состояние пера ПОДНЯТО, опущено нет Изменение состояния пера Цвет 1, 15, голубой... цвет Изменение своего цвета Видимость видима, невидима нет Показать- ся/спрятаться Таблица 7.5. Информационная модель объекта «Рабочее поле» Параметр объекта Название дат-чика в ЛОГО Действие над объектом Название Значения Цвет фона 0, белый, 15... фон Изменение цвета фона Цвет поля под пером Черепашки 0, черный, 45... цвет_поля, ЦП Закрашивание фигур, ограниченных контуром Задания для самостоятельной работы Задание 7.7. Нарисуйте пунктирную тропинку, состоящую из трех отрезков длиной по 20 шагов каждый с расстояниями между ними тоже по 20 шагов. Перепишите команды из командного центра в тетрадь и нарисуйте полученную тропинку (допустим, что сторона одной тетрадной клетки — 10 шагов Черепашки). Задание 7.8. Наберите в одной строке командного центра указанные ниже команды: сотри по вп 50 пр 90 вп 50 пр 90 вп 50 пр 90 вп 50 домой Тема 7,1. Знакомство с основным инструментарием среды 253 Задание 7.9. Используя команды вперед и направо, установите Черепашку около самой границы рабочего поля в положения, показанные на рис. 7.1. Для каждого варианта ответьте на вопрос: где окажется Черепашка после выполнения команды по вп 100? Задание 7.10. Запишите в тетрадь последовательность команд для рисования фигур, изображенных на рис. 7.2. Рис. 7.1. К заданию 7.9 Рис. 7.2. К заданию 7.10 Задание 7.11. Какие графические объекты нарисует Черепашка, выполняя последовательности команд а), б), в), если перед их выполнением она смотрела на Север? Перепишите команды в тетрадь, используя сокращенную форму записи. Нарисуйте эти фигуры в тетради. а) по назад 40 направо 90 вперед 80 налево 90 вперед 40 направо 90 назад 80 налево 90 пп домой б) сотри по направо 90 вперед 40 налево 90 вперед 40 направо 90 вперед 40 пп до1уюй в) сотри по назад 100 направо 90 вперед 40 налево 90 вперед 100 назад 100 направо 90 вперед 10 направо 90 вперед 5 пп домой Задание 7.12. Придумайте другие последовательности команд, с помощью которых можно нарисовать фигуры, которые получились при выполнении задания 7.11. Задание 7.13. Черепашка находится в левом нижнем углу рабочего поля. Запишите последовательность команд, выполнив которые, она нарисует лабиринт (рис. 7.3). Рис. 7.3. К заданию 7.13 254 Раздел 7. Программирование в среде ЛОГО Рис. 7.4. К заданию 7.14 Задание 7.14. Какие команды должна выполнить Черепашка, чтобы на рабочем поле появились узоры, изображенные на рис. 7.4? (Будем считать, что одна клетка на рисунке равна 10 шагам Черепашки.) Задание 7.15. Вы знаете, что на почтовых конвертах необходимо указывать индекс получателя письма. Сортировку писем по почтовым индексам выполняют специальные машины. Они должны «узнавать» цифры. Поэтому для изображения этих цифр выработаны определенные правила. Вы видите их на рис. 7.5. Размеры отрезков указаны в шагах Черепашки. Каждая цифра изображается в прямоугольнике со сторонами 40 на 80 шагов. Будем считать, что перед рисованием цифры Черепашка находится в левом нижнем углу этого прямоугольника. Запишите в тетрадь последовательности команд, следуя которым. Черепашка могла бы нарисовать каждую цифру почтового индекса. Задание 7.16. С помош;ью команды покажи выведите значения следуюш;их дробей: 1/2; 1/5; 1/3; 1/6; 1/9. Сколько знаков десятичной дроби получилось в каждом случае? Задание 7.17. С помош;ью команды покажи выведите в командный центр значение суммы частного от деления числа 200 на число 8 и разности чисел 50 и 211. Задание 7.18. Установите Черепашке цвет с номером на 10 большим, чем текущий. Выведите в командный центр значения абсциссы и ординаты Черепашки в текущем положении. Задание 7.19. Используя команды нов_х и нов_у, переместите Черепашку по горизонтали и по вертикали на случайные расстояния. Введите в командный центр значения абсциссы и ординаты Черепашки в текущем положении. Задание 7.20. Опишите любым способом алгоритм вычисления площади прямоугольника. Рис. 7.5. Начертание цифр почтового индекса (к заданию 7,15) Тема 7.2 Понятие программы Выполнив задания этой темы, вы научитесь: разрабатывать алгоритм для исполнителя; '*■ записывать и редактировать текст алгоритма; li* оформлять алгоритм в виде программы; "*• выполнить программы, записанные на листе программ. Рассмотрим порядок разработки алгоритма и программы на примере создания графических объектов — цифр О и 1. Задание 7.21 Разработайте алгоритм рисования цифры О в соответствии с рис. 7.5. При выполнении задания рассмотрим три этапа создания алгоритма (см. учебник). Этап 1. Разработка приближенного варианта алгоритма Определим цель разработки алгоритма — создание графического объекта в виде прямоугольника высотой 80 шагов и шириной 40 шагов. Начальное положение — левая нижняя вершина. Составим для себя следующ;ий план действий: 1. Установить графический указатель в начальное положение. 2. Нарисовать прямоугольник, начав с левой нижней вершины. 3. Установить графический указатель в исходное положение. Этап 2. Разработка уточненного варианта алгоритма для среды Цифру о будет рисовать исполнитель Черепашка на рабочем поле. Поэтому следует уточнить разработанный на первом этапе алгоритм для этого исполнителя, используя действия, которые допустимы в среде ЛОГО: 1. Опустить перо. 2. Нарисовать левую сторону прямоугольника. 256 Раздел 7. Программирование в среде ЛОГО 3. Изменить направление движения — направо на 90°. 4. Нарисовать верхнюю сторону прямоугольника. 5. Изменить направление движения — направо на 90°. 6. Нарисовать правую сторону прямоугольника. 7. Изменить направление движения — направо на 90°. 8. Нарисовать нижнюю сторону прямоугольника. 9. Изменить направление движения — направо на 90°. Этап 3. Запись алгоритма на языке Исполнителя Чтобы исполнитель понял этот алгоритм, нужно записать его на понятном исполнителю языке; по вперед 80 направо 90 вперед 40 направо 90 вперед 80 направо 90 вперед 40 направо 90 После выполнения этих команд на рабочем поле будет нарисован прямоугольник, а Черепашка окажется в исходном положении. Такая последовательность команд для достижения поставленной цели будет алгоритмом на языке ЛОГО. Задание 7.22 Выполните более сложную задачу — нарисуйте цифру 1 в соответствии с рис. 7.5. Этот графический объект должен быть нарисован в прямоугольнике. Составьте алгоритм рисования по этапам так же, как это сделано в задании 7.21. Этап 1. Разработка приближенного варианта алгоритма 1. Выбрать начальное положение — середину левой стороны прямоугольника. 2. Установить Черепашку в начальное положение. 3. Соединить отрезком начальную точку и правую верхнюю вершину прямоугольника. 4. Нарисовать правую сторону прямоугольника. Тема 7.2. Понятие программы 257 Этапы 2 и 3. Разработка уточненного варианта алгоритма для среды. Запись алгоритма на языке исполнителя Уточним алгоритм для исполнителя, наметив промежз^гочные цели (подцели). Для этого разделим графический объект на фрагменты и составим алгоритм рисования каждого фрагмента на языке ЛОГО (табл. 7.6). Действия, перечисленные в первой графе табл. 7.6, уточняют разработанный на первом этапе алгоритм рисования цифры 1 для исполнителя — Черепашки. Во второй графе тот же алгоритм представлен в виде команд, которые можно ввести в командный центр и выполнить. Таблица 7.6. Алгоритм рисования цифры 1 Действия для достижения подцели Команды для Черепашки Значения параметров Черепашки и рабочего поля после выполнения команд Нарисовать первый фрагмент пп вп 40 пр 45 по вп 60 Черепашка в правом верхнем углу прямоугольника, голова повернута на 45° вправо относительно Севера. Нарисован первый фрагмент Нарисовать второй фрагмент пр 135 вп 80 Черепашка в правом нижнем углу прямоугольника, голова смотрит на Юг. Нарисована цифра 1 Вернуться в начальное положение пр 90 пп вп 40 пр 90 Черепашка в левом нижнем углу прямоугольника, голова смотрит на Север. Перо поднято. Нарисована цифра 1 258 Раздел 7. Программирование в среде ЛОГО I Обратите внимание! Целесообразно команды, которые нужны для достижения промежуточной цели, писать в одной строке. Тогда, сравнивая получившийся результат с намеченным, легко находить и исправлять ошибки. После окончания сеанса работы в среде ЛОГО информация в ко-МЕ1НДНОМ центре не сохраняется. На следующем сеансе для построения уже известных объектов придется снова набирать команды. В состав интерфейса среды ЛОГО входит лист программ. В этом окне вы набираете и редактируете текст алгоритма, записанный на языке исполнителя в виде последовательности команд. Переход на следующую строку осуществляется нажатием клавиши Enter. С помощью мыши можно выделить фрагмент текста или изменить положение курсора. Фрагмент текста можно перенести, используя промежуточную память {буфер), в другое место листа программ или в командный центр. Содержимое рабочего поля и листа программ сохраняется в файле. Если алгоритму, записанному на листе программ, дать имя, то этот алгоритм становится программой. Рассмотрим подробнее, как создавать программу. Сначала вы формируете цель, описывая параметры объекта и создавая информационную модель. Затем разрабатываете алгоритм его рисования по этапам. На первом этапе разрабатывается примерный алгоритм достижения поставленной цели. На втором этапе этот алгоритм детализируется с учетом среды его будущего выполнения. На третьем этапе алгоритм подвергается дальнейшему уточнению и полностью записывается на языке программирования с помощью команд. Полученной последовательности команд присваивают имя и записывают ее на листе программ. Теперь для выполнения составленного алгоритма достаточно обратиться к программе по ее имени. Любой алгоритм предназначен для решения определенной задачи. Каждый новый алгоритм, записанный на листе программ и получивший имя, становится программой. Таким образом пополняется набор инструментов исполнителя в среде ЛОГО. Во время подготовки текста программы в окне программ никакие действия на рабочем поле не выполняются. Тема 7.2. Понятие программы 259 Подготовив тексты программ, вы закрываете лист программ и переходите в командный центр. При этом проводится предварительная проверка текстов всех программ, расположенных на данном листе программ. При обнаружении ошибок появляется сообюцение в командном центре. I Если на листе программ выявлена хотя бы одна ошибка, то программы этого листа выполняться не будут. Программы создаются не только для описания графических объектов. В программе можно описать алгоритм для демонстрации мультфильма или реализации игры. При выполнении программы создается некоторая новая среда, в которой живут придуманные вами объекты. Программирование позволяет строить с помош;ью компьютера фантастические виртуальные миры и действовать в них в соответствии с заданными в них законами. I В любой среде программирования существуют строгие правила оформления программы: Программа имеет заголовок, в котором указано ее имя. 0 Программа содержит тело, в котором на языке программирования описан алгоритм. 0 Программа имеет конец, который является признаком завершения текста программы. В среде программирования ЛОГО эти правила выполняются следующим образом; Заголовок записывается на отдельной строке. Перед заголовком можно писать пояснения к программе. Заголовок начинается со слова это, после которого через пробел надо написать имя программы. Имя программы не должно содержать пробелов. Имя программы не должно совпадать ни с одним встроенным словом языка ЛОГО. Одинаковые имена разных программ приводят к путанице. Ниже представлены примеры правильных заголовков; это кораблик это единица это jkl 260 Раздел 7. Программирование в среде ЛОГО Так как алгоритм составляется для определенного действия, то ему принято давать имя, говорящее о результате выполнения программы. Например, по имени программы кораблик можно догадаться, что эта программа рисует кораблик, а house — дом. Имя ] к! не говорит ни о чем, и понять, для чего предназначена программа с таким именем, невозможно. Тело программы, то есть алгоритм на языке ЛОГО, обязательно начинается с новой строки. Алгоритм записывается так же, как последовательности команд, вводимые в командном центре. Текст программы должен обязательно заканчиваться словом конец, записанным на новой строке. На листе программ может быть записано много программ. Слово конец отмечает конец каждой программы. В теле программы (до слова конец) не допускается использование нового заголовка (слова это). После слова конец можно написать пояснения и поместить другую программу. Примеры правильно оформленных программ: а) программа рисования цифры 0 (см. задание 7.21): это цифра_0 по вперед 80 направо 90 вперед 40 направо 90 вперед 80 направо 90 вперед 40 направо 90 конец б) программа рисования цифры 1 (см. табл. 7.6): это цифра_1 пп вперед 40 направо 45 по вперед 60 направо 135 вперед 80 направо 90 пп вперед 40 направо 90 конец Записав программу на листе программ, вы пополнили словарь ЛОГО новым словом — именем программы, например цифра_0 или цифра_1. Теперь это слово можно ввести в командном центре или применить его в другой программе как команду. Для вызова программы в командном центре или в теле другой программы используется только имя этой программы (без слова это). Если при выполнении новой программы в ее алгоритме обнаруживается незнакомое слово, отсутствующее в словаре и на листе программ, в командном центре появляется сообщение: Не знаю как выполнить <слово>. Тема 7.2. Понятие программы 261 Рис. 7.6. К заданию 7.25 Задания для самостоятельной работы Задание 7.23. Откройте лист программ. Наберите текст программы рисования цифры О (цифра_0). Закройте лист программ и убедитесь, что в командном центре не появилось сообщение об ошибке. Если обнаружена ошибка, снова откройте лист программ, найдите и исправьте ошибку и снова закройте лист программ. Если ошибок нет, выполните команду цифра_0, введя это имя в командном центре. На рабочем поле должна появиться цифра 0. Задание 7.24. Запишите алгоритмы для рисования остальных цифр почтового индекса в виде программ в среде ЛОГО. Задание 7.25. Составьте алгоритмы рисования фигур, приведенных на рис. 7.6. Для выполнения этого задания подготовьте в тетради рисунки, отметьте на них начальное положение Черепашки и промежуточные цели. Числа на рисунках указывают размер отмеченных углов в градусах. Размеры других углов рассчитайте или подберите сами. Размеры отрезков произвольны. Задание 7.26. Придумайте и нарисуйте в тетради лабиринт. Опишите алгоритм рисования этого лабиринта для Черепашки. Затем, задав начальное положение Черепашки — у входа, «объясните» ей, как проходить лабиринт. Задание 7.27. Вы должны объяснить человеку, не знающему русского языка, как приготовить яичницу. Изобразите этот алгоритм в тетради с помощью рисунков, расположенных в определенном порядке. Может ли Черепашка выполнить ваш алгоритм? Задание 7.28. Опишите двумя способами (на русском языке и на языке математических символов) алгоритм получения суммы частного от деления числа 200 на число 8 и разности чисел 211 и 50. Задание 7.29. Запишите на листе программ программу рисования буквы «П». Введите в командном центре команду буква_п. это буква_п по вп 80 пр 90 вп 40 пр 90 вп 80 пр 180 пп конец 262 Раздел 7. Программирование в среде ЛОГО Задание 7.30. Запишите на листе программ программу рисования бантика: это бантик по вп 40 пр 120 вп 80 лв 120 вп 40 лв 120 вп 80 пр 120 пп конец Введите в командном центре команду бантик. Задание 7.31. В теле программы песочные_часы используется записанная ранее программа бантик: это песочные_часы НК 270 бантик нк 0 конец Записав текст этой программы, закройте лист программ и выполните команду песочные_часы. Задание 7.32, Опишите объект «прямоугольник» со сторонами 100 и 60 шагов и составьте программу для его построения. Задание 7.33. Найдите и объясните ошибки, допущенные при написании программ: а) это ерунда вп 10 нд 10 конец б) это пп по буква_п вп 40 буква_п конец в) это двойной бант по бантик вп 10 бантик пп конец Задание 7.34. Изучите объекты, представленные на рис. 7.7. Найдите и назовите элемент, который встречается во всех трех объектах. Составьте описание каждого объекта и алгоритм его построения. Дайте имена полученным алгоритмам и запишите соответствующие программы на лист программ. Проверьте новые команды. Рис. 7.7. К заданию 7.34 Тема 7.3 Последовательный алгоритм Выполнив задания этой темы, вы научитесь: II* составлять информационную модель графического объекта; 111* разрабатывать и записывать последовательный алгоритм. Задание 7.35 Составьте алгоритм построения домика (рис. 7.8) с условием, что Черепашка не должна проходить дважды по одной и той же линии. Начальное положение выберите самостоятельно. Стороны квадрата и треугольника равны. Рис. 7.8. К заданию 7.35 Этап 1. Разработка приближенного варианта алгоритма Домик состоит из крыши и основания. Основание представляет собой квадрат, крыша — равносторонний треугольник. Низ крыши и верх основания — один и тот же отрезок. Дважды его рисовать нельзя. Составим примерный алгоритм рисования домика: 1. Нарисовать квадрат, начиная с верхней вершины, и вернуться в ту же точку. 2. Нарисовать крышу — оставшиеся стороны треугольника. Этап 2. Разработка уточненного варианта алгоритма для среды Опишем объект, который должна нарисовать Черепашка, в виде информационной модели (табл. 7.7). Необходимо задать начальное и конечное состояния Черепашки и рабочего поля. Начальное положение Черепашки обычно выбирается относительно объекта, который она будет рисовать. В соответствии с выбранным алгоритмом это должна быть одна 264 Раздел 7. Программирование в среде ЛОГО из верхних вершин квадрата, допустим, левая. Голова Черепашки направлена вдоль основания крыши. Перо должно быть опущено. Конечное положение Черепашки не будем оговаривать. Таблица 7.7. Информационная модель объекта «Домик» Параметр объекта Действие объекта Название Значение Длина стороны 50 шагов Рисовать Число сторон в основании 4 Стирать Соотношение сторон в основании Все стороны равны Величина угла между сторонами основания 90° Число сторон у крыши 2 Соотношение сторон крыши Все стороны равны Величина угла между сторонами крыши 60° Цвет контура домика Текущий Для этой задачи начальное состояние рабочего поля не важно. Но после выполнения алгоритма на нем должен появиться домик. Этап 3. Запись алгоритма на языке исполнителя Представим алгоритм построения домика на языке для исполнителя — Черепашки (табл. 7.8). Все команды, приведенные во втором столбце табл. 7.8, выполняются в порядке записи друг за другом. Такой алгоритм называется линейным, или последовательным. На основании алгоритма, полученного во втором столбце табл. 7.8, напишем программу: это домик вп 50 пр 90 вп 50 пр 90 вп 50 пр 90 вп 50 пр 30 вп 50 пр 120 вп 50 конец Тема 7.3. Последовательный алгоритм 265 Таблица 7.8. Алгоритм рисования домика в ЛОГО Действие для достижения подцели Команды для Черепашки Значения параметров Черепашки и рабочего поля Нарисовать основание вп 50 пр 90 вп 50 пр 90 вп 50 пр 90 вп 50 Нарисован квадрат справа вниз от начгшьного положения Черепашки. Черепашка в верхней левой вершине нарисованного квадрата, голова направлена на Север Нарисовать крышу пр 30 вп 50 пр 120 вп 50 Нарисована крыша над основанием. Черепашка в правой верхней вершине, голова направлена вдоль стороны крыши Получится ли домик, изображенный на рис. 7.8, если изменить порядок выполнения алгоритма: сначала нарисовать крышу, а затем — основание? Задания для самостоятельной работы Задание 7.36. Дан прямоугольник со сторонами 30 и 60 шагов. Составьте программу его рисования на рабочем поле. Задание 7.37. Составьте программу вычисления площади прямоугольника со сторонами 30 и 60 шагов. Какую команду вы используете для вывода полученного значения в командный центр? Задание 7.38. Какую фигуру нарисует Черепашка после выполнения следующих действий: вперед на 30 шагов, влево на 60°, назад на 30 шагов, влево на 60°, вперед на 30 шагов? На какой угол должна повернуться Черепашка, чтобы, закончив выполнение этого алгоритма, вернуться в начальное положение? Напишите выражение для вычисления угла поворота Черепашки, возвращающего ее в исходное положение. 266 Раздел 7. Программирование в среде ЛОГО Задание 7.39. Нарисуйте в тетради квадрат со стороной 100 шагов (10 клеток) и обозначьте начальное положение Черепашки — в левом нижнем углу этого квадрата, голова ее направлена на Север. Подготовьте таблицу по образцу табл. 7.7, в которой укажите параметры графического объекта «Квадрат». Опишите начальное и конечное состояния Черепашки и рабочего поля. Запишите программу построения квадрата на рабочем поле в таблице по образцу табл. 7.8. В результате выполнения программы Черепашка должна вернуться в начальное положение. Тема 7.4 Циклический алгоритм Выполнив задания этой темы, вы научитесь: записывать циклический алгоритм; "I* рисовать равносторонний треугольник; "»* составлять алгоритм построения любого правильного многоугольника и окружности; составлять алгоритм построения объектов с повторяющимися элементами. Способ записи циклического алгоритма Задание 7.40 Нарисовать несколько одинаковых квадратов в разных местах рабочего поля, используя программу, созданную в задании 7.39 (тема 7.3). Выполните алгоритм: 1. Переместить Черепашку в центр рабочего поля. Записать в командном центре команду вызова программы рисования квадрата. Ввести эту команду, нажав клавишу Enter. На рабочем поле будет нарисован квадрат. Черепашка вернется в начальное положение — в левый нижний угол квадрата. 2. Переместить Черепашку в другую точку рабочего поля и снова выполнить ту же команду. На экране появится еще один квадрат тех же размеров, а Черепашка окажется в левом нижнем углу этого квадрата. 3. Переместить Черепашку в новое начальное положение и повернуть голову направо на 30°. Затем выполнить ту же команду. На экране снова будет нарисован квадрат тех же размеров, но развернутый относительно оси Y вправо на 30°. Черепашка окажется в левом нижнем углу этого квадрата. 4. Конец алгоритма Во всех пунктах задания 7.40 получался один и тот же результат при выполнении последовательного (линейного) алгоритма: 268 Раздел 7. Программирование в среде ЛОГО вп 100 пр 90 вп 100 пр 90 вп 100 пр 90 вп 100 пр 90 Подчеркните в этом алгоритме одинаковые команды: команду вп 100 — одинарной чертой, команду пр 90 — двойной чертой. Вы видите, что пара команд вп 100 пр 90 повторяется 4 раза. Во всех языках программирования существует способ сокращенной записи повторяющихся действий — циклический алгоритм. % В среде программирования циклический алгоритм состоит из тела цикла и условия: Ш тело цикла содержит команды, которые должны повторяться; Ш условие указывает, сколько раз или до каких пор повторяются команды тела цикла. В языке программирования ЛОГО для записи циклического алгоритма применяется команда повтори. В этой команде два параметра: первый задает количество повторений {условие цикла), второй — список команд, которые должны повторяться (тело цикла). С помощью команды повтори алгоритм построения квадрата можно записать короче: повтори 4 [вп 100 пр 90] Здесь число 4 — условие цикла, а команды вп 100 пр 90 — тело цикла. Тело цикла всегда заключается в квадратные скобки. Задание 7.41 Введите команду: повтори 6 [лв 45 вп 30 пр 90 вп 30 лв 45] Черепашка нарисует зигзагообразную линию с шестью зубцами. Алгоритм создания одного зубца описан в теле цикла. Задание 7.42 Введите команду: повтори 4 [повтори 4 [вп 40 пр 90] лв 90] Здесь в тело одного цикла вложен второй цикл. Тема 7.4. Циклический алгоритм 269 Вложенный цикл описывает алгоритм рисования квадрата. В соответствии с внешним циклом Черепашка 4 раза рисует квадрат, поворачиваясь после рисования каждого на 90°. В результате вы увидите на экране большой квадрат, составленный из четырех маленьких. Длину стороны большого квадрата легко подсчитать. Для построения многих геометрических объектов могут применяться циклические алгоритмы. Среди таких объектов особое место занимают правильные многоугольники. Правильным называется выпуклый многоугольник, у которого все углы и стороны равны. Правильными многоугольниками являются, например, равносторонний треугольник, квадрат. В геометрии, чтобы нарисовать многоугольник с большим количеством сторон, обычно используют такой способ: разбивают окружность на сектора с одинаковыми углами и соединяют точки на окружности отрезками. Примеры правильного пятиугольника и правильного восьмиугольника приведены на рис. 7.9. Задание 7.43 Введите команды: вп 50 пр 60 вп 50 пр 60 вп 50 пр 60 Черепашка нарисовала ломаную линию из трех равных отрезков. Какие параметры в указанных командах нужно изменить, чтобы начало и конец ломаной линии соединились, образовав правильный треугольник? Подумайте, почему предложенная последовательность команд не привела к такому результату. Рис. 7.9. Построение правильного пятиугольника (а) и правильного восьмиугольника (б) Задание 7.44 Постройте правильный треугольник. 270 Раздел 7. Программирование в среде ЛОГО Модель объекта показана на рис. 7.10. На ней отмечены начальное и конечное положения Черепашки и углы между направлениями сторон треугольника. Как видим, Черепашка должна поворачиваться на угол, смежный с углом треугольника. Ей следует повернуться три раза, чтобы получилось три угла. У треугольника с равными сторонами равны и все углы, следовательно, равны и их смежные углы. Поскольку Черепашка воввращается в начальное положение, значит, она делает полный оборот, то есть сумма углов поворотов Черепашки составляет 360°. Легко подсчитать, на какой угол надо каждый раз поворачиваться Черепашке, чтобы нарисовать правильный треугольник. Г рафические объекты с повторяющимися элементами Задание 7.45 Постройте правильный шестиугольник. Информационная модель правильного шестиугольника со стороной 50 шагов представлена в табл. 7.9. Таблица 7.9. Информационная модель объекта «Правильный шестиугольник» Параметры объекта Действия объекта Название Значение Длина стороны 50 шагов Рисовать Число сторон 6 Стирать Соотношение сторон Все стороны равны Соотношение углов Все углы равны Величина угла, смежного с углом между сторонами 360/6 градусов Цвет контура Текущий Тема 7.4. Циклический алгоритм 271 Начальное состояние Черепашки — текуш;ее. Ее конечное состояние должно совпадать с начальным. Начальное состояние рабочего поля — текущ;ее. После выполнения алгоритма на рабочем поле должен быть нарисован шестиугольник со стороной 50 пикселов. Составим алгоритм рисования шестиугольника (табл. 7.10). Таблица 7.10. Алгоритм рисования правильного шестиугольника Действия для достижения цели Команды для Черепашки Значения параметров Черепашки и рабочего поля Повторить 6 раз следующие действия: вперед на 50 шагов, повернуть голову направо на угол, равный 360/6 градусов повтори 6 [вп 50 пр 360 / 6] Нарисован шестиугольник справа от начального положения Черепашки. Черепашка вернулась в начальное положение Обобщим предложенный метод для построения правильного многоугольника с любым количеством сторон. Обозначим буквой А длину стороны многоугольника, буквой N — количество углов многоугольника. Такой объект описан в табл. 7.11, а алгоритм его построения приведен в табл. 7.12. Таблица 7.11. Информационная модель объекта «Правильный многоугольник» Параметры объекта Действия объекта Название Значение Длина стороны А пикселов Рисовать Число сторон N Стирать Соотношение сторон Все стороны равны Соотношение углов Все углы равны Величина угла, внешнего к углу между сторонами 360/Л^ градусов Цвет контура Текущий 272 Раздел 7. Программирование в среде ЛОГО Таблица 7.12. Алгоритм рисования правильного многоугольника Действия для достижения цели Команды для Черепашки Значения параметров Черепашки и рабочего поля Повторить N раз: вперед на А шагов, повернуть голову направо на угол, равный 360/N повтори N [вп А пр 360 / N] Нарисован многоугольник справа от начального положения Черепашки. Черепашка вернулась в начальное положение В командах на языке ЛОГО числовые параметры заменены буквами, как это делается в алгебре. Вы можете использовать предложенный алгоритм для построения любого правильного многоугольника с заданной длиной стороны, подставляя вместо букв конкретные числа. Посмотрите на рис. 7.11. На нем изображены правильные 18-угольник со стороной 10 шагов и 36-угольник со стороной 5 шагов. На глаз их почти не отличить от окружности. Чем больше сторон у правильного многоугольника, тем больше он будет похож на окружность. Рис. 7.11. Правильные 18-угольник (слева) и Зб-угольник (справа) Задания для самостоятельной работы Задание 7.46. Постройте правильные многоугольники (рис. 7.12) с помощью команды повтори. Черепашка должна всегда возвращаться в начальное положение. Рис. 7.12. К заданию 7.46 Тема 7.4. Циклический алгоритм 273 Задание 7.47. Найдите ошибки, допущенные при написании команд: а) [вп 20 нд 20 пр 90 вп 20 лв 90] повтори 5 б) повтори 20 раз [вп 10 жди 10] в) повтори 100 (пр 90 вп 20 лв 90 вп 20) Задание 7.48. Что нарисует Черепашка, выполнив следующие команды: а) по повтори 10 [вп 20 нд 20 пр 90 вп 20 лв 90] пп б) по повтори 15 [пр 90 вп 20 лв 90 вп 20] пп в) по повтори 3 [ вп 50 пр 60 ] пп Задание 7.49. На какой угол должна поворачиваться Черепаш- ка, начертив очередную сторону: а) квадрата; б) треугольника; в) шестиугольника? Задание 7.50. На какой угол повернулась Черепашка, придя к начальному положению после рисования: а) квадрата; б) треугольника; в) шестиугольника? Задание 7.51. Запишите в командном центре команды для построения правильного 9-угольника с длиной стороны 10 шагов (см. табл. 7.12) и выполните их. Задание 7.52. Изменив команды, написанные для построения 9-угольника, нарисуйте следующие многоугольники: а) 15-угольник со стороной 10 шагов; б) 18-угольник со стороной 10 шагов; в) 36-угольник со стороной 5 шагов. Задание 7.53. Нарисуйте стебель и 16 одинаковых игольчатых лепестков (рис. 7.13). Задание 7.54. Нарисуйте пучок, состоящий из 30 расходящихся лучей длиной по 60 шагов. Угол между крайними лучами — 60° (рис. 7.14). Задание 7.55. Нарисуйте полумесяц, являющийся половиной 360-угольника со стороной 1 шаг (рис. 7.15). 274 Раздел 7, Программирование в среде ЛОГО Рис. 7.13. К заданию 7.53 Рис. 7.14. К заданию 7.54 Рис. 7.15. К заданию 7.55 Задание 7.56. Подсчитайте путь, который проходит Черепашка, когда рисует; а) квадрат со стороной 30 шагов; б) треугольник со стороной 30 шагов; в) шестиугольник со стороной 30 шагов. Задание 7.57. Подсчитайте путь, который проходит Черепашка, когда рисует: а) 18-угольник со стороной 10 шагов; б) 36-угольник со стороной 5 шагов; в) 360-угольник со стороной 0,5 шага. Задание 7.58. Напишите программу квадрат для построения квадрата со стороной 20 шагов. Составьте информационные модели объектов, представленных на рис. 7.16. Напишите программы для построения этих объектов. В программах используйте команду квадрат. Рис. 7.16. К заданию 7.58 Тема 7.5 Процедура и модуль Выполнив задания этой темы, вы научитесь: 1М». использовать вспомогательные алгоритмы для создания сложных объектов; ,11,» выполнять правило сохранения состояния при разработке процедуры; III» составлять модули, используя вспомогательные программы — процедуры. Встречаясь с новым объектом, системой или процессом, человек всегда стремится выделить знакомые для себя элементы и определить взаимоотношения между ними. Подобный процесс называют анализом. Рассмотрим графические объекты, изображенные на рис. 7.16. Все они составлены из квадратов со стороной 30 пикселов. Составим информационную модель композиции «Лесенка из квадратов» (табл. 7.13), опираясь на разработанный алгоритм построения квадрата и соответствующую ему программу квадрат. Таблица 7.13. Информационная модель объекта «Лесенка из квадратов» Параметры объекта Действие объекта Название Значение Количество квадратов 3 Рисовать Соотношение квадратов Все одинаковые Стирать Соотношение вершин квадратов Левая нижняя вершина следующего квадрата совпадает с правой верхней вершиной предыдущего Соотношение углов между квадратами Все углы равны Цвет контура Текущий Начальное состояние Черепашки — в левой нижней вершине нижнего квадрата, голова направлена на Север. Конечное со- 276 Раздел 7. Программирование в среде ЛОГО стояние Черепашки совпадает с начальным. Начальное состояние рабочего поля — очищено от рисунков. После выполнения алгоритма на рабочем поле должна быть нарисована лесенка из квадратов. Алгоритм рисования лесенки из квадратов приведен в табл. 7.14. Надо выполнить следующие действия: нарисовать квадрат, передвинуть Черепашку в правый верхний угол нарисованного квадрата. Эти действия повторяются столько раз, сколько квадратов в лесенке. Программа рисования лесенки будет следующей: это лесенка повтори 3 [квадрат вп 30 пр 90 вп 30 лв 90] пп повтори 3 [пр 90 нд 30 лв 90 нд 30] конец Таблица 7.14. Алгоритм рисования лесенки из квадратов Действия Команды для Черепашки Значения параметров Черепашки и рабочего поля Повторить 3 раза действия: нарисовать квадрат, перейти в правую верхнюю вершину повтори 3 [квадрат вп 30 пр 90 вп 30 лв 90] Нарисована лесенка из квадратов. Черепашка в правой верхней вершине последнего квадрата Вернуться в начальное состояние повтори 3 [пр 90 нд 30 лв 90 нд 30] Черепашка в левой нижней вершине первого квадрата, голова направлена на Север Особенностью программы лесенка является использование вспомогательной программы рисования квадрата, которая вызывается командой квадрат. В средах программирования вспомогательные программы обычно называют процедурами. I Процедура — это вспомогательная программа, которая может вызываться из другой программы. Различают встроенные и пользовательские процедуры. Все команды ЛОГО обращаются к встроенным процедурам. Вспомо- Тема 7.5. Процедура и модуль 277 гательные программы, написанные вами и помещенные на лист программ, являются пользовательскими процедурами. Так, программа квадрат является пользовательской процедурой. Применяя процедуру, вы должны точно представлять, в каком состоянии находится Черепашка перед ее выполнением и в каком состоянии она окажется после ее выполнения. От этого зависит выполнение всей программы, где используется пользовательская процедура. Поэтому при создании процедуры надо соблюдать правило сохранения начального состояния исполнителя: п Процедура перед своим завершением должна восстановить исход-.. f ные значения параметров исполнителя. На рис. 7.17 представлены объекты, которые получились из сложного объекта — лесенки. Объект, который составляется из более простых объектов и может использоваться для создания более сложных объектов, называют модулем. В современном производстве модули (или блоки) используются очень широко, например при проектировании домов, при изготовлении корпусной мебели и пр. Детский конструктор предоставляет возможность детям воплощать свои строительные фантазии, используя готовые модули. Компьютер также собирается из отдельных модулей, которые легко заменяются. Рис. 7.17. Композиция из нескольких лесенок I Программный модуль — это совокупность процедур, связанных определенными правилами. Программу, которая вызывает пользовательские процедуры, тоже называют модулем. Программный модуль применяется для создания более сложных объектов, в отличие от процедуры, которая используется для создания элементарных объектов. В таком случае программу рисования лесенки, созданную с помощью процедуры квадрат, можно воспринимать как программный модуль и использовать для конструирования всевозможных композиций (рис. 7.17). Ф 278 Раздел 7. Программирование в среде ЛОГО Одни и те же процедуры могут применяться в разных модулях. В свою очередь, модули могут применяться как для создания отдельных объектов, так и для создания более сложных модулей (рис. 7.18). Такой подход к программированию называется процедурным. Рис. 7.18. Поароение модулей на основе процедур Рассмотрим пример создания модуля четырехлистника, который используется для рисования цветка (рис. 7.19). Сначала надо провести анализ структуры графического объекта «Цветок»: ♦ цветок состоит из 16 лепестков; ♦ каждый лепесток образован двумя дугами; ♦ элементарным объектом является дуга, равная четверти окружности. На основании анализа предлагаем технологию создания программы рисования цветка: ♦ написать процедуру для рисования дуги; ♦ учитывая эту процедуру, разработать модуль, рисующий че-тырехлистник в соответствии с алгоритмом, приведенным на рис. 7.20; ♦ используя модуль четырехлистника, нарисовать разнообразные цветы с любым количеством лепестков, кратным четырем. Например, чтобы нарисовать цветок, изображенный на рис. 7.19, нужно 4 раза выполнить следующие действия: 1. Нарисовать четырехлистник. 2. Повернуть графический указатель вправо на 22,5°. Для получения цветка с бвольшим количеством лепестков нужно увеличить число повторений и уменьшить угол поворота Черепашки. Тема 7.5. Процедура и модуль 279 Создание программ путем объединения модулей называется модульным программированием. Рис 7.19. Графический объект «Цветок» Рис. 7.20. Алгоритм создания модуля для рисования четырехлистника Задания для самостоятельной работы Задание 7.59. Составьте процедуру рисования элементарного объекта (дуги) и программный модуль для рисования четырехлистника для рис. 7.19. Напишите программы для рисования разных цветков, используя модуль четырехлистника. Задание 7.60. Выделите в каждой фигуре, изображенной на рис. 7.21, свой повторяюш;ийся элемент. Напишите процедуру для их построения. Составьте программы для рисования каждой фигуры, используя написанные процедуры. Задание 7.61. Составьте программы для рисования снежинок (рис. 7.22). В чем сходство и различие этих программ? Рис. 7.21. К заданию 7.60 Ж * < А Рис. 7.22. К заданию 7.61 280 Раздел 7. Программирование в среде ЛОГО Рис. 7.23. К заданию 7.62 Задание 7.62. Составьте программы для рисования звездочек (рис. 7.23). В чем сходство и различие этих программ? Задание 7.63. Зачет: конкурс по модульному программированию. а) Даны процедуры фрагм! и фра гм?: это фрагм! вп 12 пр 90 вп 12 конец это фрагм2 вп 12 лв 90 вп 12 конец Используя только процедуры фрагм! и фрагм2, команды рота и повтори, построить фигуры, приведенные на рис. пово- 7.24. □ Рис. 7.24. К заданию 7.63, а б) В Греции есть река Меандр со столь извилистыми берегами, что трудно понять, в какой стороне начало реки, а в какой — конец. Такое же название носит классический греческий орнамент, представляюш,ий собой извилистую кривую или ломаную линию (рис. 7.25). Составьте алгоритмы и программы для рисования меандров. в) Составьте алгоритмы и программы рисования фигур, предложенных на рис. 7.26, выделив в них элементарные объекты и написав процедуры для их построения. Доработайте свои алгоритмы так, чтобы получились раскрашенные фигуры. Тема 7.5. Процедура и модуль 281 ш [ш Icll 1ш [ш ГЁ1 Рис. 7.25. Узоры-меандры (к заданию 7.63, б) Рис. 7.26. К заданию 7.63, в г) Придумайте композицию, состоящую из различных фигур, программы для которых уже содержатся на вашем листе программ. Устанавливайте Черепашку в определенные точки видимого поля, используя команды нов_х, нов_у, нов_курс. Придумайте и расскажите в классе историю про вашу композицию. Тема 7.6 Процедура с параметрами Выполнив задания этой темы, вы научитесь: анализировать объект, выделяя в нем настраиваемые параметры; II» описывать в процедуре настраиваемые формальные параметры; III» задавать значения фактических параметров при вызове процедуры. Процедура с одним параметром До сих пор в программах для создания графических объектов длина отрезка, угол поворота, цвет задавались определенными числами. Однако часто возникает необходимость построить такой же объект, но с другими значениями параметров. Рассмотрим, как это сделать, на примере процедуры рисования квадрата. Для этого проведем анализ свойств объекта «Квадрат» и выявим общие и специфические параметры. Этап 1, Перечислим параметры, характеризующие квадрат на рабочем поле: а) количество сторон (всегда 4); б) соотношение сторон (всегда равны); в) длины сторон (например, 60 пикселов); г) соотношение углов (всегда равны); д) величины углов (все по 90°); е) цвет контура (например, синий); ж) цвет внутри контура (например, желтый); з) координаты расположения на рабочем поле (например, нижняя левая вершина в точке с координатами л: = 0, i/ = 0); Этап 2. Выявим среди перечисленных характеристик параметры, общие для любого квадрата. Параметры а), б), г), д) определяют общие свойства квадрата. Изменение их значений превратит квадрат в другую фигуру. Тема 7.6. Процедура с параметрами 283 ♦ Параметры в), е), ж), з) характеризуют конкретный квадрат. Математическое определение объекта «Квадрат» не зависит от значений этих параметров. Этап 3. Перечислим действия, которые можно выполнить над объектом на рабочем поле. Квадрат можно нарисовать в любом месте рабочего поля. Изменяя цвет, длину стороны и место расположения квадрата, можно построить сложные объекты, например орнаменты из квадратов. При использовании квадрата в другом объекте цвет контура и положение начальной вершины на рабочем поле зависят от места этого квадрата в сложном объекте. Значения таких параметров можно принять текуш;ими. Результаты анализа свойств квадрата представлены в табл. 7.15. Таблица 7.15. Информационная модель объекта «Квадрат» Параметры объекта Действия объекта Название Значение Число сторон 4 Рисовать Соотношение сторон Все стороны равны Стирать Соотношение углов Все углы равны Величина угла, внешнего к углу между сторонами 90° Длина стороны Можно изменять Приобретать указанные размеры Цвет контура Текущий Устанавливать указанный цвет контура Цвет внутри контура Текущий Закрашивать внутри контура Координаты расположения левой нижней вершины Текущие Располагать в разных местах рабочего поля Вспомним процедуру квадрат, которая строит квадрат со стороной 30 пикселов: 284 Раздел 7. Программирование в среде ЛОГО это квадрат повтори 4 [вп 30 пр 90] конец Сравним эту процедуру с процедурами построения квадратов с другими длинами сторон, например, 80 и 60 пикселов: это кв80 повтори 4 [вп 80 пр 90] конец это кв60 повтори 4 [вп 60 пр 90] конец Процедуры квадрат, кв80 и кв60 предназначены для рисования квадратов, но стороны получаемых квадратов различны. Удобно было бы иметь одну процедуру, позволяюпцую подставлять в нее заданную длину стороны. Сторона квадрата рисуется командой вп, следовательно, именно в этой команде нужно указать, что ее параметр может быть переменным. Программная среда позволяет создавать процедуры с изменяющимися значениями параметров. Для этого параметру присваивается имя, которое должно быть указано в заголовке процедуры. В команде, использующей настраиваемый параметр, вместо конкретного значения (числа) пишется имя, объявленное в заголовке. Например, процедура рисования квадрата с изменяемой длиной стороны может выглядеть так: это квадрат сторона повтори 4 [вп :сторона пр 90] конец В заголовке процедуры появилось еще одно слово — имя параметра. Это имя (сторона) используется в команде вп и показывает, что конкретные данные для этой команды будут указаны позже. Здесь вместо указания конкретного числа используется так называемый формальный параметр. А Формальный параметр — это параметр, значение которого в про-цедуре может быть любым. Имя формального параметра задается «Ё> в заголовке процедуры. Тема 7.6. Процедура с параметрами 285 В языке ЛОГО двоеточие (:) перед именем параметра показывает, что в данной команде используется значение параметра, которое будет известно при выполнении процедуры. Вызывая процедуру с параметром, необходимо после ее имени задать фактическое значение этого параметра. Например, для построения квадрата со стороной 50 шагов следует использовать команду квадрат 50. «Фактический параметр — это значение, задаваемое при вызове процедуры. Это значение заменит формальный параметр при вы-т(е> полнении команды вызова процедуры. Задание 7.64 1. Запишите на листе программ процедуру: это квадрат сторона повтори 4 (вп :сторона пр 90] конец 2. Введите команду квадрат без фактического параметра. В командном центре появится сообщение: Не хватает входных данных для квадрат. 3. Исправим ошибку, задав значение фактического параметра: квадрат 100. На рабочем поле будет нарисован квадрат со стороной 100 пикселов. При вводе команды квадрат 80 на рабочем поле появится квадрат со стороной 80 пикселов. 4. Какие значения можно давать параметру? Очевидно, только те, что могут быть применены в команде, использующей этот параметр. Проверим это. Введем в командном центре: квадрат S. Появится сообщение: Не могу выполнить s. 5. Введем команду: квадрат "s. Появится сообщение: вп не допускает S на входе. Задание 7.65 Исследуйте, каковы наименьшее и наибольшее значения параметра сторона в процедуре квадрат. Вводите в командный центр поочередно команду квадрат с разными значениями параметра и передвигайте Черепашку на новое место. 286 Раздел 7. Программирование в среде ЛОГО по квадрат 2 пп нов_х 2 по квадрат 150 пп нов_у -170 по квадрат 500 пп нов_х -300 по квадрат 700 Что вы видите на рабочем поле при самом маленьком фактическом параметре, а что — при самом большом? Почему? f Запомните правила создания и вызова процедуры с параметром: 0 При создании процедуры в заголовке после имени процедуры записывается имя формального параметра. В теле процедуры это имя указывается в командах, использующих этот параметр. Е! При вызове процедуры после ее имени обязательно указывается фактический параметр. Процедура с несколькими параметрами Количество параметров в процедуре зависит от описания объекта. Рассмотрим пример создания правильного многоугольника, свойства которого отображены в табл. 7.16. В соответствии с представленным описанием необходимо иметь несколько изменяемых параметров: число сторон, длина стороны, цвет контура. Напишем процедуру прав_мн_угол, которая рисует правильный многоугольник текущим цветом. Используем алгоритм из табл. 7.12 (тема 7.4): это прав_мн_угол а п повтори :п [вп :а пр 360 / :п] конец Для изменения цвета необходимо в данную процедуру добавить еще один параметр: это прав_мн_угол а п с нц : с повтори :п [вп ;а пр 360 / :п] конец Чтобы на рабочем поле нарисовать синий шестиугольник с длиной стороны 50 пикселов, введем команду: прав_мн_угол 50 6 5. Здесь первый фактический параметр (число 50) обозна- Тема 7.6. Процедура с параметрами 287 чает длину стороны, второй (число 6) шин), а третий (число 5) — цвет. количество сторон (вер- Таблица 7.16. Информационная модель объекта «Правильный многоугольник» Параметры объекта Действия объекта Название Значение Соотношение сторон Все стороны равны Рисовать Соотношение углов Все углы равны Стирать Величина угла, внешнего к углу между сторонами Полный угол, разделенный на число сторон Число сторон Можно изменять Приобретать указанное число сторон Длина стороны Можно изменять Приобретать указанные размеры Цвет контура Можно изменять Устанавливать указанный цвет контура Цвет внутри контура Текуш;ий Закрашивать внутри контура Координаты расположения начальной вершины Текущие Располагать в разных местах рабочего поля I Запомните правила создания и вызова процедуры с несколькими параметрами: IZf При описании процедуры в заголовке после ее имени записываются имена формальных параметров, разделенные пробелом. 0 В теле процедуры имена появляются как параметры в командах. 1И При вызове процедуры после ее имени записываются все фактические параметры в порядке, соответствующем порядку записи формальных параметров в заголовке процедуры. 288 Раздел 7, Программирование в среде ЛОГО Задания для самостоятельной работы Задание 7.66. Составьте процедуру для рисования правильного шестиугольника с длиной стороны, заданной формальным параметром. Задание 7.67. Составьте процедуру для рисования правильного треугольника с длиной стороны, заданной формальным параметром. Задание 7.68. Составьте процедуру для рисования условной окружности — правильного 36-угольника с длиной стороны, заданной формальным параметром. Задание 7.69. Напишите процедуру рисования закрашенного квадрата с длиной стороны 80 пикселов и изменяемым параметром — цветом контура. Какие изменения надо внести в имею-Ш.ИЙСЯ алгоритм построения квадрата? Задание 7.70. Напишите программы для рисования композиций, представленных на рис. 7.27. Для описания каждой композиции заполните табл. 7.17 аналогично тому, как заполнялась табл. 7.16. Установите начальное и конечное состояния Черепашки и рабочего поля. Таблица 7.17. Шаблон информационной модели объекта Рис. 7.27. К заданию 7.70 Параметры объекта Действия объекта Название Значение Количество квадратов Рисовать Соотношение квадратов Стирать Соотношение вершин квадратов Соотношение углов между квадратами Цвет контура Тема 7.6, Процедура с параметрами 289 Задание 7.71. Напишите процедуру рисования полуокружности как половины 360-угольника с переменной длиной стороны и углом поворота после каждого шага, равным 1°. Задание 7.72. Используя процедуру, созданную при выполнении предыдуш;его задания, напишите программы для рисования составных графических объектов (рис. 7.28). Рис. 7.28. К заданию Задание 7.73. Модифицируйте программу прав_мн_угол, добавив еш;е один параметр — угол поворота. Теперь угол поворота можно задавать независимо от количества сторон. Какой графический объект описывает такая программа? Задание 7.74. Опишите элементарный объект, из которого составлены снежинки (см. рис. 7.22). Напишите процедуру рисования элементарного объекта с параметром, управляющим размером этого объекта. Задание 7.75. Составьте информационную модель объекта «Куб», который можно изобразить на плоскости как объемную фигуру. Какие элементы добавляются к квадрату, чтобы на экране можно было увидеть куб? Представьте алгоритм рисования куба в виде таблицы. Задание 7.76. Используя дугу, равную четверти окружности, опишите объект «Летящая птица». Составьте программный модуль для изображения птицы, который вызывает процедуру рисования дуги. Напишите программу создания стаи летящих птиц, используя модуль рисования одной птицы. Тема 7.7 Переменная в алгоритме Выполнив задания этой темы, вы научитесь: задавать и изменять значение переменной; запоминать в одной переменной список значений; использовать значение переменной для вычисления параметров команд. На рисунке 7.29 изображен объект «Тоннель». Он состоит из 40 восьмиугольников, причем сторона каждого следующего на 1 пиксел длиннее текущего. Мы можем указать в процедуре длину самого маленького восьмиугольника как изменяемый параметр: это тоннель! s повтори 40 [прав_мн_угол :s 8 вп 1] конец Процедура тоннель!, повторенная 40 раз, позволит нарисовать 40 восьмиугольников, но все они будут с одинаковой заданной длиной стороны. Для получения тоннеля, изображенного на рис. 7.29, значение s надо увеличивать на каждом проходе цикла. Иначе говоря, значение параметра s должно храниться в памяти компьютера, чтобы исполнитель мог его менять по ходу выполнения программы. В программировании для этого используют объект переменная. Рис. 7.29. Объект Тоннель I Переменная — это объект в программе, имеющий имя и изменяемое значение. Для каждой переменной выделено определенное место в памяти компьютера. В любой среде программирования различаются имя и значение переменной. Имя переменной показывает, в каком месте памяти компьютера хранится значение переменной. Значение переменной считывается из указанного ее именем места памяти. Значение переменной применяется как фактический параметр в команде и в выражении. Переменную можно создать, то есть указать ее имя и присвоить ей значение. В среде ЛОГО для создания переменной приме- Тема 7.7. Переменная в алгоритме 291 няется команда пусть. Эта же команда изменяет значение уже существующей переменной. В языке ЛОГО явно показывается различие между именем и значением переменной: имя предваряется двойной кавычкой ("), а значение — двоеточием (:). Символ : обозначает действие взять данные из области памяти, названной именем переменной. В некоторых языках программирования имя и значение переменной могут не различаться по виду. I Запомните правило работы с переменной в среде ЛОГО: Команда пусть имеет два параметра. Первый указывает имя переменной, второй задает выражение для получения значения этой переменной. Рассмотрим пример. В переменную а1 надо записать число 30, в переменную а2 — число 6, а в переменную сумм — сумму переменных а1 и а2. Для выполнения этих действий вводим команды: пусть "а! 30 пусть "а2 6 пусть "сумм :а! + :а2 Результат выполнения этих команд на экран компьютера не выводится. Командой пусть можно также изменить значение уже созданной переменной. Например, для увеличения значения переменной S на 1 вводим: пусть "S :s + 1 В этом случае из памяти считывается старое (текущее) значение переменной s и увеличивается на 1, а затем новое значение записывается в то же место памяти. Переменные служат для хранения значений фактических параметров и других данных, используемых при выполнении процедуры. При описании процедуры формальный параметр обозначает имя переменной. При вызове процедуры в памяти компьютера создается переменная с этим именем и в нее записывается значение фактического параметра. В одной переменной можно запомнить более одного значения. Например, положение Черепашки на рабочем поле задается абсциссой и ординатой. Эти координаты можно измерить датчиком место и записать в одну переменную командой: пусть "положение место 292 Раздел 7. Программирование в среде ЛОГО Тогда в переменной положение окажется список из двух значений. Вы увидите их, если введете команду: покажи :положение Команда нов_место : положение устанавливает Черепашку в указанное место рабочего поля. Задания для самостоятельной работы Задание 7.77. Запишите на листе программ программу для рисования тоннеля (см. рис. 7.29), которая вызывает процедуру построения правильного многоугольника прав_мн_угол s (параметр s показывает длину стороны самого маленького восьмиугольника). Проверьте работу этой программы: это тоннель ;s повтори 40 [прав_мн_угол :s 8 пусть "s :s + 1] конец Задание 7.78. Измените программу тоннель так, чтобы тоннель не увеличивался от меньшего восьмиугольника к большему, а уменьшался от большего к меньшему. Задание 7.79. Создайте в теле программы тоннель переменную с — счетчик для номера цвета, начальное значение счетчика задайте равным 9. На каждом шаге цикла увеличивайте значение переменной с на 10 и устанавливайте цвет Черепашки равным значению :с. Тоннель получится разноцветным. Задание 7.80. Каким будет значение переменной z после выполнения следующих команд: а) пусть "Z 10 вп :Z + 5 б) пусть "Z 10 вп :z пусть "z :z + 5 в) пусть "Z 10 повтори 5 [пусть "Z :z + 1] г) пусть "Z 105 / (30 + 5) д) пусть "Z 105 /30+5 Задание 7.81. Сохраните координаты точки, в которой находится в данный момент Черепашка, в переменной ст_место: пусть "ст_место место Передвиньте Черепашку мышью в другую точку, а затем выполните команду: нм :ст_место Черепашка вернется на прежнее место. Тема 7.8 Логика в среде программирования Выполнив задания этой темы, вы научитесь: записывать операции сравнения; III» записывать логическое выражение; ill'» описывать разветвляющийся алгоритм; III» описывать рекурсивный процесс; ш» моделировать микромиры. Инструменты сравнения Знаменитый Шерлок Холмс при расследовании применял законы логики, что позволяло ему находить выход из любой ситуации и распутывать самые замысловатые истории. Лучшим способом освоения понятий логики является их практическое применение при составлении алгоритмов и проверке алгоритмов на компьютере. В качестве примера использования законов логики рассмотрим задачу о лабиринте. Как научить Черепашку проходить по лабиринту? Прежде всего построим объект «Лабиринт», который состоит из закрашенных квадратиков (плиток) одного цвета. Процедуры для построения лабиринта из элементарных объектов приведены в табл. 7.18. Задание 7.82 Запишите на листе программ процедуры, приведенные в табл. 7.18. Проверьте работу этих процедур. Опишите объект «Лабиринт», состоящий из плиток одного заданного цвета и одного заданного размера. Какие параметры нужны для этого объекта? Какой инструмент нужен для рисования такого объекта? Напишите процедуру лабиринт, которая рисует лабиринт, начиная с текущего положения Черепашки (рис. 7.30). Рис. 7.30. Лабиринт 294 Раздел 7. Программирование в среде ЛОГО Таблица 7.18. Инструменты-процедуры для построения лабиринта Объект Параметры Инструмент (процедура) Элемент закрашенной плитки р — длина стороны элемента; с — цвет элемента это эл_пл р цв по нц :цв повтори 3 [лв 90 вп :р] конец Закрашенная плитка, состоящая из элементов закрашенной плитки ст — длина стороны плитки; цв цвет плитки это плитка ст цв пусть "е 1 пусть "хн х_коор пусть "ун у_коор повтори :ст - 1 [эл_пл :е ;цв пусть "е ;е + 1 ] нов_х :хн нов_у :ун НК 0 конец Исполнитель Черепашка установлена в начало лабиринта. Она может идти только по плиткам лабиринта. Следовательно, исполнитель должен измерить цвет плитки, на которой он находится, и сравнить его с заданным значением. В зависимости от результата сравнения Черепашка выберет направление движения. Для выполнения операций сравнения в любой среде программирования имеются инструменты, представленные в табл. 7.19. Как видно из таблицы, значение операции сравнения может быть только истина (да) или ложь (нет). Таблица 7.19. Инструменты сравнения Обозначение Форма записи Значение операции сравнения > х1 > х2 да (истина), если значение х1 больше значения х2, нет (ложь) — в противном случае < х1 < х2 да (истина), если значение х1 меньше значения х2, нет (ложь) — в противном случае — х1 = х2 да (истина), если значение х1 равно значению х2, нет (ложь) — в противном случае Тема 7.8. Логика в среде программирования 295 Операция сравнения используется в качестве параметра в командах. Например, вывести значение операции сравнения в командный центр можно с помощью команды покажи: покажи color > 8 покажи 100 / 3 < 50 Если для анализа состояния объекта требуется осуществить несколько проверок, составляется логическое выражение, включающее несколько операций сравнения. В логическом выражении операции связываются логическими действиями И, ИЛИ и НЕ. Например, чтобы проверить, совпадает ли цвет Черепашки с цветом пиксела под ее пером и одновременно с цветом фона, введите команду: покажи и (цвет = цп) (цвет = фон) Рис. 7.31. Озеро Выбор действий по условию Рассмотрим такую ситуацию. Черепашка гуляет по рабочему полю. На рабочем поле расположено озеро определенного цвета. Черепашка, попав на озеро, должна «спрятаться». Для моделирования ситуации сначала нужно нарисовать объект «Озеро», изображенный на рис. 7.31 и описанный в табл. 7.20. Для этого потребуется специальный инструмент — процедура озеро. Для создания объекта «Озеро» введите команду: озеро 1 360 85 Инструмент-процедура фортуна заставляет Черепашку менять свое положение на рабочем поле случайным образом: это фортуна пп нов_х -300 + СП 600 нов_у -180 + сл 360 конец Задание 7.83 Составьте и запишите на листе программ процедуры озеро и фортуна. Проверьте работу этих процедур. Проверьте в разных точках рабочего поля значение выражения «цвет под пером равен 85», устанавливая Черепашку на озере и вне озера и вводя команду покажи цп = 85. 296 Раздел 7. Программирование в среде ЛОГО Таблица 7.20. Информационная модель объекта «Озеро» Параметры объекта Название Значение Цвет цв Форма Правильный многоугольник Длина стороны ст Число вершин чв Начальное положение исполнителя Случайное в области: 0 < л: <100 0 < у < 100 Конечное положение исполнителя Черепашке возвращается исходный цвет, и она располагается вне озера Инструмент (процедура) это озеро ст чв цв пп нов_х сл 100 нов_у сл 100 пусть "тц цвет нц :цв по прав_мн_угол ;ст :цв пр 90 пп вп ;ст по крась нд :ст лв 90 нц :тц пп нов_х -100 нов_у -100 конец Как научить Черепашку самостоятельно менять свое состояние? В среде ЛОГО есть команды, с помощью которых можно выбрать нужные действия, проанализировав условие: ♦ команда если позволяет реализовать неполную форму разветвляющегося алгоритма; ♦ команда если_иначе позволяет реализовать полную форму разветвляющегося алгоритма. Варианты возможных действий задаются списком команд. Список команд — это последовательность команд, заключенная в квадратные скобки. Команды в списке отделяются друг от друга пробелом. Формат команды для неполной формы разветвляющего алгоритма: если условие [список команд] Команда состоит из ключевого слова если и двух входных параметров: условия и одного списка команд. Условие представляет собой одну операцию сравнения или логическое выражение. Список команд содержит те команды, которые надо выполнить, если условие выполняется (значение выражения да, или «исти- Тема 7.8. Логика в среде программирования 297 на»). Если значение условия «ложь», то команды, записанные в квадратных скобках, не выполняются. Формат команды для полной формы разветвляющего алгоритма: если_иначе условие [список команд i] [список команд 2] Команда состоит из ключевого слова если_иначе и трех входных параметров: условия и двух списков команд. Первый список команд содержит те команды, которые надо выполнить, если условие выполняется (истинно). Второй список команд содержит команды, которые надо выполнить в случае, когда условие ложно. Теперь научим Черепашку «нырять под воду» — становиться невидимой. На русском языке мы объяснили бы объекту, что он должен делать, таким образом: Если цвет под пером голубой (номер 85), то стань невидимой, подожди некоторое время и снова покажись. В приведенном выше объяснении после слова «если» записано условие: цвет под пером голубой (номер 85). На языке ЛОГО это условие будет выглядеть так: цп = 85. Действия, которые должна выполнить Черепашка, записаны после слова «то»: стань невидимой, подожди некоторое время и снова покажись. На языке ЛОГО эти действия выражаются командами: сч жди 10 пч. Разветвляющийся алгоритм для Черепашки выглядит следующим образом: если ЦП = 85 [сч жди 10 пч] Задание 7.84 Нарисуйте на рабочем поле озеро командой озеро 1 360 85 и установите Черепашку вне озера. а) Введите команду: если ЦП = 85 [сч жди 10 пч] Вы видите, что при цвете под пером, не равном 85, никаких действий не выполняется. б) Переместите Черепашку на озеро. Введите в командном центре команду: если ЦП = 85 [сч жди 10 пч] Черепашка исчезла на некоторое время, а потом появилась опять. 298 Раздел 7. Программирование в среде ЛОГО Теперь пусть Черепашка на берегу оставляет квадратный коврик, Ваш алгоритм должен предусматривать один список действий при выполнении условия и другой — в противном случае: Если цвет под пером голубой (номер 85), то стань невидимой, подожди некоторое время и покажись, иначе нарисуй квадрат со стороной 10 шагов. Запишем этот алгоритм на языке Лого: если_иначе цп = 85 [см жди 10 пч] [по нц 65 цв_кв 10 ] Задание 7.85 Нарисуйте на рабочем поле озеро командой озеро 1 360 85 и установите Черепашку вне озера. а) Введите команду; если_иначе цп = 85 [сч жди 10 пч] [по нц 65 плитка 10 45] Вы видите, что при цвете под пером, не равном 85, Черепашка рисует коврик. б) Переместите Черепашку на озеро. Введите в командном центре команду: если_иначе цп = 85 [сч жди 10 пч] [по нц 65 плитка 10 45] Черепашка исчезла на некоторое время, а потом появилась опять. Создание процесса в среде программирования в заданиях 7.84 и 7.85 Черепашка один раз выполняла действия, изменяющие ее состояние. Что получится, если эти действия повторять в течение некоторого времени t? Процедура фортуна забрасывает Черепашку в случайную точку рабочего поля. Что мы будем наблюдать на экране, если запускать ее несколько (t) раз? Задание 7.86 Нарисуйте на рабочем поле озеро командой озеро 1 360 85 и установите Черепашку вне озера. Тема 7.8. Логика в среде программирования 299 а) Введите команду: повтори 100 [фортуна] Черепашка «летает» по рабочему полю. б) Введите команду: повтори 100 [фортуна если цп = 85 [сч жди 10 пч]] Поведение Черепашки изменилось. Попадая на озеро, она исчезает на некоторое время, а потом снова появляется. в) Введите в командном центре команду: повтори 100 [фортуна если_иначе цп = 85 [жди 10 сч жди 10 пч] [плитка 10 45]] Теперь Черепашка то исчезает в озере, то рисует коврик на берегу. Последовательную смену состояний объекта в результате произведенных действий называют процессом. Процесс обязательно разворачивается во времени. В среде программирования за единицу времени можно принять один проход цикла. Циклический алгоритм является одним из способов моделирования процесса в среде программирования В среде ЛОГО можно создать повторяюш;ийся процесс и другим способом. Известно, что в теле процедуры допускается вызов любой процедуры, в том числе и той же самой. Оформим алгоритм изменения состояния Черепашки как процедуру: это изм_сост фортуна если_иначе цп = 85 [жди 10 сч жди 10 пч] [плитка 10 45]] конец Для моделирования процесса прогулки вокруг озера предложим следующую программу: это прогулка изм_сост прогулка конец Выполнение алгоритма прогулка напоминает известную сказку про белого бычка: по команде изм_сост Черепашка изменяет свое состояние, затем снова вызывается программа про - 300 Раздел 7. Программирование в среде ЛОГО гулка и все начинается сначала. Указанный способ вызова процедуры, прогулка называется рекурсией. I Рекурсивный алгоритм — это алгоритм повторения, в котором процедура по ходу ее выполнения обращается к самой себе. Процесс, основанный на рекурсивном вызове, называется рекурсивным. В природе существует множество рекурсивных процессов: курица несет яйцо, из яйца появляется цыпленок, который вырастает в курицу, которая несет новые яйца; на дереве образуется семечко, семечко падает в землю и из него вырастает новое дерево, и т. д. Рекурсивный алгоритм применяется для моделирования подобных рекурсивных процессов. Рассмотрим новый графический объект — «Спираль*. Пусть Черепашка рисует некоторый отрезок и поворачивается на определенный угол. На каждом проходе рекурсии отрезок должен уменьшаться, а угол оставаться неизменным: это спираль с угол вп :с пр :угол спираль :с - 5 :угол конец Введя команду по спираль 50 90, вы будете наблюдать бесконечный процесс рисования прямоугольной спирали. Вы можете ограничить спираль, задав, например, минимальный допустимый отрезок, это спираль с угол если :с < 5 [стоп] вп :с пр :угол спираль :с - 5 :угол конец Таким образом, бесконечный рекурсивный процесс можно завершить, применив разветвляющийся алгоритм. Задание 7.87 Сравните подготовленную вами ранее процедуру лабиринт, которая строит лабиринт из квадратных цветных плиток указанных размера и цвета, с процедурой, приведенной ниже: это лабиринт ст цв пусть "ХТ Х_К00р пусть "ут у=КООр пусть "ЦТ цвет Тема 7.8. Логика в среде программирования 301 сч повтори 4 [плитка :ст ;цв нов_х х_коор + :ст] повтори 3 [плитка ;ст :цв нов_у у_коор + :ст] нов_у у_коор - :ст нов_х х_коор - ;ст повтори 6 [плитка ;ст :цв нов_х х_коор - :ст] пп нов_х :хт нов_у :ут нц ;цт нк 90 пч конец В приведенном алгоритме Черепашка после рисования лабиринта помещается в середину первой плитки, а ее голова смотрит на Восток. Используя программу лабиринт, нарисуйте на рабочем поле лабиринт из голубых (цвет 85) плиток размером 30 шагов. Измерьте цвет под пером Черепашки, выведя его значение в командный центр. Задание 7.88 Черепашка находится в лабиринте. Вводя несколько раз команды вп 30 покажи ЦП = 85, проведите ее до поворота. Черепашка окажется вне лабиринта. Какое слово появится в командном центре — «истина» или «ложь»? Что теперь должна делать Черепашка? Как научить Черепашку самостоятельно проходить лабиринт, если она уже стоит в нем и смотрит вдоль правильного пути? В этой задаче взаимодействуют два объекта — Черепашка и лабиринт. Черепашка должна знать параметры второго объекта — длину стороны и цвет плитки. В этом алгоритме возникает необходимость разработать вспомогательный алгоритм ищи_ход. Черепашке надо вернуться на предыдущую плитку и повернуться на прямой угол. Сравните придуманный вами алгоритм с представленным в табл. 7.21. Задание 7.89 Запишите программы путь_по_лаб и ищи_ход на листе программ. Проверьте, как Черепашка выбирается из лабиринта. Выйдет ли Черепашка из лабиринта? Нужно ли задать еще один параметр объекта «Лабиринт», чтобы Черепашка распознала правильный путь? 302 Раздел 7. Программирование в среде ЛОГО Таблица 7.21. Программы прохождения по лабиринту Словесное описание Программа Путь по лабиринту это путь по лаб т с цл Повторить т раз: повтори :т если под пером — цвет лабиринта [если_иначе цп = :цл ТО вперед на с шагов, [вп :с] иначе назад на с шагов [нд :с Ищи ход ищи ход :с] Конец повторения ] Конец конец Ищи ход это ищи_ход с налево на 90° лв 90 вперед на с шагов вп : с Конец конец Черепашка странно ведет себя в лабиринте. На каком-то участке она в панике бегает по одним и тем же плиткам до тех пор, пока не кончится отведенное время. Очевидно, ей необходима «нить Ариадны», чтобы отмечать уже пройденные участки. Например, Черепашка может оставлять след на каждой пройденной плитке: это путь_по_лаб1 с цл пп вп :с если_иначе цп = :цл [нд :с по штамп пп вп :с] [если_иначе цвет = :цл [стоп] [нд :с лв 90]] путь_по_лаб1 :с :цл конец Теперь Черепашка поворачивается и иш;ет путь, по которому она еш;е не проходила. Здесь уместно применить рекурсию. Задание 7.90 Запишите процедуру путь_по_лаб1 на листе программ. Проверьте, как теперь Черепашка выбирается из лабиринта. Сколько времени ей потребуется? Нужно ли задать еш,е один параметр объекта «Лабиринт», чтобы Черепашка остановилась в конце лабиринта? Предложите свой вариант решения. Тема 7.8. Логика в среде программирования 303 Моделирование системы Для моделирования в среде программирования некоторой системы необходимо понять, для чего вам нужна эта модель, то есть поставить цель. Затем вы описываете объекты, которые будут составлять систему, и, конечно, их параметры. Вам надо будет задать правила взаимодействия этих объектов. Одним словом, для моделирования вам придется подготовить инструмент — процедуры и модули. Моделирование можно сравнить с представлением в театре. Вы создаете свой маленький мир — микромир, готовите декорации, маски, костюмы, подбираете актеров, учите с ними роли. Затем запускаете процесс изменения параметров определенного объекта. То, что происходит потом, кажется загадочным, но постепенно вы разбираетесь в ходе событий, иногда обнаруживаете ошибки в описании объектов или их взаимодействия и в конце концов достигаете поставленной цели. Представьте, что Черепашка обучена нескольким профессиям и отправилась путешествовать по рабочему полю. Судьба забрасывает Черепашку в разные части света. В зависимости от положения на координатной плоскости Черепашка выполняет ту или иную известную ей работу, например рисует определенный объект. Цель нашего моделирования — освоить законы логики. Для этого вы познакомитесь с историями из жизни Черепашки в созданном микромире. Каждая история происходит в течение времени t, поэтому ее можно моделировать с помощью цикла. На листе программ вам нужно подготовить инструменты для рисования объектов, создания процессов из жизни Черепашки в роли разных мастеров. Необходимые процедуры описаны в табл. 7.22 и 7.23. История 1. Черепашка-лесник Всякий раз, попадая на поле справа от вертикальной границы X = 60, Черепашка должна сажать дерево. Цвет дерева выбирается случайно в интервале от 51 до 58. Высота дерева должна быть не более 20 шагов Черепашки. История 2. Черепашка-садовник Всякий раз, попадая на поле слева от вертикальной границы х = 0, Черепашка должна сажать цветок. Цвет цветка выбирается случайно в интервале от 41 до 48. Количество лепестков цветка — не более 8. 304 Раздел 7. Программирование в среде ЛОГО Задание 7.91 Запишите процедуры, перечисленные в табл. 7.22 и 7.23, на листе программ и проверьте, как они работают. Таблица 7.22. Инструменты-процедуры для создания объектов (к заданию 7.91) Объект Параметры Инструмент-процедура Название Значе- ние Дуга Угол поворота а это дуга_пр а с правая Крутизна с повтори :а [вп : конец с пр 1] Лепесток Нет нет это лепесток из двух дуга_пр 90 0.25 пр 90 дуг дуга_пр 90 0.25 конец пр 90 Цветок Количество к это цветок к ц лепестков по нц ;ц НК 0 вп 30 Цвет лепест- Ц повтори ;к [лепесток пр 360 / :к] ка пп конец Ветка Высота В это ветка в вп : в нд :в лв 15 вп ;в нд : вп ;в нд :в лв 15 нд ;в конец в пр 30 Дерево Высота В это дерево в ц Цвет ц нц :ц нк 0 по лв 15 ветка :в / 2 пр 30 ветка ;в / лв 15 нд :в / 4 лв 15 ветка :в 2 пр 30 ветка :в лв 15 нд :в / 4 пп конец Плитка Сторона с плитка ;с :ц (см. табл. 7.18) Цвет ц Тема 7.8. Логика в среде программирования 305 Таблица 7.23. Инструменты для создания процессов Процесс (действия за один проход цикла) Инструмент (процедура) Судьба, забрасывающая исполнителя Черепашку в случайную точку это фортуна пп нов_х -300 + сл 600 нов_у -180 + сл 360 конец Посадка дерева со случайными высотой и цветом это лесник дерево сл 20 51 + сл 8 конец Посадка цветка со случайными числом лепестков и цветом это садовник цветок сл 8 41 + сл 8 конец Задание 7.92 Напишите по словесному алгоритму программу история_1 для моделирования первой истории в течение времени t: Алгоритм истории 1 Повторить t раз следующие действия: Судьба забросила Черепашку в случайную точку. Если X > 60 (справа от вертикальной границы), то выполнить роль лесника Конец цикла Конец истории 1 Задание 7.93 Напишите по словесному алгоритму программу история_2 для моделирования второй истории в течение времени t: Алгоритм истории 2 Повторить t раз следующие действия: Судьба забросила Черепашку в случайную точку. Если X < О (слева от вертикальной границы), то выполнить роль садовника Конец цикла Конец истории 2 Задания для самостоятельной работы Задание 7.94. Выведите в командный центр с помощью команды покажи результаты сравнения: 306 Раздел 7. Программирование в среде ЛОГО а) 2 X 2 = 4; б) 21 / 7 > 3; в) 7 X 3 = 21. Задание 7.95. Что выведет Черепашка на рабочее поле после выполнения следуюш;их команд; а) пусть "а 12 нц 12 пиши :а = цвет б) нов_х 200 пиши х_коор > 0 в) нов_у -150 пиши у_коор < -100 г) пусть "Ь у_коор < -100 пиши :Ь Задание 7.96. Нарисуйте блок-схему алгоритма прохождения лабиринта. Задание 7.97. Приведите примеры, когда выбор тех или иных действий зависит от некоторого условия. Задание 7.98. Нарисуйте в тетради координатную плоскость. Покажите на ней, что будет изображено на рабочем поле после выполнения команд: а) сотри история_1 5; б) сотри история_2 6. Сколько объектов-деревьев и объектов-цветков будет нарисовано на экране? Где они будут расположены? Задание 7.99. Развитие задачи про лабиринт. Добавьте объекту «Лабиринт» егце один параметр, который показывал бы, что Черепашка вышла из лабиринта и может остановиться. Опишите словами и блок-схемой алгоритм прохода лабиринта с учетом анализа значения нового параметра. Задание 7.100. Составьте процедуру рисования спирали, которая раскручивается, увеличивая после каждого поворота длину отрезка. Задание 7.101. Что будет выведено в командный центр по команде: а) покажи 113 < 50; б) покажи (целое 25 / 5) = 0; в) покажи цвет = цп. Задание 7.102. Какую команду надо ввести, чтобы в командном окне было печатано да, если цвет под Черепашкой равен О, и нет, если цвет не равен О? РАЗДЕЛ 8 Основы алгоритмизации Тема 8.1 Линейные алгоритмы.......................308 Тема 8.2 Разветвляющиеся алгоритмы ...............317 Тема 8.3 Циклические алгоритмы. Цикл с предусловием....................331 Тема 8.4 Цикл с известным числом повторений . . . 347 Тема 8.5 Цикл с постусловием......................362 Тема 8.1 Линейные алгоритмы Выполнив задания этой темы, вы научитесь: представлять линейный алгоритм в различных формах; использовать линейные алгоритмы при решении задач; применять переменные для хранения данных; ‘'"^осуществлять ввод-вывод информации. Как вам уже известно, существуют различные типы алгоритмов и разные формы их представления. Для представления линейного алгоритма в виде блок-схемы используются блоки ввода-вывода, выполнения действий, вызова вспомогательного алгоритма. Для представления линейного алгоритма в виде программы используются операторы ввода-вывода, оператор присваивания, оператор вызова вспомогательного алгоритма. Задание 8.1 Коллекция Эрмитажа содержит более 2 800 000 единиц хранения, Если у каждого музейного экспоната задержаться всего на 5 минут и проводить в Эрмитаже по 8 часов каждый день, то может не хватить жизни, чтобы ознакомиться со всей коллекцией. Требуется вычислить суммарное время просмотра всей коллекции в минутах, часах, днях, годах, «жизнях», считая, что средняя продолжительность жизни в России составляет 70 лет. Тема 8.1. Линейные алгоритмы 309 Словесный алгоритм Начало алгоритма 1. Введите количество экземпляров коллекции. 2. Рассчитайте время просмотра всех экземпляров: • в минутах; • в часах; • в днях; • в годах; • в «жизнях». 3. Выведите результаты расчетов. Конец алгоритма Алгоритм в виде блок-схемы 1 Вывод подсказки Ввод п Расчет времени в минутах, часах, днях, годах, «жизнях» Вывод расчетов Рис. 8.1. Блок-схема алгоритма (к заданию 8.1) Алгоритм в виде программы В табл. 8.1 приведена программа к заданию на школьном алгоритмическом языке Кумир (с пояснениями). В табл. 8.2 приведены тексты программ на языках программирования Паскаль и Visual Basic. Таблица 8.1. Программа на Кумире с пояснениями (к заданию 8.1) № Программа на Кумире Пояснения Тест 1 алг Коллекция Начало программы нач цел п, т, ch, d, g, life Описание переменных: количество экземпляров, минуты, часы, дни, годы, «жизни» 2 вывод "Введите количество экземпляров коллекции" Приглашение к вводу числа 3 ввод п Ввод числа 2800000 310 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения Тест 4 m := п * 5 Расчет времени: 14000000 ch := div(m, 60) d := div(ch, 8) g := div(d, 365) в минутах в часах в днях в годах 233333 29166 79 life := div(g, 70) в «жизнях» с использованием целочисленного деления 1 5 вывод "количество:" Вывод расчетов + вывод "минут", m -ь вывод "часов", ch -f вывод "дней", d ■f вывод "лет", g вывод "жизней", life -н 6 КОН Конец алгоритма Таблица 8.2. Примеры программ на Паскале и Visual Basic (к заданию 8.1) № Программа на Паскале Программа на Visual Basic 1 program Kollekciy; Private Sub Kollekciy_Click() var n, m, ch, d, g, life: longint; Dim n As Long, m As Long, ch As Long, d As Long, g As Long, life As Long begin 2 writeC Введите количество экземпляров коллекции: '); n = Уа1(1при1Вох("Введите кол-во экземпляров")) 3 readln(n); 4 m := n * 5 ; m = n * 5 ch := m div 60; ch = m Div 60 d := ch div 8; d = ch Div 8 g := d div 365; g = d Div 365 life := g div 70; life = g Div 70 Тема 8.1. Линейные алгоритмы 311 № Программа на Паскале Программа на Visual Basic 5 writeln(’кoличecтвo; ’); Print "количество:" writelnCминут: т); Print "минут: ", m writeln('4acoB; ch); Print "часов: ", ch writelnC дней: d); Print "дней: d writelnC лет: > g)! Print "лет: g writeInCжизнeй: life); Print "жизней:"; life 6 end. End Sub Задание 8.2 Требуется рассчитать параметры прямоугольного треугольника с углом 30° по заданному катету, лежащему против угла 30°. Словесный алгоритм Начало алгоритма 1. Введите длину катета. 2. Рассчитайте гипотенузу по введенному катету, исходя из свойств треугольника. 3. Рассчитайте второй катет по теореме Пифагора. 4. Выведите расчеты. Конец алгоритма Алгоритм в виде блок-схемы .G Начало Вывод подсказки Ввод катета а Расчет гипотенузы с Расчет катета b ' Вывод расчетов ^ Конец ^ Рис. 8.2. Блок-схема алгоритма (к заданию 8.2) 312 Раздел 8. Основы алгоритмизации Алгоритм в виде программы В табл. 8.3 приведена программа к заданию на школьном алгоритмическом языке Кумир. В табл. 8.4 приведены тексты программ на языках программирования Паскаль и Visual Basic. Таблица 8.3. Программа на Кумире с пояснениями (к заданию 8.2) № Программа на Кумире Пояснения Тест 1 алг Прямоугольный_тре-угольник Начало программы нач вещ а, Ь, с Описание переменных 2 вывод "Введите катет" Приглашение к вводу числа 3 ввод а Ввод числа 50 4 с := а * 2 Расчет гипотенузы 100 5 Ь := sqrt(c * с - а * а) Расчет катета 86,6 6 вывод "Длина 1-го катета", а вывод "Длина 2-го катета", Ь вьшод "Длина гипотенузы", с Вывод расчетов 7 кон Конец алгоритма Таблица 8.4. Примеры программ на Паскале и Visual Basic (к заданию 8.2) № Программа на Паскале Программа на Visual Basic 1 program Prym_treug; Private Sub Prym_treug_Click() var а, b, с: real; Dim a As Single, b As Single, c As Single begin 2 writeCВведите катет: '); a = Val(InputBox( "Введите катет")) 3 readln(a); 4 с a * 2; с = a * 2 5 b := sqrt(c * c - a * a); b = Sqr(c"2 - a"2) 6 writeln('Длина 1-ro катета: ', a); writelnCДлина 2-ro катета: ', b); writelnCДлина гипотенузы: ’, с); Print "Длина 1-ro катета: ", a Print "Длина 2-ro катета: ", b Print "Длина гипотенузы: ", с 7 end. End Sub Тема 8.1. Линейные алгоритмы 313 Задание 8.3 На памятнике Пифагору высечен чертеж вписанного в цилиндр шара, так как Пифагор нашел соотношение между их объемами. Современный почитатель гения Пифагора решил создать объемный памятник в честь этого открытия. Городские власти определили статус памятника — скульптура малой формы, и выделили для него небольшую плогцадь. Требуется рассчитать объем цилиндра и вписанного в него шара по заданной площади основания памятника (цилиндра) и убедиться в правильности выведенного Пифагором соотношения. Рис. 8.3. К заданию 8.3 Словесный алгоритм Начало алгоритма 1. Введите значение площади основания цилиндра. 2. Рассчитайте радиус основания цилиндра. , 3. Рассчитайте объем цилиндра. 4. Рассчитайте объем шара. 5. Найдите соотношение между объемами цилиндра и шара. 6. Выведите расчеты. Конец алгоритма Алгоритм в виде блок-схемы Рис. 8.4. Блок-схема алгоритма (к заданию 8.3) 314 Раздел 8. Основы алгоритмизации Алгоритм в виде программы В табл. 8.5 приведена программа к заданию на школьном алгоритмическом языке Кумир. В табл. 8.6 приведены тексты программ на языках программирования Паскаль и Visual Basic. Таблица 8.5. Программа на Кумире с пояснениями (к заданию 8.3) № Программа на Кумире Пояснения Тест 1 £1лг Памятник_Пифагору Начало программы нач вещ г, s, vshara, veil, к Описание переменных 2 вывод "Введите площадь основания цилиндра" Приглашение к вводу числа 3 ввод S Ввод площади основания 314 (см2) 4 г ;= sqrt(s / 3.1415926) Расчет радиуса 10.0 (см) 5 veil := s * 2 * г Расчет объема цилиндра 6278.5 (см3) vshara := 4 / 3 * 3.1415926 * г ** 3 Расчет объема шара 4185.7 (см3) 6 к := veil / vshara Расчет отношения 1.5 7 вывод "Радиус основания =", г вывод "Объем цилиндра =", veil вывод "Объем шара, вписанного в цилиндр =", vshara вывод "Отношение =", к Вывод расчетов 8 кон Конец алгоритма Таблица 8.6. Примеры программ на Паскале и Visual Basic (к заданию 8.3) № Программа на Паскале Программа на Visual Basic 1 program Pifagor; Private Sub Pifagor_Click() var г, s, vshara, veil, к: real; Dim r As Single, s As Single, vshara As Single, veil As Single, к As Single Тема 8.1. Линейные алгоритмы 315 № Программа на Паскале Программа на Visual Basic begin 2 writeC Введите площадь основания: '); s = Val(InputBox(" Введите площадь основания ", "Пифагор")) 3 readln(s); 4 г := sqrt(s / pi); г = Sqr(s / 3.1415926) 5 veil := s * 2 * г; vshara := 4 / 3 * pi * sqr(r) * r; veil = s * 2 * г vshara = 4 / 3 * 3.1415926 * r''3 6 к ;= veil / vshara; к = veil / vshara 7 writelnCРадиус основания: ', r:6:l); writeln('06beM цилиндра: vcil:6:l); writeln('Объем шара: ', vshara:6:l); writeln('OTHomeHHe: k:3:l); Print "Радиус основания ="; FormatNumber(r, 1) Print "Объем цилиндра = "; FormatNumber (veil, 1) Print "Объем шара ="; FormatNumber(vshara, 1) Print " Отношение ="; FormatNumber(k, 1) 8 end. End Sub Контрольные вопросы и задания к заданию 8.1 1. Разработчик алгоритма к заданию 8.1 (рис. 8.1), введя переменную п, хотел придать алгоритму свойство массовости. Какие еще переменные следует ввести, чтобы алгоритм соответствовал этому свойству в полной мере? 2. В приведенном последовательном алгоритме порядок вывода расчетных данных можно изменять. Какие команды в приведенных программах нельзя переставлять? Почему? 3. На блок-схеме представлены два блока вывода информации на экран. В чем их различие? 4. Запишите в тетради имена переменных, которые были использованы в процессе решения задания. Напишите под ними значения переменных, полученные в результате тестирования. 5. Что происходит в результате выполнения блока 3 представленного алгоритма? 316 Раздел 8. Основы алгоритмизации Рис. 8.5. Чертеж для вычисления высоты и площади равнобедренной трапеции 6. Добавьте в программу блок вычислений, определяющий, сколько экспонатов в день удастся посмотреть посетителю. К заданию 8.2 1. Замените в программе формулу расчета катета Ъ = а-Уз и убедитесь, что результат от этого не изменится. 2. Используя готовый каркас ь блок-схемы, заполните его таким образом, чтобы по новой блок-схеме вычислялись высота и площадь равнобедренной трапеции с углом при основании 45° (рис. 8.5). Задание выполните в тетради. 3. Напишите текст программы на Кумире или другом языке для полученной блок-схемы. 4. Что надо изменить в условии задачи, чтобы расширить границы применимости алгоритма? 5. Из пояснительного рисунка видно, что а > Ь. Что произойдет, если при вводе а и Ь это соотношение будет нарушено? К заданию 8.3 1. При расчетах радиуса и объемов используется константа 3,1415926. Что нужно изменить в программе, чтобы не набирать ее каждый раз заново? 2. В примере программы на языке Кумир тип используемых переменных описан следующим образом: вещ г, s, vshara, veil, к. Что означает эта запись? Почему для переменных выбран такой тип? 3. В формуле вычисления объема шара используется формула F = г^. В примерах программ на разных языках она записана по-разному. Есть ли здесь ошибки? Объясните, что означают разные записи? Придумайте такой вид записи, который будет верен для всех языков. 4. Можно ли изменить последовательность операторов расчета? Тема 8.2 Разветвляющиеся алгоритмы Выполнив задания этой темы, вы научитесь: 1111^ использовать различные структуры ветвления; III»- использовать простые и сложные условия; ш»- использовать вложенные ветвления; |111ф использовать структуру множественного выбора при наличии более чем двух ситуаций; ши», тестировать алгоритм в пошаговом режиме для проверки всех его ветвей. Для представления разветвляющегося алгоритма в виде блок-схемы используются блоки принятия решения. Для представления разветвляющегося алгоритма в виде программы используются условные операторы и операторы выбора (если вариантов выбора больше двух). Задание 8.4 Требуется разработать алгоритм проверки принадлежности введенного числа данной арифметической прогрессии. Прогрессия задается двумя последовательными членами. Словесный алгоритм Начало алгоритма 1. Введите два последовательных члена арифметической прогрессии. 2. Введите произвольное целое число. 3. Найдите разность (d) арифметической прогрессии. 4. Найдите разность между введенным числом и членом арифметической прогрессии. 5. Найдите остаток от деления нацело найденной разности на d. 6. Организуйте проверку остатка: • если остаток от деления равен О, выведите сообщение: «Число принадлежит рассматриваемой арифметической прогрессии»; 318 Раздел 8. Основы алгоритмизации • иначе выведите сообщение: «Число не принадлежит рассматриваемой арифметической прогрессии». Конец алгоритма Алгоритм в виде блок-схемы 10 Рис. 8.6. Блок-схема алгоритма (к заданию 8.4) Тема 8.2. Разветвляющиеся алгоритмы 319 Алгоритм в виде программы В табл. 8.7 приведена программа к заданию на алгоритмическом языке Кумир. В табл. 8.8 приведены тексты программ на языках программирования Паскаль и Visual Basic. Таблица 8.7. Программа на Кумире с пояснениями (к заданию 8.4) № Программа на Кумире Пояснения Тестирование Тест 1 Тест 2 Тест 3 1 алг Прогрессия Начало программы нач цел al, а2, с, d, razn, ost Описание переменных 2 вывод "Введите два последовательных члена арифметической прогрессии" Приглашение к вводу чисел 3 ввод al, а2 Ввод чисел 3 7 3 7 3 7 4 вывод "Введите произвольное целое число" Приглашение к вводу числа 5 ввод с Ввод числа 18 11 -1 6 d := а2 - al Расчет разности арифметической прогрессии 4 4 4 7 razn := с - al Расчет разности между введенным числом и членом арифметической прогрессии 15 8 -4 8 ost := mod(razn, d) Расчет остатка от деления разности на d 3 0 0 320 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения Тестирование Тест 1 Тест 2 Тест 3 9 если ost = 0 Проверка равенства остатка 0 Нет Да Да 10 то То вывод "Число", с, " принадлежит рассматриваемой арифметической прогрессии:", al, ", " , а2 Вывод текста на экран + -1- 11 иначе Иначе вывод "Число", с, " не принадлежит рассматриваемой арифметической прогрессии;", al, ", ", а2 Вывод текста на экран -1- все Конец Если 12 кон Конец алгоритма Таблица 8.8. Примеры программ на Паскале и Visual Basic (к заданию 8.4) № Программа на Паскале Программа на Visual Basic 1 program Progress; Private Sub Progress_Click() var al, a2, c, d, razn, ost: integer; Dim al As Integer, a2 As Integer, c As Integer, d As Integer, razn As Integer, ost As Integer begin 2 \угДе('Введите два последовательных члена арифметической прогрессии: '); al = Val(InputBox(" Введите 1-й член арифметической прогрессии", "Прогрессия")) а2 = Val(InputBox("Введите 2-й член арифметической прогрессии", "Прогрессия")) 3 readln(al, а2); Тема 8.2. Разветвляющиеся алгоритмы 321 № Программа на Паскале Программа на Visual Basic 4 writeC Введите произвольное целое число: '); с = Уа1(1при1Вох("Введите произвольное целое число", "Прогрессия")) 5 readln(c); 6 d := а2 - al; d = а2 - al 7 razn := с - al; razn = с - al 8 ost := razn mod d; ost = razn Mod d 9 if ost = 0 then If ost = 0 Then 10 writeln('Число c, ' принадлежит арифм. прогрессии: al, a2) Print "Число "; c; " принадлежит арифм. прогрессии: "; al; ", "; a2 else Else 11 writeln('4Hcno c, 'не принадлежит арифм. прогрессии; ', al, ', ', а2); Print "Число "; c; " не принадлежит арифм. прогрессии: "; al; ", "; а2 End If 12 end. End Sub Задание 8.5 Из «Арифметики» таджикского ученого Авиценны (X-XI вв.) известно следующее свойство целых чисел: если число, будучи разделено на 9, дает в остатке 1 или 8, то квадрат этого числа, деленный на 9, даст 1. Требуется подтвердить верность свойства или опровергнуть его. Словесный алгоритм Начало алгоритма 1. Введите целое число. 2. Найдите остаток от деления этого числа на 8. 3. Организуйте проверку остатка на равенство 1 или 8: • если остаток от деления равен 1 или 8, то: а) найдите квадрат введенного числа; б) найдите остаток от деления квадрата числа на 9; 322 Раздел 8. Основы алгоритмизации в) организуйте проверку остатка от деления: если остаток равен 1, то выведите сообщение «Свойство верно», иначе выведите сообщение «Свойство не верно»; • иначе (остаток от деления не равен 1 и остаток от деления не равен 8) выведите сообщение «Остаток от деления о 1 и Остаток от деления <> 8». Конец алгоритма Алгоритм в виде блок-схемы Тема 8.2. Разветвляющиеся алгоритмы 323 Алгоритм в виде программы В табл. 8.9 приведена программа к заданию на алгоритмическом языке Кумир. В табл. 8.10 приведены тексты программ на языках Паскаль и Visual Basic. Таблица 8.9. Программа на Кумире с пояснениями (к заданию 8.5) № Программа на Кумире Пояснения Тестирование Тест 1 Тест 2 Тест 3 1 алг Свойства_чисел Начало программы нач цел п, kvn, ostl, ost2 Описание переменных 2 ВЫВОД "Введите целое число" Приглашение к вводу числа 3 ввод п Ввод числа 14 17 10 4 ostl := mod(n, 9) Получение остатка от деления на 9 5 8 ??? 5 если (ostl = 1) или (ostl = 8) Нет Да ??? ТО 6 kvn := n * n 289 ??? 7 ost2 ;= mod(kvn, 9) 1 ??? 8 если ost2 = 1 Проверка, равен ли 1 остаток от деления квадрата числа на 9 Да ??? TO То 9 вывод "Свойство верно" Вывод текста на экран - + ??? 10 иначе Иначе 324 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения Тестирование Тест 1 Тест 2 Тест 3 ВЫВОД "Свойство не верно" Вывод текста на экран - - ??? все Конец Если (8) 11 иначе Иначе вывод "Остаток <> 1 и Остаток о 8" Вывод текста на экран + - ??? все Конец Если (5) 12 кон Таблица 8.10. Примеры программ на Паскале и Visual Basic (к заданию 8.5) № Программа на Паскале Программа на Visual Basic 1 program Avicenna; Private Sub Avicenna_Click() var n, kvn, ostl, ost2: integer; Dim n As Integer, kvn As Integer, ostl As Integer, ost2 As Integer begin 2 writeCВведите целое число: ’); n = Val(InputBox("Bвeдитe целое число", "Свойства")) 3 readln(n); 4 ostl := n mod 9; ostl = n Mod 9 5 if (ostl = 1) or (ostl = 8) then If (ostl = 1) Or (ostl = 8) Then begin 6 kvn := n * n; kvn = n * n 7 ost2 := kvn mod 9; ost2 = kvn Mod 9 8 if ost2 =1 then If ost2 = 1 Then Тема 8.2. Разветвляющиеся алгоритмы 325 № Программа на Паскале Программа на Visual Basic 9 writeln('Свойство верно') Print "Свойство верно" else Else 10 writelnCСвойство не верно') Print "Свойство не верно" end End If else Else 11 writeln('OcTaTOK <> 1 и Остаток о 8'); Print "Остаток <> 1 и Остаток о 8" End If 12 end. End Sub Задание 8.6 Требуется определить тип треугольника по двум введенным углам. При выполнении задания необходимо учесть ситуации некорректного ввода данных, например: 90, 90 или 120, 80. Словесный алгоритм Начало алгоритма 1. Введите два угла треугольника в градусах. 2. Организуйте проверку типа треугольника: • если сумма двух углов меньше 180°, то вычислите значение третьего угла и рассмотрите три ситуации: а) если все углы острые, то выведите сообщение «Треугольник остроугольный»; б) если один из углов равен 90°, то выведите сообщение «Треугольник прямоугольный»; в) в противном случае выведите сообщение «Треугольник тупоугольный »; • иначе (если сумма углов больше 180°) выведите сообщение «Некорректный ввод». Конец алгоритма 326 Раздел 8. Основы алгоритмизации Алгоритм в виде блок-схемы Рис. 8.8. Блок-схема алгоритма (к заданию 8.6) Фраза «один из углов равен 90°» в словесном алгоритме понятна человеку. Для компьютера ее следует детализировать, рассмотрев три ситуации (для каждого из углов ul, u2, u3). На алгоритмическом языке эта проверка может выглядеть следующим образом: ((ul = 90) и (u2 о 90) и (иЗ <> 90)) или ((u2 = 90) Тема 8.2. Разветвляющиеся алгоритмы 327 и (ul о 90) и (иЗ о 90)) или ((иЗ = 90) и (ul <> 90) и (u2 <> 90)). Чтобы упростить проверку, в алгоритм должен быть введен блок, обеспечивающий условие «сумма углов = 180». После этого достаточно рассмотреть выполнение условия «(ul = 90) или (п2 = 90) или (иЗ = 90)». Алгоритм в виде программы В табл. 8.11 приведена программа к заданию на алгоритмическом языке Кумир. В табл. 8.12 приведены тексты программ на языках Паскаль и Visual Basic. Таблица 8.11. Программа на Кумире с пояснениями (к заданию 8.6) № Программа на Кумире Пояснения Тестирование Тест 1 Тест 2 Тест 3 1 алг Типтреуголь- ника Начало программы нач цел ul, u2, u3 Описание переменных 2 вывод "Введите два угла треугольника в градусах" Приглашение к вводу углов 3 ввод ul, u2 Ввод углов 100 80 120 45 70 60 4 если (ul + u2) < 180 Если сумма двух углов меньше 180° Нет Да Да ТО То 5 u3 := 180 - (ul + u2) Расчет третьего угла - 15 50 выбор Выбор из трех ситуаций - 328 Раздел 8. Основы алгоритмизации № Программа Пояснения Тестирование на Кумире Тест 1 Тест 2 Тест 3 6 при (ul < 90) и (u2 < 90) и (иЗ < 90): Если все углы острые Нет Да 7 вывод "Треугольник остроугольный " Вывод текста на экран — ■ + 8 при (ul = 90) или (u2 = 90) или (иЗ = 90): Если какой-то из углов равен 90° — Нет 9 ВЫВОД "Треугольник прямоуголь- ный" Вывод текста на экран иначе Иначе 10 вывод "Треугольник тупоугольный " Вывод текста на экран — -f все Конец Выбора иначе Иначе 11 вывод "Некорректный ввод" Вывод текста на экран + - - все Конец Если (4) 12 кон Конец алгоритма Таблица 8.12. Примеры программ на Паскале и Visual Basic (к заданию 8.6) № Программа на Паскале Программа на Visual Basic 1 program Treug; Private Sub Treug_Click() var ul, u2, u3: integer; Dim ul As Integer, u2 As Integer, u3 As Integer begin Тема 8.2. Разветвляющиеся алгоритмы 329 № Программа на Паскале Программа на Visual Basic 2 writeC Введите два угла треугольника: '); ul = Val(Inputbox(" Введите 1-й угол треугольника")) 3 readln(ul, u2); u2 = Уа1(1при1Ьох("Введите 2-й угол треугольника")) 4 if (ul + u2) < 180 then If (ul •+ u2) < 180 Then begin 5 u3 := 180 - (ul -i- u2); u3 = 180 - (ul -1- u2) 6 if (ul < 90) and (u2 < 90) and (u3 < 90) then If (ul < 90) And (u2 < 90) And (u3 < 90) Then 7 writeln(' Треугольник остроугольный') Print "Треугольник остроугольный" 8 else if (ul = 90) or (u2 = 90) or (u3 = 90) then Elself ul = 90 Or u2 = 90 Or u3 = 90 Then 9 writeln('TpeyroHbHHK прямоугольный') Print "Треугольник прямоугольный" else Else 10 writeln(’Tpeyгoльник тупоугольный'); Print "Треугольник тупоугольный" end End If else Else 11 writeln( 'Некорректный ввод'); Print "Некорректный ввод" End If 12 end. End Sub Контрольные вопросы и задания К заданию 8.4 1. Какое сообщение будет получено в результате выполнения алгоритма и программ, если введенное число с будет равно а! или а2? 330 Раздел 8. Основы алгоритмизации 2. Могут ли быть введены различающиеся по знаку или отрицательные числа а1 и а2? 3. Что надо изменить в блок-схеме и программе, чтобы они работали с тремя последовательными членами геометрической прогрессии (al, а2 — являются членами, с — следует проверить)? 4. Найдите на блок-схеме (см. рис. 8.6) блок ветвления и определите, является ли ветвление полным или нет. К заданию 8.5 1. Заполните таблицу тестирования для числа 10 (см. табл. 8.9). 2. Почему в 7-й строке табл. 8.9 тестирования (первый тест) ничего нет? 3. Достаточно ли представленных в табл. 8.9 тестов, чтобы проверить все ситуации, которые могут возникнуть при выполнении программ (все ветви алгоритма)? 4. Можно ли объединить оба условия проверки (пп. 5 и 8) в одно сложное условие? Напишите логическое выражение для подобной проверки. 5. Составьте самостоятельно фрагмент блок-схемы алгоритма для приема менеджера на работу по следующим условиям: • возраст от 30 до 40 лет; • знание персонального компьютера или стаж работы по специальности не менее 5 лет. К заданию 8.6 1. Почему при формировании сложного условия (см. табл. 8.11, п. 6) использована логическая связка И, а не ИЛИ? 2. Почему при формировании сложного условия (см. табл. 8.11, п. 8) использована логическая связка ИЛИ, а не И? 3. В алгоритме и программе тупоугольный треугольник определяется по веткам «иначе» (не прямоугольный и не остроугольный). Напишите самостоятельно сложное условие, определяющее, является ли треугольник тупоугольным. 4. Выполните тестирование программы для угла 90°. 5. Дополните алгоритм и программу блоком проверки положительных значений углов. Тема 8.3 Циклические алгоритмы. Цикл с предусловием Выполнив задания этой темы, вы научитесь: использовать цикл с предусловием для организации повторяющихся действий; тестировать циклические алгоритмы; использовать цикл Пока как универсальный для решения разного вида задач; использовать переменные разного типа для организации цикла. Цикл с предусловием относится к циклам с неизвестным числом повторений. В цикле с предусловием сначала проверяется выполнение условия продолжения цикла. Если условие истинно (да, true), то выполняется тело цикла, а иначе (нет. False) цикл завершается. Особенностью этого цикла является то, что если при 1-й проверке условие ложно, то тело цикла не выполнится ни разу. Специального блока для реализации цикла с предусловием в блок-схемах нет. Блок-схема алгоритма реализуется при помощи блока принятия решения, выполнения действий и др. Блок-схемы алгоритмов, содержащих циклы, легко узнаваемы, так как содержат возврат на предыдущие блоки («петлю»). Во всех языках программирования есть специальные операторы, реализующие этот цикл. Задание 8.7 Существуют простые правила определения делимости чисел на числа 3, 4, 5: ^ на 3 без остатка делятся числа, сумма цифр которых делится на 3; 332 Раздел 8. Основы алгоритмизации ^ на 4 без остатка делятся числа, у которых две последние цифры составляют число, делящееся на 4; Ф на 5 без остатка делятся числа, заканчивающиеся на цифры 5 и 0. Впервые эти правила были сформулированы в знаменитой «Книге Абака» итальянского математика Леонардо Фибоначчи (XII век). Требуется проверить делимость введенных чисел на 3 по первому из перечисленных правил. Словесный алгоритм Начало алгоритма 1. Введите число. 2. Пока цифры числа не закончатся; а) выделите очередную цифру как остаток от деления на 10; б) прибавьте эту цифру к общей сумме; в) удалите обработанную цифру из числа, получив новое число в виде частного от деления на 10. 3. Проверьте, делится ли полученная сумма на 3 без остатка: • если делится, то сообщите, что исходное число делится на 3; • иначе сообщите, что исходное число не делится на 3. Конец алгоритма Алгоритм в виде блок-схемы На рис. 8.9 приведена блок-схема, составленная по словесному алгоритму. Алгоритм в виде программы В табл. 8.13 приведена программа к заданию на алгоритмическом языке Кумир. В табл. 8.14 приведены тексты программ на языках Паскаль и Visual Basic. Тема 8.3. Циклические алгоритмы. Цикл с предусловием 333 Рис. 8.9. Блок-схема алгоритма (к заданию 8.7) 334 Раздел 8. Основы алгоритмизации Таблица 8.13. Программа на Кумире с пояснениями (к заданию 8.7) № Программа на Кумире Пояснения Тестирование 1 алг Дели-мостьнаЗ Начало программы Введите число нач цел п, п1, sum, cifra Описание переменных 2 вывод "Введите число" Приглашение к вводу 3 ввод п Ввод проверяемого числа 528 4 п1 := п Начальные уста-новки: чтобы сохранить значение п, запоминаем его в п1; обнуляем сумму цифр 528 sum := 0 0 5 нц пока п1 о 0 Пока введенное число не равно 0: 528<>0 Да 52<>0 Да 5<>0 Да ОоО Нет 6 cifra := mod(nl, 10) Выделение очередной цифры 8 2 5 - sum := sum -f cifra Добавление ее к сумме цифр 8 10 15 - nl ;= div(nl, 10) Удаление цифры из числа 52 5 0 - КЦ Конец цикла К п. 5 К п. 5 К п. 5 - 7 если mod(sum, 3) = 0 Если сумма делится на 3 (остаток от деления по модулю 3 равен 0) mod (15, 3) = 0 Да TO То 8 вывод n, делится на 3" Вывод числа п и сообщения "Число делится на 3" -ь Тема 8.3. Циклические алгоритмы. Цикл с предусловием 335 № Программа на Кумире Пояснения Тестирование иначе в противном случае: 9 вывод п, " не делится на 3" ? - - - все Конец Если 10 кон Конец программы Таблица 8.14. Примеры программ на Паскале и Visual Basic (к заданию 8.7) № Программа на Паскале Программа на Visual Basic 1 program Delimost; Private Sub Delen_Click() var n, nl, sum: word; cifra: 0..9; Dim n As Integer, nl As Integer, cifra As Integer, sum As Integer begin 2 writeCВведите число: '); n = Val(InputBox ("Введите число") 3 readln(n); 4 nl := n; nl = n sum := 0; sum = 0 5 while nl <> 0 do Do While nl <> 0 begin 6 cifra := nl mod 10; cifra = nl Mod 10 sum := sum -f cifra; sum = sum 4- cifra nl ;= nl div 10 nl = nl \ 10 end; Loop 7 if sum mod 3 = 0 then If sum Mod 3 = 0 Then 8 writelnCЧисло n, ' делится на 3' ) Print "Число " & n & " делится _ на 3" else Else 9 writeln('Чиcлo n, ' не делится на 3' ) Print "Число " & n & " не делится на 3" End If 10 end. End Sub 336 Раздел 8. Основы алгоритмизации Задание 8.8 Леонардо из Пизы, известный как Фибоначчи, был первым из великих математиков Европы позднего Средневековья. Числовой ряд, носящий в наше время имя Фибоначчи, вырос из проблемы с кроликами, которую Фибоначчи изложил в своей «Книге Абака», написанной в 1202 году. Он выглядит так: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,... В этом ряду каждое следующее число, начиная с третьего, равно сумме двух предыдущих (рис. 8.10). Требуется составить алгоритм проверки принадлежности введенного числа ряду чисел Фибоначчи. Количество пар 1 Рис. 8.10. К заданию 8.8 Словесный алгоритм Начало алгоритма 1. Введите число. 2. Установите значение первых трех чисел Фибоначчи: 1, 1, 1 + 1 (сумма двух предыдущих чисел). 3. Пока введенное число больше очередного числа Фибоначчи, возьмите два последних числа и получите из них новое число Фибоначчи. Тема 8.3. Циклические алгоритмы. Цикл с предусловием 337 4. Если число Фибоначчи, полученное по выходу из цикла, равно введенному (л) или было введено число л = 1, то сообщите «Да» (введено число Фибоначчи), в противном случае — сообщите «Нет» (введенное число не является числом Фибоначчи). Конец алгоритма Алгоритм в виде блок-схемы На рис. 8.11 приведена блок-схема, составленная по словесному алгоритму. Рис. 8.11. Блок-схема алгоритма (к заданию 8.8) 338 Раздел 8. Основы алгоритмизации Алгоритм в виде программы В табл. 8.15 приведена программа на алгоритмическом языке Кумир. В табл. 8.16 приведены тексты программы на языках программирования Паскаль и Visual Basic. Таблица 8.15. Программа на Кумире с пояснениями (к заданию 8.8) № Программа на Кумире Пояснения Тестирование 1 алг Фибоначчи Начало алгоритма нач цел fl, f2, f3, n Описание переменных 2 вывод "Введите число" ? Введите число 3 ввод п ? 13 4 fl := 1 Начальные установки: 3 первых числа Фибоначчи 1 f2 := 1 1 f3 := fl -1- f2 2 5 НЦ пока f3 < n Пока введенное число больше текущего значения числа Фибоначчи 2<13 Да 3<13 Да 5<13 Да 8<13 Да 13<13 Нет 6 fl := f2 Перепри-сваивание и нахож-дение следующего числа Фибоначчи 1 2 3 5 - f2 := f3 2 3 5 8 - f3 := fl -b f2 3 К п.5 5 К п.5 8 К п.5 13 К п.5 КЦ Конец цикла Пока Гема 8.3. Циклические алгоритмы. Цикл с предусловием 339 № Программа на Кумире Пояснения Тестирование 7 если (п = f3) или (п = 1) Если текущее число Фибоначчи равно введенному или введенное число = 1 13=13 Да 8 ТО То сообще- ние Да (число является числом Фибоначчи) вывод п, " является числом Фибоначчи" •4- 9 иначе Иначе сооб-щение "Нет" (число не является числом Фибоначчи) вывод п, "не является числом Фибоначчи" все Конец Если 10 КОН Конец алгоритма Таблица 8.16. Примеры программ на Паскале и Visual Basic (к заданию 8.8) № Программа на Паскале Программа на Visual Basic 1 program Fib; Private Sub Fib_Click() var fl, f2, f3, N: word; Dim n As Integer, fl As Integer, f2 As Integer, f3 As Integer begin 340 Раздел 8. Основы алгоритмизации № Программа на Паскале Программа на Visual Basic 2 writeC Введите проверяемое число: '); n = Уа1(1при1Вох("Введите число", "Число")) 3 readln(n); 4 fl := 1; f2 := 1; f3 := fl + f2; fl = 1: f2 = 1: f3 = fl + f2 5 while f3 < n do Do While f3 < n 6 begin fl := f2; f2 := f3; f3 := fl + f2 end; fl = f2 f2 = f3 f3 = fl + f2 Loop 7 if (n = f3) or (n = 1) then If (n = f3) Or (n = 1) Then 8 writeln(’Дa') Print n ; "Да" else Else 9 writeln('HeT'); Print n; "Нет" End If 10 end. End Sub Задание 8.9 в телевизионном эфире в США проводится марафон, цель которого — сбор средств для поддержки незащищенных слоев населения. Во время эфира слушатели отправляют на адрес студии телеграммы с указанием суммы пожертвования и цели, на реализацию которой пойдет эта сумма, например: «Посылаю 521$ в фонд помощи безработным. Смит». В конце марафона должна быть объявлена общая сумма пожертвований. Требуется составить алгоритм выделения из текста конкретной телеграммы числовых данных, заканчивающихся знаком $, для дальнейшего суммирования. Тема 8.3. Циклические алгоритмы. Цикл с предусловием 341 Словесный алгоритм Начало алгоритма 1. Запросите текст телеграммы. 2. Поместите текст в строку st. 3. Определите длину строки п. 4. Пока не закончатся все символы в строке или пока не встретится знак $, рассмотрите три ситуации: а) если символ — цифра, то получите цифровой эквивалент символа; добавьте полученную цифру в следующую позицию числа, из которого будет сформирована сумма пожертвования, и перейдите к следующему символу, увеличив счетчик символов: i = i + 1; б) если символ — «$», то установите признак окончания цифр d, который будет признаком досрочного выхода из цикла; в) если это другой символ (буква, знак препинания и т. п.), то перейдите к следующему символу, увеличив счетчик символов: i = i + 1. 5. Проанализируйте признак окончания цифр d. Если он равен 1, то сообщите сумму пожертвования, если нет — сообщите, что указания о сумме пожертвования в телеграмме нет. Конец алгоритма Алгоритм в виде блок-схемы На рис. 8.12 приведена блок-схема, составленная по словесному алгоритму. Алгоритм в виде программы В табл. 8.17 приведена программа на алгоритмическом языке Кумир. В табл. 8.18 приведены тексты программы на языках программирования Паскаль и Visual Basic. 342 Раздел 8. Основы алгоритмизации Рис. 8.12. Блок-схема алгоритма (к заданию 8.9) Тема 8.3. Циклические алгоритмы. Цикл с предусловием 343 Таблица 8.17. Программа на Кумире (к заданию 8.9) № Программа на Кумире Пояснения 1 алг Марафон Начало алгоритма нач лит st, сим sim, цел sum, ch, i, n, d Описание переменных 2 вывод "Введите строку" Вывод приглашения 3 ввод st Ввод текста телеграммы 4 n := длин(st) Подсчет длины строки 5 i ;= 1 d := 0 sum := 0 Начальные установки: счетчик символов = 1; обнуление признака $; обнуление суммы взноса 6 НЦ пока (i <= n) и (d = 0) Начало цикла: пока не закончилась строка и не появился $ 7 sim ;= st[i] Выделение очередного символа выбор Выбор одной из трех ситуаций: 8 при sim >= "0" и sim <= "9": Если выделенный символ — цифра, то: 9 ch ;= ueu(sim) - цел("0") Нахождение цифрового эквивалента символа; sum := sum * 10 + ch Добавление цифры в младший разряд к сдвинутым влево разрядам суммы 10 i ;= i + 1 Увеличение счетчика символов 11 при sim = Если выделенный символ — $, 12 d := 1 Установка признака $: d = 1 13 иначе Иначе Увеличение счетчика символов i := i + 1 все Конец выбора КЦ Конец цикла Пока 14 если d = 1 Если есть признак $ 15 TO То вывод "сумма в $ =", sum Вывод накопленной суммы 344 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения 16 иначе Иначе вывод " нет суммы в $" Вывод сообщения, что в тексте нет упоминания о сумме взноса все Конец ветвления "Если" 17 кон Конец алгоритма Таблица 8.18. Примеры программ на Паскале и Visual Basic (к заданию 8.9) № Программа на Паскале Программа на Visual Basic 1 program Tele; Private Sub Commandl_Click() var st: string; sum: longint; i, ch, n: byte; sim: char; d: integer; Dim st As String, sim As String, sum As Long, ch As Byte, i As Byte, n As Byte, d As Integer begin 2 writeln('BBeflHTe текст'); st = InputBoxC'BBeflHTe текст ", "Сумма", "Посылаю 521$ в фонд помощи безработным. Смит.") 3 readln(st); 4 n := length(st); п == Len(st) 'длина строки 5 i ;= 1; i = 1 d := 0; d = 0 sum := 0; Sum = 0 6 while (i <= n) and (d = 0) do Do While (i <= n) And (d = 0) begin 7 sim := st[i]; sim = Mid(st, i, 1) case sim of Select case sim 8 'O’..'9': Case "0" to "9" 9 begin ch := ord(sim) - ord('O’); ch = Asc(sim) - Asc("0") sum := sum * 10 + ch; Sum = Sum * 10 + ch 10 i := i + 1 i = i + 1 end; 11 Case "$" Тема 8.3. Циклические алгоритмы. Цикл с предусловием 345 № Программа на Паскале Программа на Visual Basic 12 d := 1 d = 1 13 else Case Else i := i -Ь 1 i = i -f- 1 end; End select end; Loop 14 if d = 1 then If d = 1 Then 15 writeln('Получена сумма ’, sum) Print "Сумма в $ = "; Sum else Else 16 writeln('HeT суммы в $'); Print "Нет суммы в $" End If 17 end. End Sub Контрольные вопросы и задания К заданию 8.7 1. Для чего нужны начальные установки в алгоритме? 2. Пройдите алгоритм по блок-схеме для числа 521 (см. рис. 8.9). Какое значение будет в переменных п1 и Sum перед выходом из цикла? 3. Добавьте в любую из программ оператор вывода переменных cifra и Sum. Какое значение и сколько раз будет выведено для числа 222? 4. Что произойдет, если пользователь введет число п равным нулю? 5. Напишите комментарий к п. 9 программы на Кумире (см. табл. 8.13). К заданию 8.8 1. Какие действия выполняются в блоке 6 (см. рис. 8.11) и соответствующем фрагменте программы на Кумире (см. табл. 8.15)? 2. Какое условие проверяется в данном алгоритме при входе в цикл с предусловием? 3. Запишите в тетради тело цикла с предусловием, используемое в данном алгоритме. 346 Раздел 8. Основы алгоритмизации 4. Придумайте и запишите пример ситуации, когда тело цикла не выполняется ни одного раза. 5. В блоке 3 алгоритма (см. рис. 8.11) было введено число 5. Сколько раз выполнится тело цикла? 6. Напишите пояснение к строкам 2 и 3 программы на Кумире (см. табл. 8.15). 7*. В блоке 6 программы на Кумире (см. табл. 8.15) производится переприсваивание содержимого ячеек (предпредыдуш;ей, пре-дыдугцей и текупдей). Можно ли поменять местами операторы присваивания? Ответ обоснуйте. 8*. Можно ли в данном алгоритме обойтись только двумя переменными Д и /2? К заданию 8.9 1. В блоке 4 блок-схемы (см. рис. 8.12) определяется длина строки п. Для чего это делается? Где далее используется эта переменная? 2. В алгоритме используется цикл с предусловием. Может ли возникнуть такая ситуация, что тело цикла не исполнится ни разу? Придумайте и запишите в тетради пример телеграммы, текст которой приведет к такой ситуации. 3. Что произойдет в алгоритме, если в адрес телемарафона придет телеграмма из России: «Я пенсионерка, но хочу пожертвовать 3 доллара в фонд помош;и бездомным животным. Татьяна». Предложите вариант алгоритма, учитываюпдего подобную ситуацию. 4. Добавится ли к сумме число, указанное в телеграмме: «Я родился в 1900 году, средств не имею, но считаю, что нужно помогать старикам. Джон»? 5*. Если вы отлаживаете программы на Паскале или на Visual Basic, упростите поиск упоминания доллара (знак или текст). 6. Что означает сложное условие Sim >= "0" и sim <= "9" (см. п. 8 табл. 8.17)? 7. Чем различаются ветвления на блок-схеме и в примерах программ? Тема 8.4 Цикл с известным числом повторений Выполнив задания этой темы, вы научитесь: ill*, создавать алгоритмы с известным числом повторений; ill*, тестировать циклический алгоритм с известным числом повторений в пошаговом режиме; 11ф изменять параметры цикла. Для реализации циклического алгоритма с известным числом повторений в блок-схемах используется специальный блок (см. блок 3 на рис. 8.13). Для программной реализации цикла с известным числом повторений используются специальные операторы. Задание 8.10 Часто требуется обработать оценки, полученные учащимися или студентами в результате каких-либо испытаний (контрольной работы, экзамена). Обработка, как правило, сводится к подсчету количества хороших (или плохих) оценок, среднего балла, и к нахождению максимального показателя. Требуется смоделировать процесс ввода оценок с клавиатуры с одновременным набором статистики. Словесный алгоритм Начало алгоритма 1. Для каждого из учащихся проделайте следующие действия: а) введите его оценку; б) приплюсуйте ее к сумме оценок (для дальнейшего подсчета средней оценки); в) сравните оценку с текущим максимумом: если они равны, то увеличьте счетчик максимальных оценок; иначе, если оценка больше текущего максимума, замените текущий максимум новой оценкой, а счет лучших оценок начните заново. 2. Сообщите данные по накопленной статистике. Конец алгоритма 348 Раздел 8. Основы алгоритмизации Алгоритм в виде блок-схемы Рис. 8.13. Блок-схема алгоритма (к заданию 8.10) Тема 8.4. Цикл с известным числом повторений 349 Алгоритм в виде программы В табл. 8.19 приведена программа на алгоритмическом языке Кумир. В табл. 8.20 приведены тексты программы на языках программирования Паскаль и Visual Basic. Таблица 8.19. Программа на Кумире с пояснениями (к заданию 8.10) № Программа на Кумире Пояснения Тестирование 1 алг Оценки Начало программы нач цел i, та, sum, kolmax, otc Описание переменных 2 та ;= 1; sum := 0; kolmax := 0 Начальные установки. Текуш;ий максимум устанавливается заведомо минимальным, чтобы первая же оценка >1 его заменила 3 нц для i от 1 до 15 Цикл для i от 1 ДО 15 i 1 2 3 4 5 4 вывод "Введите оценку" , i, "-ГО ученика" Приглашение к вводу очередной оценки 5 ввод otc Ввод оценки 2 3 5 4 5 6 sum := sum -t-otc Накопление суммы оценок 2 5 10 14 19 7 если otc = ma Если введенная оценка равна той, что считается максимальной 2=1 Нет 2=3 Нет 3=5 Нет 4=5 Нет 5=5 Да TO То 350 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения Тестирование 8 kolmax := kolmax + 1 У величивается счетчик максимальных чисел — — 2 иначе В противном случае 9 если otc > та Вложенное условие Если 2>1 Да 3>2 Да 5>3 Да 4>5 Нет — то Если введенная оценка больше той, что считается максимальной 10 та := otc Меняем максимальную на нее 2 3 5 - - kolmax := 1 Счет максимальных оценок начинается снова 1 1 1 — все Конец если otc > та все Конец если otc = та кц Конец цикла для 11 вывод "Средняя оценка = ", sum / 15 Подсчет и вывод средней оценки 3.8 вывод "Лучшая оценка = ", та Вывод максимальной оценки 5 ВЫВОД "Количество лучших оценок:", kolmax Вывод количества максимальных оценок 2 12 кон Конец программы Тема 8.4. Цикл с известным числом повторений 351 Таблица 8.20. Примеры программ на Паскале и Visual Basic (к заданию 8.10) № Программа на Паскале Программа на Visual Basic 1 program Ocenki; Private Sub Command l_Click() const n = 15; Const n = 15 var i, ma , sum , kolmax , otc: integer; Dim i As Integer, ma As Integer, sum As Integer, kolmax As Integer, otc As Integer begin 2 ma := 1; sum := 0; kolmax ;= 0; ma = 1: sum = 0: kolmax = 0 3 for i := 1 to n do For i = 1 To n begin 4 writelnC Введите оценку i, го ученика’); otc = Val(InputBox(" Введите оценку " & i & "-ГО ученика", "Оценки ”)) 5 readln(otc); 6 sum := sum + otc; sum = sum + otc 7 if otc = ma then If otc = ma Then 8 kolmax := kolmax 4- 1 kolmax = kolmax + 1 9 else if otc > ma then Elself otc > ma Then begin 10 ma := otc; ma = otc kolmax := 1 kolmax = 1 end; End If Next 11 writelnC Средняя оценка: sum / n:4:l ); Print Print " Средняя оценка: "; FormatNumber(sum / n, 1) writelnC Лучшая оценка: ' , ma); Print " Лучшая оценка: " ; ma 352 Раздел 8. Основы алгоритмизации № Программа на Паскале Программа на Visual Basic writelnC Количество лучших оценок’, kolmax) Print " Количество лучших оценок: " ; kolmax end 12 end. End Sub Задание 8.11 Кто из вас хотя бы раз в жизни не считал, сколько дней осталось до любимого праздника? Требуется разработать алгоритм, в котором производится подсчет числа дней до Нового года от текущей даты. Словесный алгоритм Начало алгоритма 1. Введите текущую дату: день, месяц и год. 2. Для каждого месяца, начиная с текущего, проанализируйте, сколько в нем дней. Добавьте полученное число к общей сумме дней. 3. Вычтите из полученной суммы число дней, которые уже прошли в текущем месяце. 4. Сообщите количество дней до Нового года. Конец алгоритма I Иногда применение вложенных блоков принятия решения делает схему громоздкой. Здесь в блок-схему введен блок выбора по ин-дексам месяцев. Этот блок применяется, когда вариантов выбора по условию больше двух. Он соответствует оператору Выбор (Case). Алгоритм в виде блок-схемы На рис. 8.14 приведена блок-схема, составленная по словесному алгоритму. Алгоритм в виде программы В табл. 8.21 приведена программа на алгоритмическом языке Кумир. В табл. 8.22 приведены тексты программы на языках программирования Паскаль и Visual Basic. Тема 8.4. Цикл с известным числом повторений 353 Таблица 8.21. Программа на Кумире с пояснениями (к заданию 8.11) № Программа на Кумире Пояснения 1 алг До_Нового_Года Начало алгоритма нач цел d, m, god, i, kolday Описание переменных 354 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения 2 вывод "Введите день, месяц, год" Вывод приглашения для ввода 3 ввод d, m, god Ввод дня, месяца и года 4 kolday := 0 Начальные установки: обнуление счетчика дней 5 нц для i от m до 12 Начало цикла: для всех месяцев, начиная с текущего выбор Выбор по номеру месяца i 6 при i = 2: Для февраля: 7 если mod(god, 4) = 0 Если год високосный (в XXI веке — делится на 4 без остатка) ТО То 8 kolday := kolday + 29 К счетчику дней добавляется 29 иначе Иначе 9 kolday := kolday + 28 К счетчику дней добавляется 28 все Конец если 10 при (i = 4) или (i = 6) или Для апреля, июня, сентября (i = 9) или (i = 11): и ноября к счетчику дней kolday := kolday + 30 добавляется 30 иначе Для всех остальных месяцев: 11 kolday := kolday +31 К счетчику дней добавляется 31 все Конец выбора кц Конец цикла 12 kolday := kolday - d Из счетчика вычитается теку-ш;ий день (дни, уже прошедшие в текуш;ем месяце) 13 вывод "Количество дней до Нового Года: ", kolday Вывод результата 14 КОН Конец алгоритма Тема 8.4. Цикл с известным числом повторений 355 Таблица 8.22. Примеры программ на Паскале и Visual Basic (к заданию 8.11) № Программа на Паскале Программа на Visual Basic 1 program New_Year; Private Sub New_Year_Click() var d: 1..31; m, i: 1..12; god, kolday: word; Dim d As Integer, m As Integer, god As Integer, i As Integer, kolday As Integer begin 2 writeln('Bвeдитe день, месяц, год'); d = Val(InputBox("Bвeдитe день", "Дата")) m = Уа1(1при1Вох("Введите месяц", "Дата")) god = Val(InputBox("BBeflHTe год", "Дата")) 3 readln(d, m, god); 4 kolday := 0; kolday = 0 5 for i := m to 12 do For i = m To 12 6 case i of Select Case i 7 Case 2 8 2: if god mod 4 = 0 If god Mod 4 = 0 9 then kolday ;= kolday + 29 Then kolday = kolday + 29 else kolday := kolday + 28; Else kolday = kolday + 28 10 4, 6, 9, 11; kolday ;= kolday + 30; Case 4, 6, 9, 11 kolday = kolday + 30 11 else Case Else kolday ;= kolday + 31; kolday = kolday + 31 End Select end; Next 12 kolday ;= kolday - d; kolday = kolday - d 13 writeln(’KonH4ecTBO дней до Нового года - ', kolday) Print "Количество дней до Нового года: "; kolday 14 end. End Sub 356 Раздел 8. Основы алгоритмизации Задание 8.12 Требуется смоделировать фрагмент теста, проверяющего навыки устного счета в начальной школе. Этот фрагмент (своеобразный конструктор теста) должен позволить учителю, задав любую последовательность цифр со знаками сложения и вычитания (строку), тут же получить и сохранить ответ для последующего сравнения с ответом учащегося. Для подсчета правильного ответа в алгоритм должен быть заложен механизм перевода текстовой строки в последовательность цифр и арифметических знаков. I Проверку на корректность ввода данных в алгоритме можно опустить, так как он предназначен преподавателю, готовящему тест. Словесный алгоритм Начало алгоритма 1. Запросите и введите строку, состоящую из цифр и знаков «+» и «—». 2. Определите длину строки. 3. Занесите числовой эквивалент первого символа (цифры) в сумму. 4. Для каждого символа строки проделайте следующее: а) прочтите символ; б) рассмотрите три ситуации: если это символ «Ч-», установите признак знака равным 1; если это символ «-», то установите признак знака равным -1; иначе (остается только символ-цифра) определите вес цифры и приплюсуйте ее к сумме с соответствующим знаком. 5. Выведите результат. Конец алгоритма Алгоритм в виде блок-схемы На рис. 8.15 приведена блок-схема, составленная по словесному алгоритму. Тема 8.4. Цикл с известным числом повторений 357 Рис. 8.15. Блок-схема алгоритма (к заданию 8.12) 358 Раздел 8. Основы алгоритмизации Алгоритм в виде программы В табл. 8.23 приведена программа на алгоритмическом языке Кумир. В табл. 8.24 приведены тексты программы на языках программирования Паскаль и Visual Basic. Таблица 8.23. Программа на Кумире с пояснениями (к заданию 8.12) № Программа на Кумире Пояснения 1 алг Устный счет Начало алгоритма нач цел п, i , к, ch, sum, сим sim, лит st Описание переменных 2 вывод "Введите выражение Приглашение к вводу строки 3 ввод st Ввод строки 4 п := длин(st) Определение длины строки 5 sum := цeл(st[l]) - цел("0") Получение цифрового эквивалента первого символа - цифры (от кода символа отнимается код 0) и занесение его в сумму 6 нц для i от 2 до п Начало цикла: для всех символов, начиная со второго 7 sim := st[i] Чтение очередного символа строки выбор Выбор из трех возможных вариантов: 8 при sim = к := 1 Если символ «-1-» 9 к := 1 10 при sim = к := -1 Если символ «-» 11 к := -1 12 иначе Иначе (символ - цифра): ch := 4en(sim) - цел("0”) Нахождение «веса» цифры 13 sum := sum + к * ch Добавление цифры в сумму с соответствующим знаком все Конец иначе Тема 8.4. Цикл с известным числом повторений 359 № Программа на Кумире Пояснения кц Конец цикла 14 вывод "Значение арифметического выражения: ", st; sum Вывод результата выражения 15 кон Конец алгоритма Таблица 8.24. Примеры программ на Паскале и Visual Basic (к заданию 8.12) № Программа на Паскале Программа на Visual Basic 1 program Ustno; Private Sub Commandl_Click() var n, i, к, ch, sum: integer; st: string; sim: char; Dim n As Integer, i As Integer, к As Integer, ch As Integer, sum As Integer, st As String, sim As String begin 2 writeCВведите выражение: '); st = InputBox("Bвeдитe выражение", "Значение выражения", "9 - 6 -1- 4 -i- 5 - 1") 3 readln(st); 4 n := length(st); n = Len(st) 5 sum := ord(st[l]) - ord('O'); sum = Asc(Left(st, 1)) -Asc("0") 6 for i := 2 to n do For i = 2 To n begin 7 sim := st[i]; sim = Mid(st, i, 1) case sim of Select Case sim 8 ■+': к := 1; Case '4" 9 к = 1 10 ’-’:k:=-l; Case 11 к = -1 else Case Else 360 Раздел 8. Основы алгоритмизации № Программа на Паскале Программа на Visual Basic begin 12 ch := ord(sim) - ord('O’); ch = Asc(sim) - Asc("0") 13 sum := sum + к * ch sum = sum -f к * ch end end; {case} End Select end; {for} Next 14 writelnCЗначение арифметического выражения: st, ' = sum) Print "Значение арифметического выражения: "; st; "="; sum 15 end. End Sub Контрольные вопросы и задания К заданию 8.10 1. Определите по блок-схеме (см. рис. 8.13), сколько учеников участвовало в контроле знаний? 2. Что означает запись i = 1, 15, 1 в блоке, обозначающем цикл? 3. Что означает левая и правая части оператора присвоения sum = sum + otc? Что и чему будет присваиваться? 4. Почему в начальных установках переменной max присваивается значение 1, несмотря на то что оценка 1 не ставится за контрольные работы и экзамены? 5. Изобразите в тетради фрагмент блок-схемы цикла Для, который будет суммировать числа от 1 до 100. 6. Изобразите в тетради блок-схему Ешгоритма, вычисляющего произведение всех нечетных чисел от 1 до 29. 7. Останутся ли оценки, которые были введены в алгоритме, после его завершения? К заданию 8.11 1. Для чего нужны начальные установки в алгоритме? 2. Где в программе на Кумире учитывается, что определенное количество дней в текущем месяце уже прошло и не должно учитываться в сумме? Тема 8.4. Цикл с известным числом повторений 361 3. Когда в программах используется оператор выбора? Можно ли заменить его операторами Если? 4. Выпишите в тетрадь, как выглядит оператор выбора на разных языках. 5. Значение какой переменной в программах влияет на выбор той или иной ветки? Что реально означает эта переменная? 6. Найдите в программе на Кумире место, где определяется, является ли год в XXI веке високосным. К заданию 8.12 1. Определите по блок-схеме (см. рис. 8.15), почему цикл Для начинается со второго символа, а не с первого? 2. На блок-схеме условные блоки 8 и 10 обеспечивают выбор из трех возможных вариантов: символ «-Ь», символ «-» и символ-цифра. Найдите в примерах программ фрагменты, соответствующие этому множественному выбору. 3. При помощи каких функций определяется длина введенной строки в разных языках? Выпишите их в тетрадь. 4. Определите по примерам программ, какой тип у переменной St? 5. В третьем блоке блок-схемы (см. рис. 8.15) была введена следующая строка: 6+3-2-4+5. Определите по программе на Кумире: • длину строки п; • какие значения примут переменные s i m и к после первого прохода цикла; • какие значения будут находиться в переменных sim, к, sum и ch после завершения цикла. Тема 8.5 Цикл с постусловием Выполнив задания этой темы, вы научитесь: использовать цикл с постусловием для решения задач; выбирать тот или иной вид цикла в зависимости от поставленной задачи; т использовать типовые алгоритмы поиска минимума и максимума; использовать данные разного типа при решении задач. Цикл с постусловием относится к циклам с неизвестным числом повторений. В цикле с постусловием условие окончания цикла проверяется в конце оператора цикла. Если условие ложно (нет, False), то тело цикла повторяется, а иначе (если истинно — да. True) цикл завершается. Особенностью этого цикла является то, что тело цикла выполняется хотя бы один раз. Специального блока для реализации цикла с постусловием в блок-схемах нет, но во всех языках программирования есть специальные операторы, реализующие этот цикл. Задание 8.13 в некоторых случаях окружность заменяют правильным п-уголь-ником. Например, если надо получить круглую игровую площадку, то трудно найти циркуль для ее очерчивания. Тогда достаточно вбить в землю колышек с веревкой, равной предполагаемому радиусу, и сделать отметки, вращая натянутую веревку. Остается только соединить полученные отметки. При увеличении числа сторон такого п-угольника его периметр стремится к длине окружности. Требуется рассчитать параметры п-угольника, чтобы его периметр был равен длине окружности с заданной абсолютной погрешностью. Словесный алгоритм Начало алгоритма 1. Задайте радиус окружности. 2. Вычислите для него длину окружности. Тема 8.5. Цикл с постусловием 363 3. Последовательно удваивайте число сторон п-угольника, рассчитывайте его периметр и сравнивайте с длиной окружности, пока не добьетесь требуемой точности. 4, Сообщите результаты. Конец алгоритма Алгоритм в виде блок-схемы ^ Начало^ Вывод подсказки Ввод радиуса г точности? Да ^ Вывод результатов Начальные установки Вычисление длины окружности (L) Удвоение числа сторон л-угольника Г Расчет п-угольника (St, Р) ^ L - Р меньше заданной _ Нет 10 V ^ Конец ^ Рис. 8.16. Блок-схема алгоритма (к заданию 8.13) 364 Раздел 8. Основы алгоритмизации Алгоритм в виде программы В табл. 8.25 приведена программа на алгоритмическом языке Кумир. В табл. 8.26 приведены тексты программы на языках программирования Паскаль и Visual Basic. Таблица 8.25. Программа на Кумире с пояснениями (к заданию 8.13) № Программа на Кумире Пояснения 1 алг многоугольник Начало программы нач вещ е, pi, г, 1, р, st цел п Описание переменных pi := 3.14159 е := 0.1 Заданная точность 2 вывод "Введите радиус" Приглашение на ввод 3 ВВОД г ? 4 п := 3 Начальные установки 5 1 := 2 * pi * г ? нц Начало цикла 6 п := п * 2 Удвоение числа сторон л-угольника 7 st := 2 * г * sin(pi / п) Расчет л-угольника: стороны р := st * п и периметра 8 кц_при (1 - р) < е Выход из цикла при достижении заданной точности 9 вывод "L=", 1, " р=", р, " п=" , п Вывод результатов 10 кон Конец алгоритма Таблица 8.26. Примеры программ на Паскале и Visual Basic (к заданию 8.13) № Программа на Паскале Программа на Visual Basic 1 program Mnogoug; Private Sub Mnogougolnik_Click() const е = 0.1; Const e = 0.1 var n: byte; r, st, 1, p: real; Const pi = 3.1415 Dim n As Integer, r As Single, st As Single, 1 As Single, p As Single begin Тема 8.5. Цикл с постусловием 365 № Программа на Паскале Программа на Visual Basic 2 write('r='); r = Val(InputBox("Bвeдитe радиус")) 3 readln(r); 4 n := 3; n = 3 5 1 := 2 * pi * г; 1 = 2 * pi * r repeat Do 6 n := n * 2; n == n * 2 7 st := 2 * r * sin(pi / n); st = 2 * r * Sin(pi / n) p := st * n; p = st * n 8 until (1 - p) < e; Loop Until (1 - p) < e 9 writeln('L=', 1:6:2, 'P=', p:6:2, 'N=\ n) Print "L=”; FormatNumber(l, 2); " P="; FormatNumber(p, 2); " N="; n 10 end. End Sub Задание 8.14 Бывают ситуации, когда надо найти информацию по образцу в неупорядоченном (по алфавиту, номеру и пр.) массиве. Например, ученик может искать книги для реферата в домашней библиотеке, квартиросъемщик — свою фамилию в журнале вызова электрика и т. п. Требуется создать алгоритм поиска в массиве заданной фамилии и обеспечить запоминание ее порядкового номера. По найденному номеру можно впоследствии найти соответствующие этому человеку данные (адрес, дату рождения и др.) в других массивах, связанных с данным. Словесный алгоритм Начало алгоритма 1. Введите фамилию. 2. Сравнивайте ее с очередным элементом массива, пока не найдете такую же или пока не закончится список. 3. Если фамилия найдена, сообщите ее номер в списке, если нет — сообщите о том, что фамилия не найдена. Конец алгоритма 366 Раздел 8. Основы алгоритмизации Алгоритм в виде блок-схемы Рис. 8.17. Блок-схема алгоритма (к заданию 8.14) Тема 8.5. Цикл с постусловием 367 I в алгоритме имеется два цикла. Первый цикл — цикл заполнения массива — является вспомогательным, поэтому не был описан ****»»<*# в словесном алгоритме. Он добавлен для того, чтобы проверить работу основного алгоритма. Алгоритм в виде программы В табл. 8.27 приведена программа на алгоритмическом языке Кумир. В табл. 8.28 приведены тексты программы на языках программирования Паскаль и Visual Basic. Таблица 8.27. Программа на Кумире с пояснениями (к заданию 8.14) № Программа на Кумире Пояснения 1 алг Поиск_фамилии Начало программы нач литтаб f[l:10], лит fam, цел i, лог poisk Описание переменных 2 вывод "Введите фамилии, нажимая Enter после каждой фамилии" Приглашение на ввод 3 нц для i от 1 до 10 ? 4 ввод f[i] Ввод очередного элемента массива фамилий кц Конец цикла Для 5 ВЫВОД "Введите искомую фамилию" Ввод искомой фамилии ввод fam 6 poisk := нет Начальные установки i := 1 нц ? 7 если f[i] = fam Если очередной элемент массива равен искомому ТО То 8 poisk ;= да Установка признака «Найдена» 368 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения иначе Иначе 9 i = i + 1 Переход к следующей фамилии все Конец Если 10 кц_при poisk или (i > 10) Конец цикла при признаке «Найдена» или по концу списка 11 если poisk Если фамилия найдена то То 12 вывод "Фамилия находится на i; "месте" Вывод индекса фамилии в списке иначе Иначе 13 вывод "Нет такой фамилии" Вывод сообщения «Нет такой фамилии» все Конец Если 14 кон Конец программы Таблица 8.28. Примеры программ на Паскале и Visual Basic (к заданию 8.14) № Программа на Паскале Программа на Visual Basic 1 program Mass; Private Sub Poisk_v_mass_Click() var f: array[1..10] of string; i: byte; fam: string; poisk: Boolean; Dim f(l To 10) As String Dim i As Byte, fam As String, poisk As Boolean begin 2 writelnCВведите фамилии'); 3 for i := 1 to 10 do For i = 1 To 10 4 readln(f[i]); f(i) = Inputbox("Введите фамилию ") Next Тема 8.5. Цикл с постусловием 369 № Программа на Паскале Программа на Visual Basic 5 writelnC Введите искомую фамилию'); fam = InputBox("Введите искомую фамилию", "Поиск в массиве ") readln(fam); 6 poisk := False; poisk = False i := 1; i = 1 repeat Do 7 if f[i] = fam then If f(i) = fam Then 8 poisk := True poisk = True else Else 9 i := i + 1; i = i -t- 1 End If 10 until poisk Or (i > 10); Loop Until poisk Or i > 10 11 if poisk then If poisk Then 12 writeln('Фамилия находится на i, 'месте') Print " Фамилия находится на "; i; "месте" else Else 13 writeln('HeT такой фамилии'); Print " Нет такой фамилии" End If 14 end. End Sub Задание 8.15 Слышали ли вы о «золотом» прямоугольнике? Если от него отсечь квадрат, то остается прямоугольник с такими же пропорциями (отношением сторон), то есть полученный прямоугольник тоже будет «золотым». Этот процесс можно продолжать до бесконечности. На этой же пропорции базируются все «золотые» геометрические фигуры. Отрезки «золотой» пропорции выражаются бесконечными дробями 1,618 или 0,618. 370 Раздел 8. Основы алгоритмизации Если вписать в квадраты, отсекаемые от прямоугольника, четверти окружности, то получается знаменитый «золотой» завиток, являющийся основой многих орнаментов, архитектурных деталей и пр. Требуется определить по введенным сторонам, является ли прямоугольник «золотым». Принять допущение: считать прямоугольник «золотым», если одно и то же соотноигение с заданной точностью (абсолютная погрешность — 0,01) повторилось 5 раз. Вывести «золотое» соотношение. Рис. 8.18. К заданию 8.15 Словесный алгоритм Начало алгоритма 1. Введите параметры прямоугольника. 2. Определите, какая сторона является большей, какая — меньшей. 3. Найдите и сообш;ите первое отношение большей стороны к меньшей, 4. Пока не закончатся 5 экспериментов или не выявится неравенство последующих отношений, выполняйте следующие действия: а) определите стороны нового прямоугольника после отсечения квадрата и найдите их соотношение; б) если это соотношение не равно предыдущему с заданной точностью, то завершите эксперименты. 5. Если все 5 попыток прошли успешно, то выведите сообщение «прямоугольник золотой», иначе — «прямоугольник не золотой». Конец алгоритма Тема 8.5. Цикл с постусловием 371 Алгоритм в виде блок-схемы Рис. 8.19. Блок-схема алгоритма (к заданию 8.15) 372 Раздел 8. Основы алгоритмизации Рис. 8.19. Блок-схема алгоритма к заданию 8.15 (продолжение) I На блок-схеме (рис. 8.19) пунктирной линией обведены блоки, которые будут многократно повторяться далее в цикле. Это означает, #»в что данные блоки должны быть оформлены как вспомогательный алгоритм. Алгоритм в виде программы В табл. 8.29 приведена программа на алгоритмическом языке Кумир с пояснениями. В табл. 8.30 приведены тексты программы на языках программирования Паскаль и Visual Basic. Таблица 8.29. Программа на Кумире с пояснениями (к заданию 8.15) № Программа иа Кумире Пояснения 1 алг Золотая пропорция Начало программы нач вещ а, Ь, mi, та, ch, кр, kt, razn Описание переменных 2 ВЫВОД "Введите стороны прямоугольника Ввод сторон ввод а, Ь 3 если а < Ь Если а < Ь Тема 8.5. Цикл с постусловием 373 № Программа на Кумире Пояснения ТО То 4 mi := а; та := Ь Определение соотношения сторон: а — меньшая, Ь — большая иначе В противном случае 5 mi := Ь; та := а Определение сторон: а — большая, Ь — меньшая все Конец Если 6 kt := mi / та; ch := 1; Вычисление отношения меньшей стороны к большей Начальная установка счетчика попыток 7 вывод "стороны:", mi, " ", та, "пропорция =", kt Вывод значений сторон и первой пропорции нц Начало цикла с постусловием 8 кр := kt; ch := ch + 1 Пропорция уже рассмотренного прямоугольника становится предыдуш,ей для нового прямоугольника Увеличение счетчика попыток 1 "Отсечение квадрата" от прямоугольника: Комментарий 9 если а = та Если а — большая то То 10 а := та - mi; Ь ;= mi ? иначе Иначе 11 Ь := та - mi; а := mi ? все Конец Если 12 если а < Ь Вычисление длин большей и меньшей сторон в новом прямоугольнике то 374 Раздел 8. Основы алгоритмизации № Программа на Кумире Пояснения 13 та := Ь; mi := а иначе 14 та := а; mi := Ь все 15 kt := mi / та; razn := abs(kt - кр) Расчет новой пропорции и модуля разности пропорций для нового и старого прямоугольников 16 вывод "стороны:", mi, " ", та, "пропорция =", kt, "Разница К =", razn Вывод расчетов 17 кц при (razn > 0.01) или (ch = 5) Выход из цикла, если выполнены все 5 попыток или была неудачная попытка 18 если razn <0.01 Если вышли при разнице <0,01 ТО То 19 вывод "Золотой” Сообщается, что прямоугольник золотой иначе В противном случае 20 вывод "Не золотой" Сообщается, что прямоугольник не золотой все Конец Если 21 кон Конец программы Таблица 8.30. Примеры программ на Паскале и Visual Basic (к заданию 8.15) № Программа на Паскале Программа на Visual Basic 1 program Zolotoe; Private Sub Zolotoe_click() var а, b, та, mi, кр, kt, razn: real; ch: byte; Dim a As Single, b As Single, ma As Single, mi As Single, kp As Single, kt As Single, ch As Byte begin 2 writelnCВведите стороны ’); a = Val(InputBox(" Введите сторону")) Тема 8.5. Цикл с постусловием 375 № Программа на Паскале Программа на Visual Basic readln(a, Ь); b = Val(InputBox("BBeAHTe сторону ")) 3 if а < Ь then If a < b Then 4 begin та := Ь; mi := а end ma = b: mi = a 5 else Else begin та ;= а; mi := b end; ma = a: mi = b End If 6 kt := mi / ma; ch := 1; kt = mi / ma: ch = 1 7 writeln(mi:6:l, ' ma:6:l, 'k=', kt:6:4, ' - первый прямоугольник ’); Print mi, ma, ”k=”; FormatNumber(kt, 3); " - первый прямоугольник" repeat Do 8 ch := ch + 1; kp :== kt; ch = ch + 1: kp = kt 9 if a = ma then If a = ma Then 10 begin a := ma - mi; b := mi end a = ma - mi: b = mi else Else 11 begin b := ma - mi; a := mi end; b = ma - mi: a = mi End If 12 if a < b then If a < b Then 13 begin ma := b; mi ;= a end ma = b: mi = a else Else 14 begin ma := a; mi := b end; ma = a: mi = b End If 15 kt := mi / ma; razn := abs(kt - kp); kt = mi / ma: razn = Abs(kt - kp) 16 writeln(mi;6:l, ' ma:6:l, ’k=’, kt: 6:3, ' Разница к =', razn: 6:4) Print mi, ma, "k="; FormatNumber(kt, 4); "; Разница к ="; FormatNumber(razn, 4) 17 until (razn > 0.01) or (ch = 5); Loop Until (razn > 0.01) Or (ch = 5) 18 if razn < 0.01 then If razn <0.01 Then 19 writeln(' Золотой') Print "Золотой" 376 Раздел 8. Основы алгоритмизации № Программа на Паскале Программа на Visual Basic else Else 20 writeln('He золотой'); Print "He золотой" End if 21 end. End Sub Контрольные вопросы и задания К заданию 8.13 1. В примерах программ сторона многоугольника рассчитывается через синус центрального угла. В каких единицах измерения должен быть указан угол? 2. Условием окончания цикла является отношение (I - р) < е. Что оно означает? 3. Найдите на блок-схеме (см. рис. 8.16) и в примерах программ операторы, составляющие тело цикла с постусловием, и выпишите их в тетрадь. 4. Существуют ли такие ситуации, когда тело цикла в цикле с постусловием не будет выполнено ни разу? 5. Напишите пояснение к пп. 3 и 5 программы на Кумире. 6*. Зачем при тестировании программы на Visual Basic (рис. 8.20) расчетные данные выводятся с такой точностью, если точность е = 0,1? Рис. 8.20. Пример тестирования программы на Visual Basic (к заданию 8.13) Тема 8.5. Цикл с постусловием 377 К заданию 8.14 1. В пп. 3 и б примеров программ (см. табл. 8.27 и 8.28) начинаются два разных цикла. Напишите в тетради их назначение и разновидности. 2. Сколько элементов в строке фамилий? Где можно узнать это число? 3. Определите по примерам программ тип переменной poisk. Какие значения может принимать эта переменная? 4. Условие окончания цикла выглядит так: ро1 sk или (1 > 10). Что означает это сложное условие? 5*. Заполните таблицу истинности для указанного сложного условия. poisk i > 10 Выход из цикла False (0) False (0) ? False (0) True (1) ? True (1) False (0) ? True (1) True (1) ? 6. Выпишите в тетрадь, как описана на разных языках строка фамилий? 7. Если искомая фамилия является последней в списке, по какому условию осуществился выход из цикла? К заданию 8.15 1. Для чего нужны начальные установки в алгоритме? 2. При решении задачи принято допущение: считать прямоугольник «золотым», если одно и то же соотношение с заданной точностью (абсолютная погрешность — 0,01) повторилось 5 раз. Найдите места в примерах программ, где учитывается это соглашение. 3. Что надо изменить в блок-схеме и программах, чтобы пользователь сам указывал абсолютную погрешность? 4. После выхода из цикла анализируется переменная razn. Можно ли анализировать переменную ch? 378 Раздел 8. Основы алгоритмизации 5*. Заполните таблицу истинности для сложного логического выражения (razn > 0.01) Or (ch = 5). Число попыток ch = 5 Razn > 0.01 Выход из цикла False (0) False (0) ? False (0) True (1) ? True (1) False (0) ? True (1) True (1) 9 6. Напишите пояснения к пп. 10 и 11 программы на Кумире (см. табл. 8.29). 7*. Золотое соотношение обеспечивают стороны, длина которых соответствует числам Фибоначчи (чем больше числа, тем точнее пропорция). Это видно на первом тесте (рис. 8.21). Что нужно изменить в программе, чтобы рассматриваемое отношение сторон поменялось с 0,618 на 1,618? 8‘.На рис. 8.21 изображено два теста. Какого теста не хватает для проверки всех ветвей алгоритма? ...........................................и .*|.|.|Д!Й!|Я««Я!Ята 83 144 к"0,61 В ■ первый прямоуояьник 55 83 к»О,$10О;рваницак-О,ООО1 34 55 ' , крЮ,61В2:р«ниц« к.0,0802 . 31 34 k»O,S178;papM4U4k>B,Q005 ' 13 Зологрй 2- М),6130; pepwua к »0,0014 i г золотой к«0,6СЮ • первый прямогояьник k.OJ667;p«SHMttak«O^I663’ Рис. 8.21. Примеры тестирования программы на Visual Basic (к заданию 8.15) 9. Что нужно изменить (добавить) в блок-схеме, чтобы проверялось условие равенства сторон исходного прямоугольника? Что даст подобное изменение? Приложение Справочные сведения по среде программирования ЛОГО Таблица А.1. Основные команды среды программирования ЛОГО Название команды (краткая форма) Назначение инструмента ЛогоМиры Logo Writer LOGO Относительное перемещение (команды) вперед (вп) вперед (вп) forwad (fd) Черепашка продвигается вперед по направлению головы назад (нд) назад (нд) back (bk) Черепашка продвигается назад в направлении, противоположном направлению головы направо (пр) направо(пр) rigth (rt) Черепашка поворачивается направо относительно головы налево(лв) налево (лв) left (It) Черепашка поворачивается налево относительно головы курс_на ■ ■ Голова текущей Черепашки поворачивается к Черепашке, имя которой указано Абсолютное перемещение (команды) нов_х новх setx Черепашка перемещается по горизонтали относительно центра координат нов_у нову sety Черепашка перемещается по вертикали относительно центра координат домой домой home Черепашка перемещается в центр координат 380 Приложение. Справочные сведения по среде программирования ЛОГО Название команды (краткая форма) Назначение инструмента ЛогоМиры Logo Writer LOGO нов_курс (нк) новкурс(нк) seth Голова Черепашки поворачивается по часовой стрелке на угол относительно Севера Перемещение (датчики) х_коор хкоор xcor Сообщает значение абсциссы Черепашки в текущем положении у_коор укоор ycor Сообщает значение ординаты Черепашки в текущем положении путь доточки distance Сообщает расстояние от Черепашки до указанной точки угол towards Сообщает величину угла, образованного направлением головы Черепашки и линией, соединяющей Черепашку с указанной точкой курс курс heading Сообщает величину угла, образованного линией, идущей на Север, и линией, соединяющей Черепашку с указанной точкой Состояние Черепашки (команды) пп пп pu Перо поднять по по pd Перо опустить ПС ПС pe Перо стереть сч сч ht Спрятать Черепашку пч пч st Показать Черепашку Управление цветом (команды) нов_цвет (нц) новцвет (нц) setc Установить Черепашке указанный цвет нов_фон (нф) новфон (нф) setbg Установить указанный цвет фона крась крась fill Закрасить фигуру текущим цветом Черепашки Справочные сведения по среде программирования ЛОГО 381 Название команды (краткая форма) Назначение инструмента ЛогоМиры Logo Writer LOGO Управление цветом (датчики) цвет цвет color Сообщает текущий цвет Черепашки ц_поля (Цп) ЦП colorunder Сообщает цвет пиксела под пером Черепашки Вывод текста (команды) пиши циши (п) print (pr) Выводит указанное значение в текстовом окне рабочего поля покажи покажи show Выводит указанное значение в командном центре Управление алгоритмом (команды) пусть пусть make Создание переменной жди ЖДИ wait Пауза на указанное время повтори повтори repeat Организация цикла если еслииначе если еслииначе if ifelse Организация алгоритма разветвления выход выход output (op) Завершение датчика (функции) стоп стоп stop Остановка выполнения текущей программы Математические инструменты (датчики) + - * / + - * / + - * / Знаки арифметических действий округли округли round Сообщает число, округленное до целого целое целый int Сообщает целую часть числа остаток остаток remainder Сообщает число — остаток от деления случайный (сл) случайный (сл) random Сообщает целое положительное случайное число минус минус minus Сообщает число, округленное до целого Содержание Введение ЧАСТЬ 1. ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ В ПРИКЛАДНЫХ ПРОГРАММНЫХ СРЕДАХ Раздел 1. Освоение системной среды Windows ХР . . 5 Тема 1.1. Параметры файла и действия над файлом...........6 Тема 1.2. Параметры папки и действия над папкой...........И Тема 1.3. Работа с окнами графического интерфейса........16 Тема 1.4*. Настройка параметров Рабочего стола ..........21 Тема 1.5. Запуск программ (приложений)...................27 Тема 1.6. Работа в Windows как в многозадачной среде.....31 Тема 1.7*. Работа с папками и файлами с помощью меню и панели инструментов Проводника...............36 Тема 1.8. Технология и способы обмена данными............45 Тема 1.9. Антивирусная защита информации.................54 Тема 1.10*. Создание архивных файлов.....................60 Раздел 2. Освоение среды графического редактора.................................... 65 Тема 2.1. Общая характеристика графического редактора....66 Тема 2.2. Создание и редактирование рисунка .............74 Тема 2.3. Создание и редактирование рисунка с текстом ...80 Раздел 3. Освоение среды текстового процессора....................................83 Тема 3.1. Общая характеристика текстового процессора.....84 Тема 3.2. Создание и редактирование текстового документа .... 97 Тема 3.3. Форматирование текста.........................105 Тема 3.4. Оформление текста в виде таблицы и печать документа.............................113 Тема 3.5*. Включение в текстовый документ графических объектов . . 117 Содержание 383 Раздел 4. Освоение среды табличного процессора..........................125 Тема 4.1. Общая характеристика табличного процессора.....126 Тема 4.2. Создание и редактирование табличного документа .... 143 Тема 4.3. Форматирование табличного документа............150 Тема 4.4*. Использование функций и логических формул......157 Тема 4.5. Представление данных в виде диаграмм...........167 Раздел 5. Освоение системы управления базой данных ..................................171 Тема 5.1. Общая характеристика системы управления базой данных....................................172 Тема 5.2. Создание структуры и заполнение базы данных....187 Тема 5.3. Создание формы базы данных.....................193 Тема 5.4. Работа с записями базы данных..................197 Тема 5.5. Разработка отчета для вывода данных............203 Раздел 6. Коммуникации в глобальной сети Интернет.......................................205 Тема 6.1. Возможности Интернета..........................206 Тема 6.2. Среда браузера Internet Explorer...............211 Тема 6.3. Поиск информации в сети Интернет...............216 Тема 6.4*. Язык разметки гипертекста HTML ................223 Тема 6.5*. Веб-страница с графическими объектами..........234 Тема 6.6*. Веб-страница с гиперссылками...................237 Тема 6.7. Возможности электронной почты..................240 ЧАСТЬ 2. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ Раздел 7. Программирование в среде ЛОГО .... 245 Тема 7.1. Знакомство с основным инструментарием среды.246 Тема 7.2. Понятие программы...........................255 Тема 7.3. Последовательный алгоритм...................263 Тема 7.4. Циклический алгоритм........................267 384 Содержание Тема 7.5. Процедура и модуль...............................275 Тема 7.6. Процедура с параметрами..........................282 Тема 7.7. Переменная в алгоритме...........................290 Тема 7.8. Логика в среде программирования..................293 Раздел 8. Основы алгоритмизации.........................307 Тема 8.1. Линейные алгоритмы ..............................308 Тема 8.2. Разветвляющиеся алгоритмы........................317 Тема 8.3. Циклические алгоритмы. Цикл с предусловием.......331 Тема 8.4. Цикл с известным числом повторений...............347 Тема 8.5. Цикл с постусловием..............................362 Приложение. Справочные сведения по среде программирования ЛОГО 379