50 Глава 2. Основы анимации Откройте файл. Создайте анимацию движения звездочки по кругу, выполняя дан- ные ниже рекомендации. 1. С помощью инструмента перенесите точку трансформации (центр будущего вращения) на некоторое расстояние. 2. В кадр 30 вставьте копию ключевого кадра. 3. Перейдите на первый кадр и откройте Панель свойств. В списке Определение (Tween) выберите Движение (Motion). В списке Поворот (Rotate) выберите принудительное вращение по (CW) или против (CCW) часовой стрелки. 4. Запустите анимацию на просмотр. Сохраните изменения в файле. Опубликуйте анимацию. Дополните анимацию из упражнения 3 анимацией движения ракеты. Сохраните изменения в файле upr10_4.fla. Опубликуйте анимацию. Правообладатель Народная асвета
§ 11. Анимация формы 51 Создайте анимацию движения по траектории. Выполните импорт изображенийиз файлов.Фоновое изображение Анимируемое Траектория движения изображение § 11. Анимация формы Анимация формы — плавное изме- Пример 11.1. Создание анимациинение объекта анимации. формы. При создании анимации формы объ- 1. В первом кадре нарисовать ква-ектом является не экземпляр, как при драт:анимации движения, а обычное вектор-ное изображение. Количество прими- 2. Добавить пустой ключевой кадртивов в изображении может быть раз- в кадре 30 (F7)личным в начале и в конце анимации. и нарисовать в нем круг: В процессе анимации формы изобра-жение может разделиться на несколь- 3. Создать анимацию формы:ко независимых фрагментов, каждыйиз которых будет постепенно трансфор-мироваться. Или, наоборот, нескольконезависимых изображений при анима-ции, постепенно меняя облик (разме-ры, цвет, форму), могут стать частямиединого изображения. Поэтому анима-ция формы лучше всего подходит дляпростых изображений без обводки. В рамках анимации формы мож-но также изменять положение и цветобъектов (пример 11.1). ПеремещениеПравообладатель Народная асвета
52 Глава 2. Основы анимации объектов при анимации формы всегда прямолинейно. Для создания анима- Пример 11.2. Отображение проме- ции формы требуется: жуточных фаз. 1. Выбрать начальный ключевой кадр (или любой кадр между двумя ключевыми). 2. На Панели свойств выбрать Фор- ма (Shape): Переход одной формы в другую не Между ключевыми кадрами послевсегда предсказуем. Если исходный создания анимации формы должнаи конечный объекты содержат не- появиться сплошная стрелка на сала-сколько фигур, то трудно предполо- товом фоне. Промежуточные кадрыжить, как будет происходить транс- будут отражать последовательностьформация. фаз изменения формы (пример 11.2). При задании отрицательных значений Пример 11.3. Использование рас- в поле параметра Замедление (Ease)тровых изображений. анимация будет идти ускоренно, а при вводе положительных значений этого 1. Импортировать изображение на параметра — замедленно.монтажный стол. Вам уже известно, что импортиро- 2. Преобразовать символ в обыч- ванные растровые изображения пред-ную графику. ставляют собой символы. Их можно использовать при создании анимации 3. В кадрах 15 и 30 добавить ко- формы, предварительно преобразовав впии ключевых кадров. Изменить в обычную графику (пример 11.3).кадре 15 изображение: При анимации объектов с градиент- 4. Создать анимацию формы. ной заливкой у исходного и конечного объекта должен быть один и тот же тип градиентной заливки. Flash не умеет преобразовывать линейный градиент в радиальный и наоборот. При применении анимации формы к очень сложному объекту можно до- биться лучшего результата, если раз- бить одну анимацию на несколько и самостоятельно нарисовать промежу- точные контуры.Правообладатель Народная асвета
§ 11. Анимация формы 53? 1. К каким объектам можно применить анимацию формы? 2. Какие свойства объектов могут изменяться при анимации формы? 3. Как создать анимацию формы? 4. Каким образом можно использовать импортированные изображения при соз- дании анимации формы? Упражнения Создайте анимацию формы «Сердце на ладони». Изображение для фона импор-тируйте. Номер кадра Изображение 1 10 Сохраните анимацию в файле upr11_1.fla. Опубликуйте анимацию. Откройте файл. Создайте анимацию формы «Мерцающая звезда». 1. В кадре 1 преобразуйте изображение звезды в обычную графику. 2. В кадр 15 вставьте ключевой кадр. 3. Измените размеры звезды, удерживая клавишу Alt. 4. Создайте анимацию формы. 5. Сохраните изменения в файле upr11_2.fla и выполните публикацию. Создайте анимацию формы «Превращение». 1. Нарисуйте в кадре 1 круг с градиентной заливкой. 2. Перейдите в кадр 12 и преобразуйте его в пустой клю- чевой кадр. 3. Импортируйте в кадр 12 растровое изображение арбуза. Преобразуйте изображение арбуза в векторное и удалите фон (см. пункт 8.3, с. 40—41). Приведите в соответствие размер и место расположения центра круга и арбуза. 4. Кадр 30 преобразуйте в простой кадр. 5. Между ключевыми кадрами создайте анимацию формы. 6. Сохраните результат и выполните публикацию. Правообладатель Народная асвета
54 Глава 2. Основы анимации Дополните результаты выполнения упражнений 1 и 2 анимацией формы так, что-бы получились указанные сюжеты. 1. «Разбитое сердце» — сердце падает и разбивается. 2. «Звездное небо» — несколько мерцающих звезд, период и интенсив- ность мерцания у каждой свои. § 12. Анимация текста Пример 12.1. Расширяемое тексто- В любой фильм в редакторе Flashвое поле. может быть добавлен текст. Для добав- ления текста в фильм используется ин- Пример 12.2. Текстовое полефиксированной ширины. струмент Текст (Text Tool). Место, где будет вводиться текст, Пример 12.3. Текстовый блок. определяется щелчком мыши. Появля- Пример 12.4. Изменение прозрач- ется выделяющая рамка — текстовоености текста. поле. В правом верхнем углу рамки имеется маркер, вид которого опреде- R: 0 #000099 ляет тип текстового поля: G: 0 B: 153 круглый маркер соответствуетAlpha: 50% расширяемому текстовому полю (при- мер 12.1). Это однострочное текстовое Пример 12.5. Трансформация тек- поле, ширина которого автоматическиста. увеличивается при вводе текста; прямоугольный маркер соответ- ствует текстовому полю фиксирован- ной ширины (пример 12.2). Если оче- редной символ не вмещается на теку- щей строке, в таком поле выполняется автоматический перенос на следующую строку. Ширину поля можно изменить, перетащив маркер. После завершения ввода образуется текстовый блок с голубой рамкой (при- мер 12.3). На Панели свойств для текста мо- гут быть установлены: размер, шрифт, стиль, интервал, цвет и способ вырав- нивания. Можно изменять прозрач- ность цвета текста (пример 12.4). Правообладатель Народная асвета
Текстовые блоки так же, как и изо- § 12. Анимация текста 55бражения, можно трансформировать: Пример 12.6. Трансформация графи-поворачивать, масштабировать, накло- ческого объекта, содержащего текст.нять (пример 12.5). При этом сохраня- 1. Искажение.ется возможность редактирования сим-волов текста. 2. Изгиб. Перед применением операции ис- Пример 12.7. Изменение свойствкажения или изгиба ко всему тексту каждого символа и применение опе-(пример 12.6) текстовый блок необ- раций трансформации.ходимо преобразовать в графическийобъект. То же самое выполняется для ə ɛɵɥтрансформации отдельных символов. ɪɚɡɛɢɬВозможны два варианта применения ə ɛɵɥкоманды Разбить (Break Apart): q aɡ ɬ 1. Однократное применение коман- Пример 12.8. Градиентная залив-ды. Происходит разделение текста на ка и изгиб символов.символы с сохранением свойств каж-дого из них как отдельного фрагмента Пример 12.9. Движение текста стекста. Символы текста заключаются в вращением.отдельные рамки. К каждому символумогут быть применены любые опера-ции, допустимые для текстового блока(пример 12.7). 2. Команда применяется дважды.Символы текста преобразуются в гра-фические объекты и выделяются какграфические объекты. В этом случае ккаждому символу текста можно приме-нять градиентную заливку, искажениеи изгиб (пример 12.8). После применения команды Разбитьтекст уже нельзя редактировать какединый объект. К текстовым блокам примени-ма только анимация движения (при-мер 12.9). Анимацию формы к тексту можно при-менять только после преобразованияПравообладатель Народная асвета
56 Глава 2. Основы анимации символов текста в графику (при- мер 12.10). Пример 12.10. Применение анима- ции формы к тексту. Чтобы символы текста анимирова- лись по отдельности, необходимо: 1. В стартовый кадр анимации им- портировать изображение и преобра- 1. Преобразовать текст в графику. зовать его в графику (Ctrl + B). 2. Выполнить команду контекст- ного меню Распределить по слоям 2. Через несколько кадров вста- (Distribute to Layers). В результате вить пустой ключевой кадр (финиш- каждая буква, оставаясь в первом ка- ный кадр анимации). дре, окажется в своем слое. Слои авто- матически получат соответствующие 3. В финишный кадр анимации имена. добавить текст и преобразовать его в Если несколько идущих подряд графику (Ctrl + B дважды). букв должны вести себя одинаково, их можно преобразовать в один графиче- 4. Создать анимацию формы. ский объект.? 1. Какие виды трансформации применимы к текстовому блоку? 2. Для чего текст преобразуют в графический объект? 3. В каком случае сохраняется возможность редактирования текста? 4. Какой вид анимации применим к текстовым блокам? 5. Когда можно применять анимацию к отдельным символам текста? УпражненияВыполните примеры 12.5—12.10. Сохраните результаты работы.Создайте анимацию по описанию.1. Установите размеры документа 700 × 200 пикселей.2. Создайте два слоя — «герб» и «город».3. В первый кадр слоя «герб» импортируйте изображение герба вашегогорода (районного или областного центра). При необходимости изменитеразмеры изображения, сохраняя пропорции.4. В первом кадре слоя «город» создайте текстовый блок с названием го-рода. Установите шрифт, размер и цвет текста в соответствии с образцом. ɆɂɇɋɄ5. Кадр 19 слоя «город» преобразуйте в ключевой.Правообладатель Народная асвета
§ 12. Анимация текста 57 6. В стартовом кадре слоя «город» измените размер и место положения текстового блока. ɆɂɇɋɄ 7. В кадры 35 двух слоев добавьте простые кадры. 8. В слое «город» создайте анимацию движения. 9. Сохраните результат и выполните публикацию. Откройте файл upr11_3.fla (результат выполнения упражнения 3 после § 11).Добавьте в фильм анимацию текста. 1. Создайте текстовый блок и напишите слово «АРБУЗ» под изображе- нием круга в первом кадре. 2. Разбейте текст на отдельные буквы и распределите их по слоям.3. В слое «А» преобразуйте выделенную букву в графику.Установите в качестве цвета буквы один из оттенков зеле-ного и придайте букве необычную форму.4. Преобразуйте букву в символ для создания анимациидвижения.5. Создайте конечную фазу будущей анимации. На неко-тором удалении по шкале времени вставьте копию первогокадра: .6. Выделите первый кадр в слое «А». Измените старто-вые значения анимации. Для этого: вынесите изображе-ние буквы за пределы монтажного стола; измените про-порции буквы и перенесите точку трансформации (центрбудущего вращения). Правообладатель Народная асвета
58 Глава 2. Основы анимации 7. Создайте анимацию движения. Буква, посте- пенно изменяя свои размеры и пропорции, долж- на вылетать из-за пределов монтажного стола и, совершив оборот, занять свое место. 8. Следуя действиям, описанным в п. 3—7, создайте анимацию движе- ния всех букв. Изменяя место расположения стартовых кадров на шка- ле времени, добейтесь эффекта появления букв по очереди. Буквы могут двигаться по разным круговым или ломаным траекториям, совершать повороты, изменять свои размеры и пропорции. Время движения и ко- личество поворотов букв тоже может быть разным. Сохраните изменения в файле upr12_2.fla и выполните публикацию. Создайте анимацию «Вода». 1. Установите размеры документа 400 × 200 пикселей. 2. В первом кадре в центре монтажного стола создайте тек- ȼɈȾȺстовый блок, как показано на рисунке. Установите шрифт, размер и цвет текста в соответствии с образцом. 3. Разбейте текст на отдельные буквы и распределите их по слоям. 4. В кадр 5 всех четырех слоев добавьте ключевой кадр. Преобразуйте в этом кадре каждую букву в графический объект. 5. В кадр 20 слоев «В», «О» и «Д» вставьте пустой ключевой кадр. 6. Добавьте в каждый слой в кадре 20 текст в соответствии: «В» — «H», «О» — «2» и «Д» — «О». Уменьшите размер символа «2». Буквы в кад- рах 5 и 20 должны иметь приблизительно одинаковое расположение. 7. Кадр 20 слоя «А» сделайте ключевым. Установите прозрачность цвета . 8. Преобразуйте в кадре 20 каждый символ в графический объект. 9. Создайте анимацию формы (кадр 5 — стартовый, кадр 20 — финишный). 10. Создайте слой «вода» в конце списка слоев. В кадр 1 слоя импорти- руйте изображение фона. 11. Во всех слоях кадра 35 вставьте простой кадр: 12. Сохраните результат и выполните публикацию. Правообладатель Народная асвета
§ 13. Основные алгоритмические конструкции 59 Гл а в а 3ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ § 13. Основные алгоритмические конструкции13.1. Алгоритм и алгоритмические Пример 13.1. Этапы решения зада-конструкции чи по программированию: В 7-м классе вы познакомились с В процессе решения задачи неко-основными алгоритмическими кон- торые этапы приходится повторятьструкциями. Для решения задач по до тех пор, пока анализ результатовпрограммированию были выделены не покажет, что задача решена верно.основные этапы (пример 13.1). Для поиска ошибок можно исполь- Алгоритм — конечная последова- зовать средства отладки программтельность точных действий, формаль- (см. Приложение 3, с. 161—162).ное выполнение которых позволяетполучить решение задачи для любо- В 1966 г. итальянские математи-го допустимого набора исходных дан- ки К о р р а д о Б ё м (1923—2017) иных. Д ж у з е п п е Д ж а к о п и н и (1936— 2001) сформулировали и доказали Исполнитель — человек, группа положение структурного программи-людей или техническое устройство, рования, согласно которому любойкоторые способны правильно выпол- исполняемый алгоритм может бытьнять команды алгоритмов. В даль- преобразован к структурированномунейшем будем рассматривать только виду, т. е. виду, когда ход выполне-исполнителя-устройство с ограничен- ния алгоритма определяется при по-ным набором команд. Набор команд мощи трех структур управления: по-одного исполнителя называют систе- следовательной, ветвлений и циклов.мой команд исполнителя. Командыкомпьютерного исполнителя могутбыть реализованы в виде процедур ифункций. Все команды исполнителя делят нагруппы: 1. Команды, которые непосредствен-но выполняет исполнитель. 2. Команды, изменяющие порядоквыполнения других команд исполни-теля. Любой алгоритм может быть за-писан с использованием трех базо-вых алгоритмических конструкций:Правообладатель Народная асвета
60 Глава 3. Основы алгоритмизации и программирования Полностью концепция структур- следование, цикл и ветвление (при-ного программирования была разра- мер 13.2).ботана в середине 70-х гг. при уча-стии Э. Дейкстры. Команды цикла и ветвления управ- ляют порядком выполнения других Пример 13.2. Блок-схемы алгорит- команд в программе и относятся к ко-мических конструкций: мандам управления (управляющим конструкциям). 1. Следование: Последовательность команд, испол- 2. Цикл: нителем которой является компьютер, 1) цикл с параметром (значение называется программой. Программапараметра изменяется от 1 до N) представляет собой запись на некото- ром формальном языке — языке про- граммирования. Командами в языке программирования считают: операторы (оператор присваивания, оператор ветвления, оператор цикла и др.); вызовы вспомогательных алгорит- мов (как встроенных в библиотеки, так и созданных пользователем).2) цикл с предусловием 13.2. Алгоритмическая конструкция3. Команда ветвления следование Алгоритмическая конструкция сле- дование — последовательность ко- манд алгоритма, которые выполняют- ся в том порядке, в котором они за- писаны. Среди команд, образующих алгоритмическую конструкцию сле- дование, отсутствуют команды, ме- няющие порядок выполнения других команд. В 7-м классе, изучая язык Pascal, вы использовали следующие команды (пример 13.3): процедуры для ввода и вывода дан- ных; оператор присваивания.Правообладатель Народная асвета
§ 13. Основные алгоритмические конструкции 61 Для ввода данных предназначена Пример 13.3. Даны x, y. Написатькоманда read(). В скобках через запя-тую перечисляются имена переменных, программу для вычисления значениязначения которых необходимо ввести. выражения Для вывода данных используюткоманду write(). Она позволяет выво- a = 2x (x − y).дить текстовые сообщения и числовые 7 + y2значения. Текстовые сообщения за-писываются в кавычках, выводятся в Этапы выполнения заданиявиде последовательности символов так,как записаны, и не анализируются при I. Определение исходных данных:выполнении. переменные x, y. При использовании команды writeln(); II. Определение результатов: пере-после вывода сообщения или числа менная a.происходит перевод курсора на следую-щую строку. III. Алгоритм решения задачи. 1. Ввод исходных данных. Оператор присваивания предназна- 2. Вычисление значения выраже-чен для того, чтобы: ния. 3. Вывод результата. задавать значения переменным; IV. Описание переменных: все пе- вычислять значение выражения ременные, определенные для реше-(результат будет записан как значение ния задачи, имеют тип real.переменной). V. Программа: Формат записи оператора присваи-вания: var x,y,a: real; +имя переменной* := +выражение*; В записи арифметического выраже- beginния используются знаки математиче- write('Введите x =');ских действий: сложения (+), вычита- read(x);ния (−), умножения (*), деления (/), а write('Введите y =');также целочисленного деления (div) read(y);и нахождения остатка (mod). Следуетпомнить, что операция деления (/) ис- a:= 2 * x * (x-y)/(7 + y * y);пользуется при вычислениях с данными writeln('a =',a);типа real. Для данных типа integerиспользуются операции div и mod. End. Нередко в одной программе прихо- VI. Тестирование программы:дится выполнять одну и ту же после- Запустить программу и ввестидовательность команд несколько раз. значения x = 3.8, y = 2.7. Результат:В этом случае удобно использовать ȼɜɟɞɢɬɟ[ ȼɜɟɞɢɬɟ\ D VII. Правильность вычислений про- верить на калькуляторе. В примере алгоритмическая кон- струкция следование образована ко- мандами: вывод сообщений; ввод значений переменных; команда присваивания; вывод результата.Правообладатель Народная асвета
62 Глава 3. Основы алгоритмизации и программирования Пример 13.4. Написать программу вспомогательный алгоритм, которыйдля вывода изображения: можно выполнять нужное число раз, обращаясь к его названию. ¬ËÈÂY Вспомогательный алгоритм — ал- 4 горитм, который можно использовать в других алгоритмах, указав его имя и,2 если необходимо, значения параметров.0 10 Вспомогательный алгоритм решает 02 4 6 8 некоторую часть основной задачи. Вы- µ½À зов вспомогательного алгоритма явля-®ÏËÌ<&OUFS> µ½À<4QBDF> ØÒËÁ &TD ®Ìͽ¿Ç½ ' ®ÇËÍËÎÏÙ ется командой, которая может заме- нять несколько команд. ´ÂÍÏÂÃÊÅǽ¾ËϽËÇËÊÔÂʽĽÁ½ÊÅÂÊ¿ØÌËÈÊÂÊË ®ËÎÏËÜÊÅ Вспомогательные алгоритмы вы ис- Изображение состоит из двух оди- пользовали при написании программнаковых фигур. Оформим вспомога- для учебных компьютерных исполни-тельный алгоритм Figura для изо- телей Чертежник и Робот (пример 13.4).бражения одной фигуры. Программа: Команды read и write тоже реализо- ваны как вспомогательные алгоритмы. uses Drawman; procedure Figura; При вычислениях часто используют- begin ся различные математические функции (пример 13.5). Эти функции реализова- PenDown; OnVector(1, 0); ны как встроенные вспомогательные OnVector(0,3); OnVector(-1,0); алгоритмы и могут применяться при OnVector(0, -1); OnVector(3, 0); записи арифметических выражений. OnVector(0, 1); OnVector(-1, 0); Аргументы функций всегда записыва- OnVector(0,-2); OnVector(-2,0); ются в скобках. Некоторые из функ- OnVector(0, -1); PenUp; ций приведены в таблице (другие мож- end; но посмотреть в Приложении 3, с. 158). begin Field(10, 5); ToPoint(1, 1); Figura; ToPoint(6, 1); Figura; end. Пример 13.5. Перечень математи-ческих функций можно посмотреть всправке PascalABC: Запись на Описание языке Pascal Находит модуль числа x abs(x) sqr(x) Возводит число x в квадрат Находит корень квадратный sqrt(x) из числа x. Результат — всегда число типа real Правообладатель Народная асвета
§ 13. Основные алгоритмические конструкции 63 Запись на Описание Пример 13.6. Задана длина сторо-языке Pascal ны квадрата a. Написать программу Находит целую часть нахождения площади квадрата и trunc(x) действительного числа x длины его диагонали. (real). Результат — число frac(x) типа integer Этапы выполнения задания I. Исходные данные: длина сторо- sin(x) Находит дробную часть ны, переменная а. действительного числа x II. Результат: переменные S (пло- cos(x) (real). Результат — число щадь) и d (длина диагонали).RadToDeg(x) типа real III. Алгоритм решения задачи.DegToRad(x) 1. Ввод исходных данных. Вычисляет синус числа x. 2. Вычисление площади по форму- Число x задается в радиа- ле S = a2. нах1 3. Вычисление длины диагонали по формуле d = a 2. Вычисляет косинус числа 4. Вывод результата. x. Число x задается в ра- IV. Описание переменных: все пе- дианах ременные, определенные для реше- ния задачи, имеют тип real. Переводит радианы в гра- V. Программа: дусы var a, S, d: real; begin Переводит градусы в ра- write('Введите a ='); read(a); дианы S:= sqr(a); d:= a*sqrt(2); writeln('S =',s); writeln('d =',d); Аргументом функции может быть end.число, переменная, выражение или VI. Тестирование программы.другая функция: sin(DegToRad(45)), Запустить программу и ввестиsqrt(abs(-16)). значение a = 5.6. Результат: В примере 13.6 используются мате- Правильность вычислений можноматические функции для возведения проверить на калькуляторе.числа в квадрат и вычисления ква-дратного корня.? 1. Что такое алгоритм? 2. Перечислите основные алгоритмические конструкции. 3. Какая команда используется в языке Pascal для ввода данных? 4. Какие команды используются в языке Pascal для вывода данных? 5. Для чего нужна команда присваивания? 6. В каких случаях удобно использовать вспомогательный алгоритм? 7. Какие математические функции могут использоваться при записи арифмети- ческих выражений? 1 Радиан — единица измерения углов в Международной системе единиц (1 радиансоответствует величине развернутого угла 180°). Правообладатель Народная асвета
64 Глава 3. Основы алгоритмизации и программирования УпражненияРасставьте команды программы в правильном порядке так, чтобы можно быловычислить значение выражения a= 2x 4 . x2 +1. writeln(ꞌa = ꞌ,a); 5. Begin2. write(ꞌВведите значение x = ꞌ); 6. a: = 2 * x/(x * x+4);3. End. 7. read(x);4. Var x,y,a: real; Определите типы данных для каждой переменной, использованной в оператореприсваивания.1. y: = sqrt(a – 4)/16; 5. y: = int(a);2. z: = sqr(3 * a + 2); 6. y: = trunc(a);3. a: = abs(a – 4.2); 7. y: = frac(a);4. d: = x mod 2; 8. s: = sin(3.14 * r).Найдите и исправьте ошибки в программах.1. var x, y, z1, z2:integer; 2. var x, y, z1, z2:real; begin begin write(ꞌВведите x =ꞌ); write(ꞌВведите x =ꞌ); read(x); read(x); write(ꞌВведите y =ꞌ); write(ꞌВведите y =ꞌ); read(y); read(y); z1:= int(x/y); z1:=x div y; z2:= frac(x/y); z2:=x mod y; write(ꞌЦелая часть =ꞌ,z1); write(ꞌЦелая часть =ꞌ,z1); write(ꞌДробная часть =ꞌ,z2); write(ꞌОстаток =ꞌ,z2); end. end. Даны x и z. Измените программу из примера 13.4 так, чтобы вычислялось значе-ние выражения a = 2x . z2 + 9 Заданы три числа. Напишите программу для нахождения среднего арифметиче-ского этих чисел. Заданы два числа. Напишите программу для нахождения частного от деленияпервого числа на второе и округлите результат до ближайшего целого. Даны гипотенуза и катет прямоугольного треугольника. Напишите программу длянахождения второго катета и площади треугольника. Заданы два числа. Напишите программу для нахождения частного этих чисел.Округлите результат до десятых, оставив в дробной части одну цифру. Правообладатель Народная асвета
§ 14. Графические возможности среды программирования PascalABC 65§ 14. Графические возможности среды программирования PascalABC14.1. Основы работы с графикой \_/ Вы уже знакомы с графическими ре- -=(_)=-дакторами, в которых для построения / \ `'::.изображений на компьютере исполь- _________H ,%%&%,зуются графические примитивы —простые геометрические фигуры: пря- /\ _ \%&&%%&%моугольник, окружность, эллипс, от-резок и т. д. Графический редактор — / \___/^\___\%&%%&&программа, написанная на каком-либоязыке программирования. | | [] [] |%\Y&%' Для работы с графикой языки про- | | .-. | ||граммирования используют специаль-ные библиотеки (модули), содержащие ~~@._|@@_|||_@@|~||~~~наборы команд для построения изо-бражений. В PascalABC для работы ~~~~~~~~~`~\"~\"~~\"~~)~~~~)~\"~\"\"~`~~~~~ ~~~с графикой используется библиотека ~~~GraphABC. Для подключения этой биб- ~~~лиотеки в программе записывается ко-манда uses GraphABC; Первые компьютеры не имели воз- можностей работы с графикой. На Положение фигур задается коорди- печатающих устройствах выводилисьнатами в графическом окне. Коорди- «картинки», состоящие из символов1.натная плоскость в нем отличается оттой, которую вы используете на уроках В 1958 г. был запущен компьютерматематики. Началом координат явля- Lincoln TX-2, впервые использующийется верхний левый угол графическо- графический экран. В 1981 г. нача-го окна — точка (0; 0) (пример 14.1). ли применять цвета. В графическомКоординаты задают порядковый но- режиме при разрешении 320 200мер пикселя по горизонтали и верти- пикселей использовались 4 цвета изкали, поэтому они могут быть толь- стандартных палитр: пурпурный,ко целыми числами. Отсчет значе- сине-зеленый, белый, черный илиний координаты х происходит слеванаправо, а координаты y — сверху красный, зеленый, желтый, черный.вниз. По умолчанию создается графи-ческое окно размером 640 × 480 пик- Пример 14.1. Графическое окноселей. среды программирования PascalABC с изображением координатных осей и точки с координатами (70, 40). Точка расположена на расстоянии 70 пикселей от левого края окна и на расстоянии 40 пикселей от верхнего края. Размеры графического окна можно задать командой SetWindowSize(n,m); В скобках указаны размеры окна по горизонтали и вертикали.1 https://www.asciiart.eu/buildings-and-places/houses (дата доступа: 26.07.2018).Правообладатель Народная асвета
66 Глава 3. Основы алгоритмизации и программирования Пример 14.2. Работа со справочной 14.2. Работа со справочной системойсистемой. Для перехода в справочник среды программирования PascalABCнеобходимо нажать клавишу F1 иливыполнить команду меню: Помощь → В библиотеке GraphABC содержится→ Справка. В открывшемся окне пе- большое количество команд. Эти ко-рейти в раздел Стандартные модули манды описаны в справочной системеи выбрать Модуль GraphABC. среды PascalABC (пример 14.2). Здесь есть описание графических примити- Пример 14.3. Графические прими- вов, названия цветовых констант, опи-тивы: сание работы с пером и кистью, коман- ды работы с графическим окном. Программа для их рисования: uses GraphABC; Команды библиотеки GraphABC — begin вспомогательные алгоритмы, записан- ные как отдельные процедуры. Исполь- //Круг зование команды в программе означает Circle(250, 125, 30); вызов соответствующего алгоритма. //Прямоугольник Rectangle(100,200,400,450); 14.3. Основные графические //Эллипс примитивы Ellipse(100,200,400,450); //Отрезок Рассмотрим команды для рисования Line(450, 50, 550, 350); графических примитивов: end. Line(x1,y1,x2,y2) — отрезок, соеди- няющий точки с координатами (x1, y1) и (x2, y2). MoveTo(x,y) — устанавливает теку- щую позицию рисования в точку (x, y); LineTo(x,y) — отрезок от текущей позиции до точки (x, y); Rectangle(x1,y1,x2,y2) — прямо- угольник, заданный координатами про- тивоположных вершин (x1, y1) и (x2, y2); Circle(x1,y1,r) — круг с центром в точке (x1, y1) и радиусом r; Ellipse(x1,y1,x2,y2) — овал (эл- липс), вписанный в прямоугольник с координатами противоположных вер- шин (x1, y1) и (x2, y2). (Рассмотрите пример 14.3.) Команды для рисования других гра- фических примитивов имеются в спра- вочной системе и в Приложении 3 (с. 159). Пример 14.4. Написать программу, которая строит изображение домика,Правообладатель Народная асвета
§ 14. Графические возможности среды программирования PascalABC 67используя процедуры Line, Lineto, Пример 14.4.Rectangle, Circle. V. Программа: uses GraphABC; Этапы выполнения задания begin I. Исходные данные: результат рабо- //Домты программы не зависит от исходных Rectangle(100,200,400,450);данных. //Окно Rectangle(200,250,300,350); II. Результат: готовый рисунок. Line(250, 250, 250, 350); III. Алгоритм решения задачи. Line(200, 300, 300, 300); Рисунок состоит из: прямоугольни- //Крышаков, отрезков, круга. Для расчета ко- MoveTo(100,200);ординат рекомендуется предваритель- LineTo(250, 0);но сделать рисунок на листе бумаги в LineTo(400, 200);клеточку. Circle(250, 125, 30); IV. Описание переменных. Перемен- end.ные не используются. VI. Тестирование программы: Запустить программу. Результат:14.4. Работа с пером и кистью Обратите внимание, что при напи- В графических редакторах, прежде сании команд у вас появляются под-чем рисовать какие-либо фигуры, уста- сказки:навливают их цвет. Обычно выбираютдва цвета. Цвет 1 определяет цвет ли- procedure GraphABC.Cide(x: integer; y: integer; r: integer);ний и контуров фигур, Цвет 2 исполь- Описание:зуется для заливки фигур. Кроме того,можно изменять стиль линий и залив- Рисует заполненную окружность с центром (х,y) и радиусом rки, а также определять толщину линий. Подсказка появляется также при В графическом режиме PascalABC на- наведении указателя мыши на ужестройки линии определяет перо (Pen), а написанную команду.настройки внутренней области фигур —кисть (Brush). Команды для работы с ки- Если установить текстовый курсорстью и пером приведены в таблице. на команду и нажать F1, то откроет- ся страница из справочника с описа- Команда Описание нием этой команды. SetPenColor Цвет линий SetPenWidth Толщина линии SetPenStyle Стиль линийSetBrushColor Цвет заливкиSetBrushStyle Стиль заливки Вид штриховкиSetBrushHatch для заливки Правообладатель Народная асвета
68 Глава 3. Основы алгоритмизации и программирования Пример 14.5. Цветовые константы. Значение, которое нужно установить для каждой из команд, записывается в Пример 14.6. Стили пера. скобках. Например: Пример 14.7. Стили штриховки SetPenColor(clRed) — красныйкисти. цвет рисования линий; SetBrushColor(clBlue) — синий цвет заливки фигур; SetPenWidth(3) — толщина пера в 3 пикселя; SetPenStyle(psDot) — штриховая линия; SetBrushStyle(bsHatch) — штри- ховая заливка; SetBrushHatch(bhCross) — штри- ховка в клеточку. Значения цветовых констант, сти- лей линий и заливок можно найти в справочной системе среды PascalABC (примеры 14.5—14.7) и в Приложении 3 (с. 160). Команды для установки цвета и сти- ля записывают перед командой рисова- ния фигуры. Эти команды действуют до тех пор, пока цвет или стиль не бу- дет изменен. Если, например, для пера была установлена толщина в 3 пиксе- ля, то отрезки и границы фигур будут иметь толщину в 3 пикселя до новой смены толщины пера. Для фигур по умолчанию установ- лена заливка белым цветом. Если цвет кисти выбрать до рисования фигуры, то фигура будет закрашена установлен- ным цветом. Цвет уже нарисованной фигуры можно изменить с помощью команды заливки: FloodFill(x,y,c); — заливает огра- ниченную область одного цвета цве- том c, начиная с точки внутри области (x,y) (в примере 14.8 показано, как рас- крашен домик из примера 14.4).Правообладатель Народная асвета
§ 14. Графические возможности среды программирования PascalABC 69 Среда программирования PascalABC Пример 14.8. Программа:позволяет обращаться к свойствам ки- uses GraphABC;сти и пера по-другому. Так, например, beginдля изменения цвета (стиля, толщины)можно записать //Дом SetPenColor(RGB(255,0,0)); Pen.Color := clRed; SetBrushColor(clBlue); Pen.Style := psDot; Rectangle(100,200,400,450); Pen.Width := 3; //Окно Подсказка среды выглядит следую- SetBrushColor(clYellow);щим образом: Rectangle(200,250,300,350); SetPenColor(clRed); Вторую часть команды можно вы- SetPenStyle(psDot);брать из выпадающего списка. SetPenWidth(2); Line(250,250,250,350); При изучении векторной графики Line(200,300,300,300);вы познакомились с цветовой моде- //Крышалью RGB, которая позволяет записать SetPenStyle(psSolid);любой цвет тремя составляющими: SetPenWidth(1);красной, зеленой и синей. Функция Line(100, 200, 250, 0);RGB (r, g, b) позволяет определить цвет Line(250, 0, 400, 200);по трем составляющим. Так, коман- SetBrushStyle(bsHatch);да SetPenColor (clRed); аналогична SetBrushColor(clLightGreen);команде SetPenColor (RGB(255,0,0)); SetBrushHatch(bhCross);Такой способ задания цвета позволя- Circle(250, 125, 30);ет задавать цвета, значения которых FloodFill(250,70, clPlum);не описаны цветовыми константами. end.Значения составляющих цвета можно Результат работы программы:посмотреть в графическом редактореPaint (пример 14.9). Пример 14.9. Составляющие цвета: В графическом режиме PascalABCможно выводить в графическое окнотексты и числа. TextOut(x,y,z); — выводит строкуили число z в прямоугольник с коор-динатами левого верхнего угла (x,y).Правообладатель Народная асвета
70 Глава 3. Основы алгоритмизации и программирования Пример 14.10. Выведем в графиче- Если нужно вывести строку, то ееское окно приветствие миру, исполь- символы заключают в кавычки, длязуя разные свойства текста. вывода числа можно использовать пере- менные или значения чисел. Если в ка- Программа: честве z записать арифметическое выра- uses GraphABC; жение, то будет выведено его значение. begin Для изменения параметров текста //Цвет фона для текста применяют следующие команды: SetBrushColor(clYellow); Команда Описание SetFontName('Comic Sans MS'); SetFontColor Цвет символов //Цвет букв SetFontSize Размер символов SetFontColor(clBlue); SetFontName Имя текущего шрифта //Размер шрифта SetFontStyle Стиль текста SetFontSize(25); //Полужирный шрифт Команда SetBrushColor устанав- SetFontStyle(fsBold); ливает цвет прямоугольника, вну- TextOut(20,30,'Здравствуй,'); три которого будет находиться текст SetBrushColor(clPink); (пример 14.10). Команда действует до тех пор, пока цвет не будет изменен. StFontName('Monotype Corsiva'); Для записи текста без фона нужно установить прозрачный фон кисти: SetFontColor(clSalmon); SetBrushStyle(bsClear). SetFontSize(50); Все параметры для текста задаются до команды вывода его в графическое SetFontStyle(fsUnderline); окно. Имя шрифта, которым будет вы- TextOut(120,130,'МИР!'); веден текст, заключается в кавычки. //Прозрачный фон Возможные варианты можно посмо- SetBrushStyle(bsClear); треть в Word. Стиль текста может иметь следующие значения: fsNormal (обыч- SetFontName('Tahoma'); ный), fsBold (жирный), fsItalic (на- клонный), fsUnderline (подчеркнутый) SetFontColor(clViolet); или их комбинации: fsBoldUnderline SetFontSize(20); (жирный подчеркнутый). SetFontStyle(fsItalic); TextOut(300,130,'PascalABC'); end. Результат выполнения программы:? 1. Какая библиотека используется для подключения графики в PascalABC? 2. Как определена система координат в графическом окне? 3. Как задать размеры графического окна? 4. Как найти описание графических примитивов в справочнике? 5. Как можно изменить цвет линий, заливки? 6. Как вывести текст в графическом окне?Правообладатель Народная асвета
§ 15. Простые и составные условия 71 Упражнения Подпишите изображение из примера 14.8. Дополните изображение домика из примера 14.8 изображениямитрубы и дыма из трубы в виде нескольких овалов: Дополните результат, полученный при выполнении задания 2, какими-либо изпредложенных изображений или придумайте свои. Напишите программу для создания изображения. Раскрасьте данное изображе-ние по своему усмотрению. Дополнительные команды для построения графическихпримитивов можно найти в справочной системе.Грузовик Робот Цветок Чебурашка 1 2 3 4 § 15. Простые и составные условия15.1. Логический тип данных Тип Boolean назван в честь анг- лийского математика и логика Напомним изученные в 7-м классе Д ж о р д ж а Б ул я, занимавшегосяпонятия высказывание и условие для вопросами математической логики висполнителя. XIX в. Высказывание — повествователь- Данный тип присутствует в по-ное предложение (утверждение), о ко- давляющем большинстве языковтором можно сказать, истинно оно или программирования. В некоторыхложно. языках реализуется через число- вой тип данных. Тогда за значение Условием для исполнителя явля- ложь принимается 0, а за значениеется известное ему высказывание, истина — 1.которое может соблюдаться (быть Правообладатель Народная асвета
72 Глава 3. Основы алгоритмизации и программирования Пример 15.1. Примеры логических истинным) либо не соблюдаться (бытьвыражений: ложным). 3 + 7 — логическое выражение, В языке программирования Pascalзначение которого true; для работы с условиями определен логи- ческий тип данных boolean. Величины 2 + 2 * 2 = 8 — логическое выра- типа boolean могут принимать два зна-жение, значение которого false; чения — false (ложь) и true (истина). abs(-5) * abs(3) — логическое Значения false и true получают-выражение, значение которого true; ся в результате выполнения операций сравнения над числовыми данными. y *= sqr(x) — логическое вы- Для сравнения используют знаки, ука-ражение, значение которого можно занные в таблице.определить, только зная значенияпеременных x и y. При x = 2 и y = 10 Операция PascalABCзначение выражения — true. При Равно (=) =x = 10 и y = 2 — false. Не равно (≠) +* Проверим истинность этих выра- Больше (*) *жений в программе: Меньше (+) + Больше или равно (,) *= var a1, a2, a3, a4, a5: boolean; Меньше или равно (-) += x, y: integer; Сравнивать можно константы, пере- менные, арифметические и логические begin выражения. a1 := 3 + 7; writeln('a1 =', a1); Логическое выражение — выраже- a2 := 2 + 2 * 2 = 8; ние, принимающее одно из двух значе- writeln('a2=', a2); ний: true или false. a3 := abs(-5) * abs(3); writeln('a3 =', a3); Логические выражения можно при- x := 2; y := 10; сваивать переменным типа boolean, а a4:= y * = sqr(x); также выводить их значения на экран: writeln('a4 = ', a4); будет выведено слово false или true x := 10; y := 2; соответственно (пример 15.1). Условия a5 := y *= sqr(x); для исполнителя являются частным writeln('a5 =', a5); случаем логических выражений. end. Пример 15.2. Написать программу, Результат работы программы: которая выведет на экран значение true или false в зависимости от того,a1 = True является ли введенное число x четнымa2 = False или нет.a3 = Truea4 = Truea5 = False По умолчанию false + true.Правообладатель Народная асвета
Этапы выполнения задания § 15. Простые и составные условия 73 I. Исходные данные: x (введенное Пример 15.2.число). V. Программа: var x: integer; II. Результат: a (true или false). III. Алгоритм решения задачи. a: boolean; 1. Ввод исходных данных. begin 2. Вычисление значения логическойпеременной. Число является четным, write('Введите x =');если остаток от деления его на 2 равен read(x);нулю. Значение переменной a определя- a := x mod 2 = 0;ется значением выражения x mod 2 = 0. write('Число четное — ',a); 3. Вывод результата. end. IV. Описание переменных: x — VI. Тестированиеinteger, a — boolean. Запустить программу и ввести значение x = 6. Результат:15.2. Составные условия ȼɜɟɞɢɬɟ[ ɑɢɫɥɨɱɟɬɧɨɟ7UXH С высказываниями можно произ-водить логические операции (НЕ, И, Запустить программу и ввестиИЛИ). Для логических переменных значения x = 11. Результат:также определены логические опера-ции, соответствующие операциям над ȼɜɟɞɢɬɟ[ высказываниями: not, and, or. ɑɢɫɥɨɱɟɬɧɨɟ)DOVH Логические выражения, в кото- В языке PascalABC реализована рых наряду с простыми условиями логическая операция xor — исклю- (сравнениями) используются логиче- чающее ИЛИ. Этой операции соот- ские операции, называют составны- ветствует высказывание: «Только ми условиями. одно из двух высказываний может быть истинно». Таблица истинности для операции xor: Приведем таблицы истинности логи- A B A xor Bческих операций. True True False False True True Логическая Результат операции True False True переменная False False False AB not A A and B A or B Все логические операции могутTrue True False True True применяться к числам типа integer.False True True False True Число рассматривается в двоичномTrue False False False True представлении, и операции применя-False False True False False ются к битам числа. Бит, равный 1, представляется как истина, а бит, равный нулю, — как ложь. Правообладатель Народная асвета
74 Глава 3. Основы алгоритмизации и программирования Пример 15.3. Определение поряд- В логических выражениях могутка действий для выражения (a, d — встречаться как арифметические опе-boolean, c, b — integer): рации, так и логические. Порядок вы- полнения операций определяется их a or (c + b) and d приоритетом: Первым выполняется сравнениеc и b, затем логическая операция 1) not;and, потом — or. 2) *, /, div, mod, and; 3) +, −, or; Пример 15.4*. Рассмотрим выра- 4) =, +*, +, *, +=, *=.жение: (Рассмотрите пример 15.3.) Операции с одинаковым приорите- a + b and c + d том выполняются по порядку, слева направо. Для изменения порядка вы- Если a, b, c, d имеет тип integer, полнения операций применяют скобкито получим ошибку: «Операция '+' (пример 15.4).не применима к типам boolean и При составлении программ частоinteger» (с помощью знака '+' нель- нужно строить отрицания сложным ло-зя сравнивать число и логическую гическим выражениям. Для этого по-переменную). Если переменные име- лезно использовать тождества, извест-ют тип real, то возникнет ошибка: ные из алгебры логики (пример 15.5),«Операция 'and' не применима к и следующую таблицу:типу real». Правильная запись вы-ражения: Условие Противоположное условие (отрицание условия) (a + b) and (c + d) a+b a *= b Все вышеперечисленные ошибки a*b a += bвозникают потому, что операция and a=b a +* bобладает большим приоритетом поотношению к операциям +. Поэтому Пример 15.6. Написать программу,сначала будет производиться попыт- которая выдаст на экран значение trueка выполнить операцию b and c, или false в зависимости от того, нахо-а затем сравнения. дится ли число B между числами A и C. Пример 15.5. Построение отрица- Этапы выполнения заданияний: I. Исходные данные: переменные А, not not a = a; B, C (вводимые числа). not (a and b) = (not a) or (not b); not (a or b) = (not a) and (not b). II. Результат: rez (True или False). III. Алгоритм решения задачи. Рассмотрим выражение not a + b 1. Ввод исходных данных.с переменными а и b типа integer.Здесь операция not относится к пере-менной a, поэтому в двоичном пред-ставлении числа a биты, равные 1,будут заменены на 0, а биты, равные0, — на 1. Затем полученный резуль-тат сравнится с числом b. Для отри-цания сравнения выражение нужнозаписать так: not (a + b).Правообладатель Народная асвета
§ 15. Простые и составные условия 75 2. Вычисление значения логической Пример 15.6.переменной. Рассмотрим два случая. V. Программа: var A, B, C: integer; Верно неравенство: А + B + C. Этомунеравенству соответствует логическое r1, r2, rez: boolean;выражение: (А + B) and (В + С). При- beginсвоим переменной r1 значение этоговыражения. writeln('Введите A, B, C'); read(A, B, C); Верно неравенство: А * B * C. Этому r1 := (A + B) and (B + C);неравенству соответствует логическое r2 := (A * B) and (B * C);выражение: (А * B) and (В * С). При- rez := r1 or r2;своим переменной r2 значение этого write('Число B между числамивыражения. A и C — ',rez); Ответом на задачу будет значение end.логического выражения r1 or r2. VI. Тестирование. Запустить программу и ввести 3. Вывод результата. значения A = 5, B = 0, С = –5. Ре- IV. Описание переменных: A, B, C — зультат:integer, r1, r2, rez — boolean. Для работы с логическими величи- ȼɜɟɞɢɬɟ$%&нами могут использоваться функции. Функция Ord (порядковый номер зна- ɑɢɫɥɨ%ɦɟɠɞɭɱɢɫɥɚɦɢȺɢɋ7UXHчения) позволяет преобразовать логиче-ское значение в числовое: Ord(false)= 0, Запустить программу и ввестиа Ord(true) = 1. Функции Pred (пред- значения A = –2, B = –7, С = 5. Ре-шествующее значение) и Succ (после- зультат:дующее значение) позволяют преобра-зовывать логические значения: ȼɜɟɞɢɬɟ$%& D := Pred(true); {D = false} ɑɢɫɥɨ%ɦɟɠɞɭɱɢɫɥɚɦɢȺɢɋ)DOVH E := Succ(false); {E = true} VII. Анализ результатов. Для пол- ного тестирования программы нуж- но проверить все возможные случаи взаимного расположения A, B, C (их всего 6).? 1. Что такое составное условие? 2. Назовите логические операции, используемые в PascalABC. 3. Какой приоритет у логической операции not (and, or)?Упражнения Сформулируйте и реализуйте обратную задачу для примера 15.2: для всех техслучаев, для которых в исходной задаче было true, нужно вывести false и, наоборот,для всех тех случаев, в которых в исходной задаче получалось false, получить true. В PascalABC определена логическая функция odd(x). Значение этой функцииtrue, если число x является нечетным, и false, если х — четное. Измените про-грамму примера 15.2, используя функцию odd.Правообладатель Народная асвета
76 Глава 3. Основы алгоритмизации и программированияОпределите, что делают следующие программы, и дополните команду вывода.1. var x: integer; 2. var x: integer; a: boolean; a: boolean; begin begin write(ꞌВведите x =ꞌ); write(ꞌВведите x =ꞌ); read(x); read(x); a := x mod 10 = 0; a := (x*10) and (x + 100); write(ꞌЧисло ... — ꞌ,a); write(ꞌЧисло ... — ꞌ,a); end. end. Напишите программу, которая выведет на экран значение true или false, в за-висимости от того, является ли введенное число x положительным или нет. Напишите программу, которая выведет на экран значение true или false, в за-висимости от того, является ли введенное число x четырехзначным или нет. Заданы два положительных числа x и y. Определите, верно ли, что первое числоменьше второго и хотя бы одно из них нечетное. Выведите на экран true или false. § 16. Оператор ветвленияИспользование управляющих кон- 16.1. Запись оператора ветвленияструкций предполагает запись про- Алгоритмическая конструкция ветв- ление (см. блок-схему в примере 13.2,граммы в структурированном виде. с. 60) обеспечивает выполнение одной или другой последовательности командСтруктурированность программ до- в зависимости от истинности или лож- ности некоторого условия.стигается за счет отступов, регули- Оператор ветвления — команда,рующих размещение вложенных ал- реализующая алгоритмическую кон- струкцию ветвление на языке про-горитмических конструкций. граммирования.Можно соблюдать следующее пра- Для записи оператора ветвления ис- пользуют команды if. Формат команды:вило: при движении курсора вниз от if <условие> then«начала» структуры до ее «конца» на beginпути курсора могут встретиться толь- Команды 1; endко пробелы. Все, что находится «вну- else beginтри» структуры, размещается правее. Команды 2;Кнопка позволяет преобразо- end;вать код программы к структуриро-ванному виду.Пример 16.1.V. Программа:var x: integer;begin write('Введите x = '); read(x); if x * 0 then write('положительное') else write('не положительное');end. Правообладатель Народная асвета
Оператор ветвления может быть в § 16. Оператор ветвления 77полной или в сокращенной форме. В со-кращенной форме отсутствует блок else: Пример 16.1. Продолжение. VI. Тестирование. if <условие> then Запустить программу и ввести begin значение x = 5. Результат: Команды; ȼɜɟɞɢɬɟ[ end; ɩɨɥɨɠɢɬɟɥɶɧɨɟ Условие в записи оператора ветвле-ния бывает простым и составным. Опе- Запустить программу и ввестираторные скобки могут быть опущены, значение x = –1. Результат:если внутри их находится одна команда. Пример 16.1. Задано число x. Нужно VII. Анализ результатов. Для пол-определить, является ли оно положи- ной проверки программы требуетсятельным или нет, и вывести соответ- еще проверить значение x = 0.ствующее сообщение. ȼɜɟɞɢɬɟ[ Этапы выполнения задания ɧɟɩɨɥɨɠɢɬɟɥɶɧɨɟ I. Исходные данные: x (введенное Пример 16.2.число). V. Программа: uses GraphABC; II. Результат: соответствующее со- var m:integer;общение. begin III. Алгоритм решения задачи. Rectangle(250,50,390,250); 1. Ввод исходных данных. SetBrushColor(clBlack); 2. Проверка значения выражения Circle(320,100,30);(x > 0). Circle(320,200,30); 3. Вывод результата. SetBrushColor(clWhite); IV. Описание переменных: x — writeln('Введите время');integer. read(m); writeln(m)1;16.2. Решение задач с использованием if m mod 2 = 1 thenоператора ветвления FloodFill(320,100,clRed) Пример 16.2. В момент времени else00:00 на светофоре для пешеходоввключили зеленый сигнал. Далее сиг- FloodFill(320,200,clGreen);нал светофора сменяется каждую ми- end.нуту: 1 минуту горит зеленый сигнал,1 минуту — красный. Известно, что смомента включения светофора прошло 1 При вводе данных в графическом окне они не отображаются на экране. Для тогочтобы видеть, что ввели, необходимо дополнительно вывести введенное значение. Правообладатель Народная асвета
78 Глава 3. Основы алгоритмизации и программирования Пример 16.2. Продолжение. m минут. Требуется нарисовать свето- VI. Тестирование. фор с включенным сигналом в соответ- Вид графического окна до ввода ствии с введенным значением времени.числа: Этапы выполнения задания Ввести значение x = 5. Результат: I. Исходные данные: m (заданное Ввести значение x = 12. Результат: время). Пример 16.3. II. Результат: рисунок светофора, за- V. Программа: висящий от значения m. Var x1, y1, x2, y2, r_T, r_K: real; begin III. Алгоритм решения задачи. 1. Рисование светофора (прямо- writeln('Танин дом'); read(x1,y1); угольник и 2 круга) с выключенными writeln('Катин дом'); read(x2,y2); сигналами. r_T:= sqrt(x1*x1+y1*y1); 2. Ввод исходных данных. r_K:= sqrt(x2*x2+y2*y2); 3. Цвет сигнала будет зависеть от if r_T + r_K then того, четным или нечетным будет зна- чение m. Если m четное — сигнал writeln('Танин дом ближе') зеленый (закрашиваем нижний круг), else если нечетное — красный (закрашива- ем верхний круг). writeln('Катин дом ближе'); 4. Закрасим нужный круг цветом в end. зависимости от четности m. VI. Запустить программу и ввести IV. Описание переменных: m —значения: Танин дом — x1 = 2.3, y1 = integer.= 4.5, Катин дом — x2 = –2.1, y2 = 4.9 Пример 16.3. Таня и Катя живут в разных домах. Им стало интересно, кто из них живет ближе к школе. Они разместили на карте прямоугольную систему координат так, чтобы школа имела координаты (0; 0). Известно, что Танин дом имеет координаты (x1; y1), а Катин (x2; y2). Девочки ходят в школу по прямой и проходят разные расстоя- ния. Нужно написать программу, кото- рая определит, чей дом ближе к школе. Этапы выполнения задания I. Исходные данные: координаты до- мов девочек x1, y1, x2, y2. II. Результат: сообщение о том, чей дом ближе. III. Алгоритм решения задачи.Правообладатель Народная асвета
1. Ввод координат домов. § 16. Оператор ветвления 79 2. Вычисление расстояний до школы:r_T (от Таниного дома) и r_K (от Кати- Пример 16.3. Продолжение.ного дома). Для вычисления воспользу- Результат должен быть таким:емся теоремой Пифагора: r _T = x12 + y12 и r _ K = x22 + y22 . 3. Сравнение расстояний. Вывод от- Пример 16.4.вета. V. Программа: IV. Описание переменных: x1, y1, uses GraphABC;x2, y2, r_T, r_K имеют тип real. var x,y, x0, y0, R_b, R_m, z: Пример 16.4. Вася начал занимать- integer;ся стрельбой из лука. Для трениров-ки он решил создать модель мишени, beginкоторая будет реагировать на лазер. x0 := 320; y0 := 240;Мишень представляет собой два кру- R_b := 150; R_m := 75;га (стреляет Вася пока не очень хоро- Circle(x0,y0,R_b);шо) разного радиуса с общим центром. Circle(x0,y0,R_m);Если Вася попал в маленький круг, writeln('Выстрел');то круг загорается зеленым. Большой read(x,y);круг при попадании в него загораетсяжелтым. Если Вася не попал ни в один writeln(x,' ',y);из кругов, то область вне кругов за- z := sqr(x-x0)+sqr(y-y0);горается красным. Необходимо реали- if z + sqr(R_m) thenзовать компьютерную модель Васиноймишени (при попадании на границу FloodFill(x,y,clLightGreen)круга ничего не должно происходить). else Этапы выполнения задания if z + sqr(R_b) then FloodFill(x,y,clYellow) I. Исходные данные: координатыточки выстрела (x; y). else II. Результат: рисунок мишени. FloodFill(x,y,clRed); III. Алгоритм решения задачи. end. VI. Тестирование. Запустить программу и ввести координаты выстрела (240; 240). Результат:Правообладатель Народная асвета
80 Глава 3. Основы алгоритмизации и программирования Пример 16.4. Продолжение. 1. Рисование мишени: 2 круга ради- Запустить программу еще раз и вве- усов R_b = 150 и R_m = 75 с центром всти координаты выстрела (300; 240). точке (x0; y0), x0 = 320, y0 = 240. Снача- ла рисуем круг большего радиуса. Запустить программу еще рази ввести координаты выстрела 2. Ввод данных: координаты точки(450; 140). выстрела. Пример 16.5. 3. Цвет рисунка будет зависеть от то- V. Программа: го, в какую область относительно кру- var a, a1, a2, a3: integer; гов попала точка. Возможны 3 случая: begin 1) точка внутри маленького круга. write('Введите a = '); Длина отрезка между точкой и цен- read(a); тром круга меньше радиуса. По теоре- if (a * 99) and (a + 1000) then ме Пифагора: begin (x − x0)2 + (y − y0)2 + R_m2; //Первая цифра 2) если условие а) не выполняет- a1 := a div 100; ся, проверяем, принадлежит ли точка //Вторая цифра большому кругу: a2 := a mod 100 div 10; (x − x0)2 + (y − y0)2 + R_b2; //Третья цифра 3) если условия а) и б) не выполня- a3 := a mod 10; ются, то Вася не попал в мишень. writeln(a1); 4. Для сокращения записи опреде- writeln(a2); лим переменную z = (x − x0)2 + (y − y0)2. writeln(a3); 5. Закрасим нужную область цветом end в зависимости от проверки условий. else IV. Описание переменных: x, y, x0, writeln('не трехзначное'); y0, R_b, R_m, z имеют тип integer. end. Пример 16.5. Проверить, является ли введенное число трехзначным, и ес- ли да, то вывести цифры этого числа в отдельных строках. Этапы выполнения задания I. Исходные данные: a (трехзначное число). II. Результат: переменные a1, a2, a3 (цифры числа) или сообщение «не трех- значное». III. Алгоритм решения задачи. 1. Ввод исходного числа. 2. Проверка числа. Число a являет- ся трехзначным, если 99 < a < 1000.Правообладатель Народная асвета
3. Если число трехзначное, выделя- § 16. Оператор ветвления 81ем его цифры: Пример 16.5. Продолжение. 1) для выделения первой цифры a1 VI. Тестирование.находим целую часть от деления числа Запустить программу и ввестиa на 100; значение 345. Результат следующий: 2) для выделения второй цифры a2числа a находим остаток от его деле- ȼɜɟɞɢɬɟɚ ния на 100, а затем целую часть oт де- ления полученного остатка на 10; 3) последняя цифра числа a3 явля-ется остатком от деления числа a на 10. Другой вариант исходных данных: 4. Вывод результата. ȼɜɟɞɢɬɟɚ IV. Описание переменных: все пере- ɧɟɬɪɟɯɡɧɚɱɧɨɟменные имеют тип integer.? 1. Что такое оператор ветвления? 2. Чем отличается полная запись оператора ветвления от сокращенной? 3. Можно ли использовать составные условия в операторе ветвления?Упражнения Можно ли изменить логическое выражение в операторе ветвления в примере 16.1так, чтобы сообщения ꞌположительноеꞌ и ꞌне положительноеꞌ пришлось поменятьместами? Если да, то как это сделать? Какие изменения нужно внести в программу примера 16.1, чтобы для числа рас-сматривались три случая: ꞌположительноеꞌ, ꞌотрицательноеꞌ, ꞌравно нулюꞌ? Подключите графический режим в программе примера 16.1. Измените программутак, чтобы сообщение ꞌположительноеꞌ выводилось красным цветом, а сообщениеꞌне положительноеꞌ — синим. Измените программу в примере 16.2 так, чтобы четность (нечетность) числа про-верялась с использованием функции odd. Напишите программу. Задано число x. Если число четное, то нарисовать на экра-не зеленый прямоугольник, а если нечетное, то красный круг (см. пример 16.2). Добавьте в программу из примера 16.3 проверку корректности исходных данных:координаты домов должны быть такими, чтобы расстояния до школы были разными.Если расстояния одинаковы, то вывести сообщение ꞌКоординаты введены неверноꞌ,а если разные, то вывести ответ. Какие изменения понадобится внести в программу из примера 16.3, если допу-стить, что девочки могут проходить одинаковые расстояния? Внесите изменения впрограмму и проверьте правильность ее работы.Правообладатель Народная асвета
82 Глава 3. Основы алгоритмизации и программирования Для усложнения тренировок Вася (пример 16.4) решил менять местоположение мишени и радиусы кругов. Добавьте в программу возможность ввода радиусов боль- шого и маленького кругов, а также центра мишени. Проверьте правильность работы программы на различных наборах исходных данных. Как известно, многие задачи имеют не единственное решение. Так, Юля нашла другой способ вычисления второй цифры трехзначного числа для примера 16.5. Какую из команд использовала Юля? Объясните, что получится при выполнении каж- дой из приведенных команд. 1) a2:=a mod 10 div 10; 2) a2:=a div 10 mod 10; 3) a2:=a div 100 mod 10. Программу из примера 16.5 изменили. Сформулируйте условие задачи, которая решается с помощью этой программы. var a, a1, a2, a3: integer; begin write(ꞌВведите a = ꞌ); read(a); if (a > 99) and (a < 1000) then begin // Первая цифра a1 := a div 100; // Вторая цифра a2 := a mod 100 div 10; // Третья цифра a3 := a mod 10; if a1 mod 2 = 0 then writeln(a1,ꞌ— четная ꞌ); if a2 mod 2 = 0 then writeln(a2,ꞌ— четная ꞌ); if a3 mod 2 = 0 then writeln(a3, ꞌ— четнаяꞌ); if odd(a1) and odd(a2) and odd(a3) then writeln(ꞌнет четных цифрꞌ); end else writeln(ꞌне трехзначноеꞌ); end. Программу из задания 10 проверили для некоторых случаев. Все ли возможные ситуации рассмотрели? Что нужно добавить?ȼɜɟɞɢɬɟɚ ȼɜɟɞɢɬɟɚ ȼɜɟɞɢɬɟɚ ɱɟɬɧɚɹ ɧɟɬɱɟɬɧɵɯɰɢɮɪ ɧɟɬɪɟɯɡɧɚɱɧɨɟПравообладатель Народная асвета
§ 17. Оператор цикла 83 Петя решил усовершенствовать программу из задания 10 и проверку цифр в чис-ле записал следующим образом: if a1 mod 2 = 0 then writeln(a1,ꞌ — четнаяꞌ) else if a2 mod 2 = 0 then writeln(a2,ꞌ — четнаяꞌ) else if a3 mod 2 = 0 then writeln(a3, ꞌ — четнаяꞌ) else writeln(ꞌнет четных цифрꞌ); Почему Петина отметка оказалась невысокой? Приведите примеры, для которыхпрограмма выдает неправильный ответ. Приведите примеры, когда программа вы-дает правильный ответ, если такое возможно. Дано натуральное число. Напишите программу, которая проверяет, является лионо трехзначным и кратна ли 7 сумма его цифр. Дано натуральное число. Напишите программу, которая проверяет, является лионо четырехзначным и расположены ли его цифры в порядке убывания. Вася научился попадать в центр мишени из примера 16.4 и решил перейти кболее сложным тренировкам. Теперь его мишень представляет собой три вложенныхкруга с радиусами R1, R2, R3 (известно, что R1 + R2 + R3). Реализуйте компьютер-ную модель этой мишени. Цвета выберите самостоятельно.§ 17. Оператор цикла17.1. Оператор цикла с предусловием Цикл с заданным условием окон- чания работы в PascalABC записыва- Алгоритмическая конструкция по- ется следующим образом:вторение (цикл) представляет собойпоследовательность действий, выпол- repeatняемых многократно (см. блок-схему в тело цикла;примере 13.2, с. 60). Саму последова-тельность называют телом цикла. until +условие*; Цикл работает, пока условие лож- Оператор цикла — команда, реа- но, и прекращает работу, когда усло- лизующая алгоритмическую кон- вие становится истинным. струкцию повторение на языке про- Этот цикл называют циклом граммирования. с постусловием, так как проверка условия осуществляется после вы- В Pascal существуют разные воз- полнения тела цикла. Цикл с пост-можности управлять тем, сколько раз условием всегда выполняется хотябудет повторяться тело цикла. Может бы один раз.быть задано условие продолжения или Циклы repeat и while в PascalABC взаимозаменяемы, поэтому при на- писании программ достаточно ис- пользования только одного из них.Правообладатель Народная асвета
84 Глава 3. Основы алгоритмизации и программирования Пример 17.1. окончания работы цикла, а также чис- V. Программа: ло повторений тела цикла. uses GraphABC; var x, y, r: integer; Цикл с предусловием используется begin в том случае, когда известно условие продолжения работы. Для записи опе- r := 10; ратора цикла с предусловием использу- x := 10; y := 10; ется команда while. Формат команды: while x + 640 do begin while <условие> do Circle(x, y, r); begin x := x + 20; тело цикла; end; end. end; VI. Тестирование Запустить программу. Результат: Пример 17.1. Написать программу для рисования ряда окружностей с VII. Числовое значение в условии радиусом 10 пикселей вдоль верхнегоцикла можно заменить функцией, края графического окна.определяющей горизонтальное раз-решение окна: WindowWidth: Этапы выполнения задания while x + WindowWidth do I—II. Результатом работы програм- Функции RedColor, GreenColor, мы, не зависящей от исходных дан-BlueColor позволяют менять интен- ных, будет рисунок, отображающийсивность соответствующего цвета. ряд окружностей вдоль верхнего края uses GraphABC; графического окна. var x, y, r, c: integer; begin III. Алгоритм решения задачи. 1. Положение первой окружности. r := 10; Окружность расположим в верхнем x := 10; y := 10; левом углу. Для этого задается ради- c := 255; ус r = 10 и координаты центра x = 10, while x + 640 do y = 10. begin 2. Положение любой другой окруж- //Интенсивность красного ности, удовлетворяющей условию за- дачи, будет зависеть от координаты x. SetBrushColor(RedColor(c)); В цикле будем изменять значение x. Circle(x,y,r); Каждое новое значение будет на 20 (на x := x + 20; размер диаметра) больше предыдущего. //Уменьшение интенсивности 3. Цикл должен завершиться, когда c := c-5; значение координаты x станет боль- end; ше чем 640 — горизонтальный размер end. окна. IV. Описание переменных: x, y, r — integer.Правообладатель Народная асвета
§ 17. Оператор цикла 8517.2. Оператор цикла с параметром Любой цикл for может быть заме- нен на цикл while: Цикл с параметром используетсятогда, когда известно количество по- Обратное не всегда возможно.вторений. Пример 17.2. Для записи оператора цикла с па- V. Программа:раметром используется команда for. var x, c : integer;Формат команды: begin for var1 i:= N1 to N2 do write('Введите x = '); read(x); begin for var a : = 1 to 9 do begin тело цикла; end; c := a * x; Или writeln(a,' * ',x,' = ',c); for var i:= N2 downto N1 do end; begin end. VI. Тестирование. тело цикла; Запустить программу. Ввести x = 7. end; Решение с помощью цикла while: В первом варианте параметр цик- var a, x, c : integer;ла i изменяется от N1 до N2, каждый beginраз увеличиваясь на 1. Во втором —параметр i уменьшается на 1 при каж- write('Введите x = '); read(x);дом выполнении тела цикла от N2 до a := 1;N1. Если N1 > N2, цикл не выполняет- while a + = 9 doся ни разу. Изменять значение параме- beginтра внутри тела цикла нельзя. c := a * x; Пример 17.2. Написать программу writeln(a,' * ',x,'= ',c);для вывода таблицы умножения на за- a := a + 1;данное число x. end; end. Этапы выполнения задания VII. Проверить результат. I. Исходные данные: x (введенноечисло). II. Результат: 9 строк вида a * x = c. III. Алгоритм решения задачи. 1. Значение переменной a изменяет-ся в цикле от 1 до 9. 2. Значение переменной c = a x. 3. Так как количество повторенийзаранее известно, используем цикл for. IV. Описание переменных: x, c —integer. 1 Ключевое слово var может быть опущено, тогда переменная i должна быть описана(как integer) в разделе описания var до начала программы.Правообладатель Народная асвета
86 Глава 3. Основы алгоритмизации и программирования При решении задач с использова- 17.3. Решение задачнием оператора цикла важно пра- с использованием оператора циклавильно выбрать вид цикла. Если из-вестно количество повторений тела Пример 17.3. Нарисовать 20 квадра-цикла, то выбирают цикл for, а ина- тов с общим центром. Длина стороныче — цикл while. самого большого квадрата 400, верх- ний левый угол расположен в точке Внутри цикла можно использо- (50; 50). Координаты верхнего левого ивать операторы break (немедленный нижнего правого углов каждого следу-выход из текущего цикла) и опера- ющего квадрата изменяются на a (a —тор continue (переход к концу тела вводится).цикла). Этапы выполнения задания Пример 17.3. V. Программа: I. Исходные данные: a (введенное uses GraphABC; число). var a,x1,y1,x2,y2: integer; II. Результат: рисунок, отображаю- щий квадраты. begin write('Введи a = '); III. Алгоритм решения задачи. read(a); write(a); 1. Первым рисуется самый большой x1 := 50; y1 := 50; квадрат. Координаты его верхнего ле- x2 := 450; y2 := 450; вого угла x1 = 50, y1 = 50. Координа- for var i := 1 to 20 do ты нижнего правого угла x2 = 450, begin y2 = 450. 2. Для определения положения дру- Rectangle(x1,y1, x2,y2); гого квадрата нужно координаты верх- x1 := x1 + a; y1 := y1 + a; него левого угла увеличить на a, а x2 := x2 - a; y2 := y2 - a; нижнего правого — уменьшить на a. end; 3. Будем использовать цикл for, по- скольку задано количество квадратов. end. IV. Описание переменных: a, x1, y1, VI. Тестирование. x2, y2 — integer. Запустить программу и ввести Пример 17.4*. Вывести на экранзначение a = 10. Результат: наибольшее натуральное число из про- межутка [n, m], которое делится на за- данное число x. Этапы выполнения задания I. Исходные данные: n, m (границы промежутка), x (заданное число). II. Результат: искомое число или со- общение «Нет таких чисел». III. Алгоритм решения задачи.Правообладатель Народная асвета
§ 17. Оператор цикла 87 1. Пусть i — текущее число из про- Пример 17.4*.межутка. V. Программа: var i, n, m, x : integer; 2. Поскольку нас интересует наи- beginбольшее число из промежутка, то про-смотр чисел начнем со значения i = m. writeln('Введите границы n, m');На каждом шаге будем уменьшать i на 1. read(n,m); write('Введи x = '); 3. Цикл завершится, если мы на- read(x);шли число, делящееся на x без остатка i := m;(остаток равен нулю), или просмотрели while (i * = n) andвсе числа из промежутка [n, m]. (i mod x + * 0) do 4. Так как количество повторений i := i - 1;заранее неизвестно, используем цикл if i = n - 1 thenwhile. writeln('Нет таких чисел') else Цикл будет продолжать работу до writeln('Искомое число — ',i);тех пор, пока условие, сформулиро- end.ванное в пункте 3, будет ложным. VI. Тестирование.А именно: ложным должно быть условие Запустить программу и ввести(i + n) or (i mod x = 0). Тогда усло- значения n = 10, m = 20, x = 3. Ре-вие not ((i + n) or (i mod x = 0)) бу- зультат:дет истинным. Согласно правилам по-строения отрицаний (см. пример 15.5) Запустить программу и ввестиэто условие можно заменить условием: значения n = 38, m = 45, x = 37. Ре-(i * = n) and (i mod x +* 0). Его и будем зультат:использовать в качестве условия цикла. 5. Если по окончании цикла i = n – 1,то нет чисел, удовлетворяющих усло-вию задачи. IV. Описание переменных: n, m, x, i —integer.? 1. Что такое оператор цикла? 2. Каким образом можно управлять количеством выполнений тела цикла? 3. Как записывается оператор цикла с предусловием? 4. Как записывается оператор цикла с параметром? УпражненияИзмените программу из примера 17.1.1. Радиусы окружностей равны 20.2. Окружности располагаются вдоль левого края окна.3. Радиус окружности вводится пользователем.Правообладатель Народная асвета
88 Глава 3. Основы алгоритмизации и программирования 4. Окружности образуют рамку вокруг окна. 5*. Пользователь задает границу окна, вдоль которой будут располагаться окружности (например: 1 — верхняя, 2 — левая, 3 — правая, 4 — нижняя). Какие изменения нужно внести в программу из примера 17.1 для того, чтобы ри- сунок выглядел следующим образом? Внесите изменения в программу из примера 17.2. Пользователь задает значение второго множителя, а также начальное и конечное значения первого множителя. При каком максимальном значении a на экране будут видны все 20 квадратов из примера 17.3? Поче- му при больших значениях a не видны все квадраты? Измените программу так, чтобы квадраты рисовались от самого маленького к самому большому (установите прозрачную заливку). Какие изменения нужно внести в программу из примера 17.3, чтобы получить следующее изображе- ние? Функции для изменения интенсивности цвета см. в примере 17.1. Измените программу из примера 17.3. Длина стороны самого большого квадра- та 400, а длина стороны каждого следующего квадрата на x меньше (x вводится). Напишите программу, которая рисует ряд окружностей заданного радиуса, рас- положенных по диагонали графического окна. Рассмотрите два варианта: 1. Графическое окно квадратное. 2*. Графическое окно прямоугольное. Напишите программу, которая рисует концентриче- ские окружности с центром в середине графического окна. Радиус самой маленькой окружности — 10 пик- селей. Разница радиусов — 20 пикселей. Используйте изменение интенсивности какого-либо цвета (или двух одновременно) для заливки кругов. В магазине продают конфеты в упаковках по 0.1 кг, 0.2 кг, ... 0.9 кг, 1 кг. Известно, что 1 кг конфет стоит х рублей. Выведите стоимости каждой упаковки в виде: 0.1 кг конфет стоит ... р.; 0.2 кг конфет стоит ... р. ... . Выведите на экран наименьшее натуральное число из промежутка [n, m], которое является нечетным и не делится на введенное значение x. Правообладатель Народная асвета
§18. Составление алгоритмов для работы с графикой 89§ 18. Составление алгоритмов для работы с графикой18.1. Расчеты в графических Пример 18.1.построениях V. Программа: uses GraphABC; Пример 18.1. Нарисовать прямо- var a,b,x,y,x_c, y_c:integer;угольный треугольник, соответствую- beginщий рисунку (катеты треугольникапараллельны осям координат). Длины writeln('Введите координаты');катетов и координаты прямого угла read(x,y); writeln (x,' ',y);вводятся. writeln('Введите длины катетов'); read(a,b); writeln (a,' ',b); Этапы выполнения задания Line(x,y,x+a,y); Line(x,y,x,y+b); Line(x+a,y,x,y+b); I. Исходные данные: a и b (длины //Координаты точкикатетов), x и y (координаты вершины //Внутри треугольникапрямого угла). x_c := x + 2; y_c := y + 2; FloodFill(x_c,y_c,clRandom); II. Результат: изображение прямо- end.угольного треугольника. VI. Тестирование. Запустить программу и ввести III. Алгоритм решения задачи. значения: координаты (100; 100), 1. Ввод исходных данных. длины катетов 70 и 120. Результат: 2. Чтобы изобразить треугольник,нужно выполнить следующие дей- Другой вариант:ствия: 1) построить линии из точки с коор-динатой (x; y) в точки с координатами(x + a; y) и (x; y + b); 2) соединить линией точки (x + a; y)и (x; y + b); 3) закрасить треугольник. Для за-крашивания треугольника нужнознать координаты какой-либо точкивнутри треугольника. Такой точкой вПравообладатель Народная асвета
90 Глава 3. Основы алгоритмизации и программирования Пример 18.2*. данном случае может быть точка с ко- V. Программа: ординатами (x + 2; y + 2)1. uses GraphABC; IV. Описание переменных: все пере- var x,y,d: integer; менные имеют тип integer. begin Многие графические построения writeln('Координаты'); можно обобщить, если предположить, read(x,y); что фигура должна быть вписана в квадрат. В этом случае для построения writeln (x,' ',y); фигуры достаточно задать координаты writeln('Сторона'); (x; y) верхнего левого угла квадрата и read(d); длину его стороны — d. Используя эти величины, можно получить координа- writeln (d); ты других вершин квадрата: (x + d; y), (x; y + d), (x + d; y + d). Можно по- SetBrushColor(clYellow); лучить координаты середины стороны (x + d div 2; y) или центра квадрата Ellipse (x + d div 3,y, (x + d div 2; y + d div 2). x + 2 * d div 3,y + d); Пример 18.2*. Нарисовать в графи- ческом окне гриб. Задать координаты SetBrushColor(clBrown); верхнего левого угла квадрата и длину его стороны для определения местопо- Pie(x + d div 2,y + d div 3, ложения и размеров гриба. d div 3,0,180); end. VI. Тестирование. Запустить программу и ввестизначения: координаты (100; 100), сто-рона 150. Результат: * Гриб можно вписывать не в ква- Этапы выполнения заданиядрат, а в прямоугольник. В этомслучае нужно задавать две величи- I. Исходные данные: x и y — коор-ны, определяющие размеры прямо- динаты верхнего левого угла квадрата,угольника: длину (d1) и ширину (d2). в который вписан гриб, d — длина его стороны. II. Результат: изображение гриба. 1 Для произвольного треугольника можно воспользоваться формулами x1 + x2 + x3 ; y1 + y2 + y3 . 33Правообладатель Народная асвета
§ 18. Составление алгоритмов для работы с графикой 91 III. Алгоритм решения задачи. Пример 18.2*. Продолжение. 1. Ввод исходных данных. В программу рисования гриба 2. Для того чтобы построить гриб, нужно внести изменения, позволяю-нужно выполнить следующие действия: щие рассчитать положение ножки и 1) построить овал для изображения шляпки гриба относительно коорди-ножки гриба. Параметры команды для нат (x; y) и величин d1 и d2.изображения эллипса определим сле- var x,y,d1,d2: integer;дующим образом: ellipse(x + d div 3, ...y, x + 2*d div 3, y + d); writeln('Стороны'); read(d1, d2); writeln (d1, ' ',d2); SetBrushColor(clYellow); Ellipse(x+d1 div 3, y, x + 2 * d1 div 3, y + d2); SetBrushColor(clBrown); Pie(x + d1 div 2, y + d2 div 3, max(d1,d2) div 3, 0, 180); Результат:2) нарисовать шляпку гриба. Дляэтого можно использовать команду Pie(построение сектора круга). Координа- ты d d dцентра x+ 2 ; y+ 3 , радиус — 3 .Углы равны 0° и 180° соответственно.IV. Описание переменных: все пере-менные имеют тип integer. Случайное число — число, кото- рое принимает одно значение из мно-Случайные числа имеют широкое жества, причем появление того или иного значения нельзя точно пред-применение в программировании. Они сказать. Например, если бы числа появились в результате вытягиванияиспользуются в шифровании и в мо- бочонков в лото, то такая последова- тельность чисел была бы случайной.делировании. Многие компьютерные В языках программирования ис-игры используют случайные числа. На пользуют псевдослучайные числа, которые получают с использованиемоснове случайных чисел генерируются генератора случайных чисел – ал- горитма, порождающего последова-капчи и пароли, реализуются различ- тельность чисел, элементы которой почти независимы друг от друга иные лотереи. обычно распределены равномерно на заданном интервале.В PascalABC для получения слу-чайного числа используют функциюrandom. Способы записи функции:Random(a, b); — возвращает слу-чайное целое в диапазоне от a до b;Random(a); — возвращает случай-ное целое в диапазоне от 0 до a – 1; Правообладатель Народная асвета
92 Глава 3. Основы алгоритмизации и программирования Пример 18.3. Random; — возвращает случайное V. Программа: вещественное в диапазоне [0..1). uses GraphABC; Функция clRandom позволяет за- var x,y,r: integer; дать случайный цвет. begin Пример 18.3. Написать програм- му для рисования на экране 10 разно- SetPenWidth(3); цветных окружностей. Расположение окружностей, их радиусы и цвет опре- SetBrushStyle(bsClear); деляются случайным образом. for var i:= 1 to 10 do begin Этапы выполнения задания x := random(600); I—II. Результатом работы програм- y := random(400); мы, не зависящей от исходных данных, R := random(150); будет изображение 10 окружностей. SetPenColor(clRandom); III. Алгоритм решения задачи. circle(x,y,r); 1. Установим толщину линий в 3 пик- селя и прозрачную заливку. end; 2. Значения координат центра окруж- ности и ее радиуса определяются функ- end. цией random. Значение цвета для гра- VI. Тестирование. ницы круга — clRandom. Запустить программу. Должно 3. Так как количество повторенийбыть нарисовано 10 окружностей. известно, будем использовать цикл for.Разные варианты работы программы: IV. Описание переменных: x, y (ко- ординаты центра), r (радиус) имеют тип integer. 18.2. Использование вспомогательных алгоритмов Построение фигур можно оформ- лять в виде вспомогательных алгорит- мов. Это позволит использовать такие алгоритмы для решения других задач. Все графические процедуры, кото- рые использовались ранее, имели па- раметры. Они позволяли определять местоположение и размер фигур. Поль- зователь также может составить свой вспомогательный алгоритм с параме- трами.Правообладатель Народная асвета
§ 18. Составление алгоритмов для работы с графикой 93 Общий вид процедуры с парамет- Пример 18.4.рами: V. Программа: uses GraphABC; procedure <имя> (<список var n, x, y, a : integer; параметров>:тип); procedure pr_treug (x, y, a, var ... b : integer); var x_c, y_c:integer; begin begin <команды> line(x, y, x + a,y); end; line(x, y, x, y + b); line(x + a, y, x, y + b); При вызове процедуры важно пом- x_c := x + 2; y_c := y + 2;нить, что количество параметров и их FloodFill(x_c,y_c,clRandom);порядок должны соответствовать тому, end;как процедура описана. begin writeln('Ввeдите количество'); Пример 18.4. Написать программу read(n); writeln (n);для построения n равнобедренных пря- writeln('Ввeдите длину катета');моугольных треугольников с длиной read(a); writeln (a);катета а. Расположение треугольников for var i:= 1 to n doопределяется случайным образом. begin Этапы выполнения задания x:= random(500); y:= random(400); I. Исходные данные: n (количество pr_treug(x, y, a, a);треугольников), а (длина катета). end; end. II. Результат: изображение n тре- VI. Тестирование.угольников. Запустить программу. Результат: III. Алгоритм решения задачи. При вводе других значений ре- 1. В примере 18.3 изображали зультаты будут иными.окружности, расположенные случай-ным образом, а в примере 18.1 — пря-моугольные треугольники. Воспользу-емся программами этих примеров. 2. Ввод значений переменных n и а. 3. Так как количество повторенийизвестно, будем использовать цикл for. 4. Изменим программу из примера18.3. Для этого команду cirle (постро-ение окружности) заменим на командупостроения треугольника: 1) местоположение треугольника за-дается координатами прямого угла, ко-торые определим случайным образом; 2) катеты прямоугольного треуголь-ника имеют одинаковую длину — зна-чение a.Правообладатель Народная асвета
94 Глава 3. Основы алгоритмизации и программирования Пример 18.5*. 5. Построение одного прямоугольно- V. Программа: го треугольника опишем во вспомога- uses GraphABC; тельном алгоритме pr_treug. Параме- var x,y,d: integer; тры процедуры построения треуголь- procedure grib(x,y,d:integer); ника — координаты вершины прямого begin угла и длины катетов. Алгоритм опи- сан в примере 18.2. SetBrushColor(clYellow); Ellipse(x + d div 3, y, IV. Описание переменных: все пере- менные имеют тип integer. x + 2*d div 3, y + d); SetBrushColor(clBrown); Пример 18.5*. Нарисовать 10 грибов. Pie(x + d div 2, y + d div 3, Расположение и их размеры определя- ются случайным образом. d div 3, 0, 180); end; Этапы выполнения задания Begin I—II. Результатом работы програм- мы, не зависящим от исходных дан- for var i: = 1 to 10 do ных, будет изображение 10 грибов. begin III. Алгоритм решения задачи. 1. Построение одного гриба опишем x:= random(400); во вспомогательном алгоритме. Алго- y:= random(200); ритм описан в примере 18.2. d:= random(150); 2. Значения координат верхнего ле- grib(x,y,d); вого угла и размер гриба определяются end; функцией random. end. 3. Так как количество повторений VI. Тестирование. известно, будем использовать цикл for. Результат может быть следующим: IV. Описание переменных: x, y (ко- ординаты верхнего левого угла), d (раз- Можно добавить раскраску слу- мер) — integer.чайным цветом: Пример 18.6. Заполнить графиче- ское окно окружностями с радиусом 10. Этапы выполнения задания I—II. Исходные данные отсутству- ют. Окружности должны заполнить все графическое окно. III. Алгоритм решения задачи. 1. Задача является обобщением за- дачи примера 17.1. Команды програм- мы следует повторить для нескольких рядов окружностей. Количество рядов определяется высотой окна. РисованиеПравообладатель Народная асвета
§18. Составление алгоритмов для работы с графикой 95одного ряда оформим как вспомога- Пример 18.6.тельный алгоритм row. V. Программа: 2. Положение любого ряда окружно- uses GraphABC;стей определяется координатой y. Для var x, y, r : integer;каждого значения y, пока он не станетбольшим, чем вертикальный размер procedure row(y : integer);экрана, выполняем в цикле следующее: begin 1) рисуем ряд окружностей; x :=10; R := 10; 2) изменяем y. while x + WindowWidth do IV. Описание переменных: x, y, r — begininteger. В примере 18.6 показано, как запол- Circle(x,y,r); x := x+20;нить графическое окно окружностями. end;Внеся небольшие изменения в эту про- end;грамму, можно заполнять графическоеокно любыми другими фигурками. beginДля этого достаточно заменить ко- y := 10;манду Circle(x,y,r) в процедуре row while y + = WindowHeight doна другую команду. Можно выбрать beginграфический примитив из библиоте- Row(y); y := y + 20;ки GraphABC или самостоятельно на- end;писать процедуру рисования фигурки(например, использовать процедуру ри- end.сования гриба из примера 18.5). VI. Тестирование. Результат:? 1. Как задать случайное число? 2. Как задать случайный цвет? 3. Как описать процедуру с параметрами? УпражненияВыполните задания для примера 18.1.1. Поэкспериментируйте с программой, вводя различные значения ис-ходных данных.2. Объясните, что происходит при вводе отрицательных значений длинкатетов.3. Что произойдет, если ввести отрицательные значения координат?Объясните результат.Выполните задания для примера 18.3.1. Выполните программу несколько раз. Уберите прозрачную заливку.Объясните, почему некоторые окружности не видны.Правообладатель Народная асвета
96 Глава 3. Основы алгоритмизации и программирования 2. Внесите в программу такие изменения, чтобы можно было изобразить 20 кругов; 100 кругов. 3. Какой максимальный размер может иметь радиус круга в программе? Внесите в программу изменения так, чтобы рисовались круги с радиу- сом не более 20. Количество кругов установите равным 10 000. 4. Внесите изменения в программу так, чтобы пользователь мог вводить количество отображаемых на экране кругов. Выполните задания для примера 18.4. 1. Запустите программу несколько раз. Объясните, почему при некото- рых запусках треугольники рисуются поверх текста в верхнем левом углу экрана. Измените программу так, чтобы треугольники рисовались ниже текста (правее текста). 2. Добавьте в программу возможность ввода длины второго катета. 3. Измените программу так, чтобы длины катетов задавались случай- ным образом. Напишите программу, которая строит случайным образом изображения 20 гори-зонтальных отрезков длиной 30 пикселей. Разработайте два варианта решения за-дачи. Один с использованием цикла while, а другой — цикла for. 1. Сравните две программы решения задачи. Какой вариант решения данной задачи представляется вам лучшим? Почему? 2. Задайте в программе толщину отрезка в 3 пикселя. 3. Какие изменения нужны в программе, чтобы толщина отрезка была случайным числом из промежутка [2; 8]? 4. Внесите изменения в программу так, чтобы пользователь мог вводить количество отображаемых на экране отрезков. 5. Какие изменения нужно внести в программу, чтобы вместо горизон- тальных отрезков изображались вертикальные? Диагональные? Используя процедуру рисования треугольника из примера 18.4, нарисуйте рядтреугольников вдоль верхнего (левого) края графического окна. Напишите программу для рисования одной из фигурок. Задаются координатыверхнего левого угла и длина стороны квадрата (длины сторон прямоугольника):12 3Правообладатель Народная асвета
§ 19. Использование основных алгоритмических конструкций для решения практических задач 97 Напишите программу, которая нарисует ряд фигурок вдоль края графическогоокна. Используйте фигурки, которые рисовали в задании 6. Выполните задания для примера 18.6. 1. Измените в программе значение r = 10 на r = 20. Почему получился та- кой рисунок? Поэкспериментируйте со значениями радиуса, установив прозрачную заливку. 2. Какие изменения нужно внести в программу, чтобы экран заполнялся кругами с радиусом 20 без пересечений? 3. Внесите изменения в программу так, чтобы все круги были красными или разноцветными. 4. Внесите в программу изменения так, чтобы графическое окно можно было заполнять кругами введенного радиуса. Напишите программу, которая заполнит все графическое окно: 1. Грибами (пример 18.2). 2. Фигурками из задания 6.§ 19. Использование основных алгоритмических конструкций для решения практических задач19.1. Использование числовых Подтверждением важности число-последовательностей вых последовательностей является тот факт, что создана целая энци- Числовые последовательности позво- клопедия числовых последователь-ляют описывать многие процессы, про- ностей1.исходящие в природе и обществе. Пример 19.1. Элементы последова- Например, последовательность чисел2, –1, 0, 2, 0, 1, –2 может задавать зна- тельности нечетных положительныхчения температуры по дням недели; по-следовательность 746, 751, 758 — значе- чисел можно описать с помощьюния средней заработной платы сотруд-ников предприятия за квартал и т. д. формулы an = 2n – 1. В этой формуле n — номер элемента в последователь- Последовательности могут задавать-ся формулой, в которой значение эле- ности. Минимальное значение числамента зависит от того, какой у него но-мер в последовательности (пример 19.1). n = 1. Используя формулу, получим Другим способом задания элемен- последовательность: 1, 3, 5, 7, ... .тов последовательности являетсяопределение значения нового элемента Элементы последовательности мо- гут быть действительными числами. n Например, формула an = n2 + 1 зада- ет следующую последовательность: 0.5, 0.4, 0.3, 0.235, 0.192, ... . 1 Онлайн-энциклопедия целочисленных последовательностей. Режим доступа:http://oeis.org/?language=russian (дата доступа: 17.01.2018).Правообладатель Народная асвета
98 Глава 3. Основы алгоритмизации и программирования Пример 19.2. Одной из наиболее через значение предыдущего (при-известных последовательностей яв- мер 19.2).ляется последовательность Фибонач-чи: 1, 1, 2, 3, 5, 8, 13, ... . Несложно Есть последовательности, которыезаметить, что каждый ее элемент, можно задавать как первым, так иначиная с третьего, равен сумме вторым способом (пример 19.3). После-двух предыдущих. Это можно запи- довательности могут строиться из слу-сать так: fn = fn – 1 + fn – 2, f1 = 1, f2 = 1. чайных чисел. Пример 19.3. Рассмотрим после- Пример 19.4. Вывести на экран пер-довательность 2, 4, 8, 16, ... . Каж- вые k четных чисел.дое число в этой последовательностиявляется степенью числа 2, поэтому Этапы выполнения заданияможно задать последовательностьформулой an = 2n. С другой стороны, I. Исходные данные: k (количествокаждый элемент последовательно- чисел).сти, начиная со второго, в два разабольше предыдущего. Получим фор- II. Результат: k четных числа, начи-мулу an = 2an – 1 (для n * 1, a1 = 2). ная с 2. Пример 19.4. III. Алгоритм решения задачи. V. Программа: 1. Ввод числа k. 2. Для получения четного числа за- var k, a: integer; пишем формулу an = 2n. 3. Так как количество чисел заранее begin известно, то для их поучения можно write('Количество k = '); read(k); воспользоваться циклом for. for var n := 1 to k do 4. Текущее число будем хранить в begin переменной а. Значение a вычисляется по формуле и зависит от значения n — a:= 2*n; write(a, ' '); счетчика цикла. Переменная n будет end; изменяться от 1 (номер первого четного числа) до k (номер последнего числа). end. 5. Полученные числа будем выво- VI. Тестирование. дить в цикле через пробел. Запустить программу и ввести IV. Описание переменных: k, a —значения k = 5. Результат: integer. Пример 19.5. Вывести на экран все ɄɨɥɢɱɟɫɬɜɨN элементы последовательности Фибо- наччи меньше x (x вводится). Запустить программу и ввести Этапы выполнения заданиязначение k = 100. Результат: I. Исходные данные: x (граница для ɄɨɥɢɱɟɫɬɜɨN чисел). II. Результат: числа Фибоначчи меньше x. Правообладатель Народная асвета
§ 19. Использование основных алгоритмических конструкций для решения практических задач 99 III. Алгоритм решения задачи. Пример 19.5. V. Программа: 1. Ввод числа x. var a, b, c, x: integer; begin 2. Вывод первых двух элементов. write('Граница x = '); read(x); 3. Числа Фибоначчи, начиная с тре- c := 1; b := 1; a := 2; write(c, ' ', b, ' ');тьего, получают по формуле an = an – 1 + while a + x do+ an – 2 (a1 = a2 = 1). Для вывода чисел по- beginнадобятся три переменные: значение а, write(a, ' ');которое нужно вывести, и два преды- c := b; b := a; a := b + c; end;дущих значения — b и c. end. VI. Тестирование.n 1234567 Запустить программу и ввести значение x = 100. Результат:Числа Фибоначчи 1 1 2 3 5 8 13 Ƚɪɚɧɢɰɚ[ Текущий шаг c ba Следующий шаг c ba Чтобы узнать, сколько чисел полу- чили в качестве результата, опреде-После вывода значения a нужно лим переменную k. Переменная будет увличивать свое значение на 1 каж-«сдвинуть» значения переменных: c := b; дый раз, когда выводится очеред- ное число. После завершения циклаb := a. Начальные значения: c := 1; можно вывести значение k.b := 1; a := 2. var a, b, c, x, k: integer; begin4. Так как количество чисел зара- write('Граница x= ');нее неизвестно, то для их вычисления read(x); c := 1; b := 1; a := 2;нужно использовать цикл while. Усло- write(c, ' ', b, ' '); k := 2;вие продолжения работы цикла: a < x. while a + x do begin5. В цикле выводим текущее значе- write(a, ' '); k := k+1;ние a, «сдвигаем» значения перемен- c := b; b := a; a := b + c; end;ных и получаем новое значение a. writeln; write('k = ',k);IV. Описание переменных: x, a, b, c — end. Результат для x = 1000.integer. Ƚɪɚɧɢɰɚ[ Числа Фибоначчи обладают мно- жеством интересных математических N свойств. Например:1. Могут быть вычислены по форму- ле Бине: fn = 21+5n 1− 5n − 2 5 .2. Отношение следующего числа кпредыдущему является постоянной ве-личиной ≈ 1.618 (начиная с 13-го). Эточисло называют золотым сечением.3. Для трех последовательных чиселФибоначчи верно соотношение Кас-сини: fn + 1fn − 1 − fn2 = (−1)n. Правообладатель Народная асвета
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169