Л. И. Долинер основы программирования в среде pascalabc. Net учебное пособие
Скачать 1.88 Mb.
|
x и y на Real. Но это еще не все. Изменить нужно не только описание, но и вычисление значения переменной, округлив его до целого, поскольку координаты точки в процедуре PutPixel должны быть целыми. Для этого в языке Паскаль предусмотрена функция Round – округление. Используется она так: a:=Round(b), где a – переменная типа Integer; b – типа Real. Внесите изменения в программу и отладьте ее. 74 Задание 98 Воспользуйтесь усовершенствованной программой для построения графика функции f(x) = Sin(x). Похож ли полученный график на знакомую из курса алгебры синусоиду? Не очень, правда? Опять что-то не так. Действительно, значение функции Sin(x) лежит в пределах от -1 до +1, а график ее лежит совсем близко к оси Ox, почти сливаясь с ней. Когда вы рисуете график в тетради, вы интуитивно выбираете такой масштаб, чтобы график был хорошо виден. Компьютеру же надо дать точные указания о масштабе. Если умножить значение функции, например, на 50, то ординаты точек будут находиться в интервале шириной не 2, а 100 точек, и это уже будет хорошо видно на экране. Кроме того, чтобы масштаб по вертикали и по горизонтали был одинаковым, нужно при переходе от экранной координаты x к «реальной», поделить экранную координату на то же число (в данном случае 50), на которое умножили значение координаты y. Если самостоятельно не удается реализовать эту идею, разберитесь в программе lab14_93.pas. Задание 99 Пользуясь рассмотренной в теоретической работе программой построения графика в полярной системе координат (файл lab14_94.pas), постройте график функции r(a) = a. У вас должен получиться кусок спирали (часть графика может оказаться за пределами экрана). Модифицируйте программу, чтобы нарисовать: а) окружность; б) спираль меньшего размера; в) несколько оборотов спирали; г) цветок, задаваемый в полярных координатах функцией r(a)=sin(n*a) , где параметр n задает число лепестков цветка. (Если ваш цветок будет слишком маленьким, воспользуйтесь идеей изменения масштаба, описанной в предыдущем задании.) 75 Задание 100 Смоделируйте на экране дисплея движение шарика: а) по окружности; б) по спирали. Задание 101 Нарисуйте на экране несколько цветков, различных по окраске, размерам, количеству лепестков. Задачи для самостоятельной работы 1. Постройте следующие кривые, заданные в полярных координатах: трехлепестковую розу: r = 2sin2 ; циссоиду: r = tg sin ; гиперболическую спираль: 2 φ r ; строфоиду: 1 sinφ cosφ r ; ( 1 sinφ cosφ r ); лемнискату Бернулли: r 2 =cos 2 ; улитку Паскаля: r = a (1 + b cos ); функцию π φ r 2. Постройте графики функций, заданных параметрически: кардиоиду: x = a(t – sin t); y = a(1 – cos t); астроиду: x = a cos 3 t; y = a sin 3 t; декартов лист: 3 2 3 1 3 , 1 3 t t y t t x 3. Постройте следующие кривые, заданные в декартовой системе координат: 2 3 4 1 x x y ; y = (x2 – x – 6) 2 ; 76 |x|+|y| = 1; ||x| +|y| – 2 3 |= 2 1 . Сохраните все программы в своей папке. Пригласите преподавателя и проде- монстрируйте ему все выполненные вами задания. Будьте готовы ответить на вопросы преподавателя. После беседы с преподавателем выйдите из сре- ды PascalABC.NET. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 77 Глава 15 ГРАФИЧЕСКИЕ ПРИМИТИВЫ. ПЕРЬЯ И КИСТИ Для дальнейшей работы желательно, чтобы вы познакомились еще с некото- рыми процедурами, предоставляющими ряд дополнительных возможностей. Задание 102 Запустите PascalABC.NET. Откройте Справку (пункт меню Помощь ), раздел Стандартные модули Модуль GraphABC GraphABC: графические примитивы. Прочитайте описание процедур Cirсle, FillCircle, DrawCircle, Ellipse, FilleEllipse, DrawEllipse, Arc, Pie, Chord, RoundRect, FillRoundRect, DrawRoundRect Задание 103 Нарисуйте окружность, состоящую: а) из двух закрашенных разными цветами полуокружностей; б) трех « « « секторов; в) четырех « « « секторов; г) n « « « секторов; Задание 104 Составьте программу, рисующую следующее изображение: Все элементы рисунка должны быть разного цвета, толщина линий не менее 3 точек, заливка цветная, но такая же полосатая. Задание 105 Откройте файл SetPixel.pas . Просмотрите текст программы, выясните, что она делает. 78 Составьте программу, рисующую закрашенные сектора. Цвета, размеры и положения секторов определяются случайным образом. Задание 106 Линии рисуются в PascalABC.NET с помощью пера (цвет, толщина и стиль линии совпадает с соответствующими характеристиками описания свойств пера). С помощью Справки познакомьтесь с технологией определения характеристик пера ( Помощь – раздел Стандартные модули Модуль GraphABC GraphABC: стили пера ). Задание 107 Составьте программу, которая рисует 5 линий каждым из стилей пера. Все линии должны быть разного цвета. Попробуйте поменять толщину линий, посмотрите, сохранятся ли стили линий. Задание 108** Составьте программу штриховки наклонными пунктирными линиями: а) прямоугольника; б) эллипса; в) произвольного замкнутого контура. Задание 109 Закраска замкнутых объектов (встроенных примитивов) реализуется в PascalABC.NET с помощью кисти (цвет и стиль совпадает с соот- ветствующими характеристиками описания свойств кисти). С помощью Справки познакомьтесь с технологией определения характеристик кисти ( Помощь – раздел Стандартные модули Модуль GraphABC GraphABC: стили кисти , GraphABC: текущая кисть Brush и GraphABC: подпрограммы работы с кистью ). Задание 110 Составьте программу, которая рисует 5 прямоугольников, закрашенных каждым из допустимых для кистей стилей и разными цветами. 79 Задачи для самостоятельной работы 1. Изобразить на экране отрезок, вращающийся в плоскости экрана вокруг: а) своей середины; б) своего конца. 2. Изобразить на экране два отрезка, вращающихся в плоскости экрана, каждый вокруг своего конца и со своей угловой скоростью. 3. Изобразить одновременное вращение двух стрелок – большой и малой, при котором одному полному обороту большой стрелки соответствует 1/12 оборота малой стрелки (как на циферблате часов). Стрелки можно для простоты заменить отрезками. 4. Изобразить на экране правильный треугольник, вращающийся в плоскости экрана вокруг своего центра. 5. Изобразить на экране разносторонний треугольник, вращающийся в пло- скости экрана вокруг своего центра тяжести. 6. Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра. 7. Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг одной из своих вершин. Цвет фигуры должен изменяться при переходе от предыдущего положения к следующему. 8. Круглое кольцо вращается с постоянной угловой скоростью вокруг своего диаметра, расположенного параллельно горизонтальной оси экрана. Изобразить на экране процесс вращения. Считать, что в момент времени t кольцо выглядит для наблюдателя как эллипс, большая ось которого равна постоянной величине с, а малая равна с\сoswt\, где w – угловая скорость вращения. 9. Изобразить равнобедренный треугольник, вращающийся с постоянной угловой скоростью вокруг своей высоты, расположенной параллельно вертикальной оси экрана. 80 10. Изобразите на экране движение шара по биллиарду без луз. Используйте правило: угол отражения равен углу падения. Начальное направление движения должно задаваться. 11. Создайте мультфильм «Круги на воде», используя не менее семи концентрированных окружностей. Центры окружностей должны быть совмещены с центром окна, а радиусы изменяться, увеличиваясь с каждой следующей окружностью. Иллюзия движения должна создаваться последовательной сменой цветов всех окружностей, начиная с внутренней и кончая внешней. Процесс смены цветов должен происходить бесконечно. 12. Создайте мультфильм «Капли дождя». На экране в случайно месте должна появляться окружность, увеличиваться ее радиус и одновременно «выцветать». Процесс падающих капель должен завершаться по закрытию окна. 13. Составьте программу, которая выводит на экран текст в следующем виде: Сохраните все программы в своей папке. Пригласите преподавателя и проде- монстрируйте ему все выполненные вами задания. Будьте готовы ответить на вопросы преподавателя. После беседы с преподавателем выйдите из сре- ды PascalABC.NET. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 81 Глава 16* РАБОТА С ГРАФИЧЕСКИМИ ОБЪЕКТАМИ Задание 111 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Основы объектно-ориентированного программирования». Ответьте на вопросы, приведенные в конце раздела. В модуле GraphABC есть набор объектов, обеспечивающих возможность работы с рисунками формата bmp, jpg и gif. Познакомимся с технологией рабо- ты с подобными рисунками. Задание 112 Откройте файл pic_01.pas . Просмотрите текст программы, выясните, что она делает. Измените программу так, чтобы глобус двигался: а) по окружности; б) по периметру окна. Фон окна должен представлять собой многоцветный рисунок. Задание 113* Напишите программу, эмулирующую классические часы со стрелками. Должен быть циферблат и три стрелки: часовая, минутная и секундная. У циферблата должен быть фон в виде картинки. Часы должны показывать реальное время! Подсказка Откройте файл DigitalClock.pas и выясните особенности работы с реальным временем (встроенным в компьютер таймером). Используйте эти возможности при разработке часов. Как правило, если рисунок не выводится, это означает, что неверно указан путь к рисунку. Исправить это просто: указать полный путь или путь начиная с текущей папки. Задание 114* Используя датчик случайных чисел, разработайте игру «Гонки». Суть игры: несколько объектов выходят на старт (автомобили, паровозы, лошади, 82 тараканы и т. п.). От игроков принимаются ставки, и затем участники гонок начинают движение. К финишу приходит первым кто-то один. Раздаются выигрыши и предлагается новый заезд. Сохраните все программы в своей папке. Пригласите преподавателя и проде- монстрируйте ему все выполненные вами задания. Будьте готовы ответить на вопросы преподавателя. После беседы с преподавателем выйдите из сре- ды PascalABC.NET. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 83 Глава 17* СОБЫТИЙНОЕ ПРОГРАММИРОВАНИЕ До сих пор вы писали классические учебные программы, которые выполня- лись последовательно: сначала первый оператор, затем второй и так до послед- него. После выполнения последнего оператора программа завершала свою рабо- ту. Однако современные программы работают по-другому: после запуска они, конечно, тоже выполняют какие-то операторы, однако в основном их выполне- ние связано с ожиданием какого-либо действия пользователя, которое принято называть «событие». Обработка таких событий является ключевой задачей в написании современных программ. Какие события может выполнить пользователь? Их количество не сильно велико: он может что-то сделать с помощью клавиатуры или с помощью мыши. Собственно, все. Задание 115 Откройте Справку, найдите статью «GraphABC: события» (раздел «Стандартные модули», подраздел «Модули GraphABC»). Познакомьтесь с описанием процедурных переменных. Скопируйте на рабочие листы среды PascalABC.NET примеры событийных программ из Справки и выясните, как они работают. Добавьте в них событие, обеспечивающие завершение работы программы (реализуется с помощью процедуры CloseWindow). Задание 116 Выполните следующие действия: а) загрузите файл event_01.pas ; б) разберитесь в тексте программы; в) запустите программу на выполнение и выясните, что она делает; г) измените программу так, чтобы она: завершала работу при щелчке левой клавиши мыши; 84 изменяла цвет звезды при щелчке правой клавиши мыши; вместо кружков рисовала квадратики; в качестве ведущей фигуры использовала 10-конечную звезду; ограничивала поле для рисования «следа» звезды в рамках прямоугольника с координатами диагнали (100, 100) и (300, 300). Задание 117 Составьте программу «Охота», в которой: в произвольном месте окна появляется объект (кружок, звездочка, прямоугольник) на секунду (долю секунды); пользователь должен успеть щелкнуть мышкой по объекту; программа должна вести учет числа объектов и числа попаданий пользовалем, причем числа должны быть выведены в заголовок окна; программа должна завершать свою работу по щелчку правой клавиши мыши. Задание 118 Составьте программу, дублирующую алгоритм, предложенный в event_01.pas , но управление должно выполняться с помощью клавиш со стрелками ( ). Программа должна завершать работу по нажатию на клавишу Задание 119 Составьте программу, при запуске которой какая-либо картинка движется по окружности по часовой стрелке, а при нажатии на клавишу направление движения меняется на противоположное. Задачи для самостоятельной работы* 1. Составьте программу – простейший графический редактор, с помощью ко- торого можно рисовать не только линии, но и не менее 2 примитивов (скажем, окружность и прямоугольник) с помощью мыши. Программа должна напоминать простейший вариант программы Paint. 85 2. Составьте программу-раскраску (т. е. программу, при запуске которой на экране появляется черно-белый контурный рисунок и палитра цветов. Щелчком мыши в палитре выбирается цвет, а вторым щелчком по рисунку закрашивается контур, которому принадлежит выбранная точка.). 3. Составьте игру «Тир». Суть игры: на стенде случайным образом выскаки- вают фигурки, необходимо успеть щелкнуть мышью по фигурке. Идеаль- ный вариант, если за курсором мыши движется прицел (например, такой: ). 4. Разработайте игру «Удав». Принцип работы: в окне появляется удав (точ- нее, его голова, например, в виде кружка. Но лучше нарисовать.). На экране в произвольном месте появляется «еда» (мелкие животные, цвет- ные прямоугольники и т. п.). Удав движется сам, сначала, например, стро- го вверх. С помощью клавиш со стрелками ( ) можем изменить направление движения. Если удав соприкасается с «едой», она исчезает, а игроку добавляются очки (в заголовке окна). Если удав касается окна, он «погибает». Игра заканчивается, скажем, после того, как удав съест 10 единиц «еды» или «погибнет». Пригласите преподавателя и продемонстрируйте ему сделанные вами про- граммы. Будьте готовы ответить на его вопросы. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 86 Глава 18 ОСНОВНЫЕ ОПЕРАЦИИ СО СТРОКОВЫМИ ДАННЫМИ Задание 120 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Основные операции со строками». Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. 1. Алгоритмы замены фрагментов строки Задание 121 Считайте с диска файл с именем string_01.pas. Он представляет собой программу поиска всех букв «а» и печать номеров позиций этих букв в строке символов. Запустите эту программу, введите строку, содержащую нужные символы, и убедитесь, что программа работает правильно. Модифицируйте программу так, чтобы: а) подсчитывалось и печаталось число букв «а»; б) учитывались еще и заглавные буквы «А». Задание 122 Считайте с диска файл с именем string_02.pas. Он содержит программу замены всех букв «а» на «о». Модифицируйте программу так, чтобы происходила замена буквы «а» на букву «б» и наоборот. Например, слово «баба» программа превращала бы в «абаб». Сделайте то же с учетом заглавных букв. Задание 123 В файле string_03.pas находится программа поиска в строке всех заданных фрагментов. Разберите, в чем ее отличие от предыдущих программ. Модифицируйте программу так, чтобы вместо фрагмента «мама» отыскивался фрагмент «ма» (в слове «мама» он должен обнаруживаться дважды). 87 Задание 124 В файле string_04.pas находится программа замены в строке одного слова другим. Разберите, в чем ее отличе от предыдущих программ. Модифицируйте программу так, чтобы слово «мама» заменялось словом «бабушка». С какой проблемой вы столкнулись? Напишите универсальную программу замены всех вхождений данного фрагмента на другой. Задание 125 Составьте программу замены одного слова строки другим. Модифицируйте программу так, чтобы происходила замена только целого слова на слово (так чтобы, заменяя, например, «полковник» на «генерал», не получить нового звания «подгенерал»). Считайте, что слова разделяются пробелами. При проверке работы программы обратите особое внимание на слова, сто- ящие в начале и в конце строки. |