Л. И. Долинер основы программирования в среде pascalabc. Net учебное пособие
Скачать 1.88 Mb.
|
lab8_56.pas находится программа печати таблицы значений функции f(x) = sin(x) при x = 0, 0.1, 0.2, ..., 2. Модифицируйте программу так, чтобы: а) печатался заголовок; б) печатались еще и значения аргумента x; 47 в) печатались значения при x = 0, 0.2, 0.4, ..., 3; г) то же самое печаталось в обратном порядке. Задание 60 В файле lab8_57.pas находится программа движения окружности по горизонтали. Используя эту программу, смоделируйте на экране равномерное прямолинейное движение этой окружности: а) по вертикали; б) по диагонили окна. Задание 61* Используя конструкцию цикла со счетчиком, самостоятельно составьте программу рисования детской игрушечной пирамидки (вид сбоку). Задачи для самостоятельной работы 1. Построить окружность, состоящую из 6 секторов, раскрашенных в разные цвета (для задания разных цветов можно использовать цвет clRandom). 2. Составить программу рисования мишени, состоящей из окружностей разного цвета. 3. Составить программу рисования следующей последовательности однотип- ных фигур: а б в г д е ж 48 и к л м н п Пригласите преподавателя и продемонстрируйте ему все выполненные вами задания. После этого сохраните все программы и выйдите из среды PascalABC.NET. Будьте готовы ответить на вопросы преподавателя. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 49 Глава 9* РИСОВАНИЕ ЗАБОРА Конечно, простейший забор можно нарисовать и с помощью прямоуголь- ников. Но это не так интересно. Давайте попробуем нарисовать забор традици- онный, из заостренных планочек. Как это сделать? Познакомимся еще с несколькими процедурами библиотеки GraphABC. Для этого сначала поговорим о графическом курсоре. В консольных приложениях курсор виден в виде мигающей черточки. В графическом же режиме курсора нет. Дело в том, что он указывает на конкрет- ную маленькую точку, и если его нарисовать, то самой точки видно не будет. По- этому введено понятие графического пера, под которым понимают некоторое не- видимое перо, с помощью которого можно рисовать в графическом окне. Кроме того, введено понятие кисти, т. е. некая невидимая кисть, которая позволяет закрашивать заданные области. Технология достаточно простая: если сначала задать цвет кисти (вы уже ею пользовались), а затем нарисовать, напри- мер, прямоугольную рамку с помощью процедуры Rectangle, то она будет за- крашена внутри цветом кисти. Процедура установки графического пера: MoveTo(X, Y : integer); – передвигает перо к точке с координатами (x, y); Процедуры рисования линий: LineTo(X, Y : integer); – процедура позволяет проводить прямую из точки с текущими координатами в точку (x, y) текущим цветом пера; Line(x1,y1,x2,y2 : integer); – процедура обеспечивает рисование отрезка из точки (x1, y1) в точку (x2, y2) текущим цветом пера. Пример: ... MoveTo(10,10); LineTo(100,100);{ проводит прямую в точку 110,110 } ... Процедуры задания цвета и стиля линий: SetPenColor(color: integer); – процедура позволяет задать цвет пера. Пере- чень допустимых цветов для процедур и функций библиотеки GraphABC 50 см. в Справке (Помощь): Стандартные модули Модуль GraphABC GraphABC: цветовые константы. SetPenStyle(ps: integer); – устанавливает стиль пера, задаваемый параметром ps. Стиль пера (ps) определяется одной из предопределенных констант. Иден- тификаторы этих констант и определяемые ими стили см. в Справке (Помощь): Стандартные модули Модуль GraphABC GraphABC: стили пера; SetPenWidth(w: integer); – устанавливает ширину пера, равную w пикселам; SetBrushColor(color: integer); – устанавливает цвет кисти, задаваемый пара- метром color. Используются только цвета библиотеки GraphABC. Пример: uses GraphABC; begin SetPenColor(clFuchsia); {цвет пера – для линии} SetPenWidth(10); {толщина пера – для линии} SetBrushColor(ClBlue); {задаем цвет кисти – закраска} SetBrushStyle(psDash); {тип кисти – закраска } Rectangle(10, 10, 180, 100); {рисуем закрашенный прямоугольник } SetBrushStyle(bsSolid); FloodFill(210, 110, clIndianRed ); {закрашиваем область вне прямоугольника } end. Чтобы не использовать идентификаторы цветов, используйте случайный цвет. Для этого вместо константы, обозначающей цвет, укажите идентификатор clRandom (т. е. случайный цвет). Задание 62 Запустите среду PascalABC.NET. Теперь давайте рисовать забор, состоящий из пятиугольных досок (см. рисунок). При рисовании забора не забудьте раскрасить каждую доску в свой цвет. При рисовании линий используйте LineTo Успехов вам! Задание 63 Вы нарисовали забор. Модифицируйте программу таким образом, чтобы был нарисован забор длиной: 51 а) в 500 точек (пикселов) из 10 досок; б) в 400 пикселов из заданного числа досок (количество досок вводится с клавиатуры); в) в N пикселов и из M досок. Задание 64 Еще одна модификация: измените программу так, чтобы был нарисован забор длиной в N пикселов, причем длина одной доски равнялась K пикселов. Задачи для самостоятельной работы 1. Составьте программу рисования следующего орнамента: а) ; б) ; в) 2. Составьте программу (с использованием цикла) рисования правильного шестиугольника. 3. Составьте программу рисования пятиугольной звездочки. 4. Составьте программу рисования следующей последовательности однотип- ных фигур: а б в г 52 д е ж и Пригласите преподавателя и продемонстрируйте ему все выполненные вами задания. После этого сохраните все программы и выйдите из среды PascalABC.NET. Будьте готовы ответить на вопросы преподавателя. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 53 Глава 10 0 ЗВЕЗДНОЕ НЕБО И ПРОЧИЕ СТРАННОСТИ 1. Получение случайного числа При создании некоторых программ (например, игр) требуется получение случайного числа при каждом запуске программы (например, если вы моделиру- ете на компьютере игру в кости, карты и т. п.). Для этих целей создана специ- альная функция Random(n : integer) : integer; . Эта функция выдает случайное целое число в промежутке от 0 до n–1, где n – заданное целое положительное число. Кроме того, имеется аналогичная функция без параметров: Random: Real; Данная функция выдает случайное вещественное число в промежутке от 0 до 1. Посмотрим, как это работает. Задание 65 Запустите среду PascalABC.NET Считайте программу из файла rnd_62.pas и разберитесь, как она работает и что выдает на экран дисплея. Для этого запустите эту программу 2–3 раза и определите, какую последовательность чисел она выдает: одну и ту же при каждом запуске или различные. Задание 66 Считайте программу из файла rnd_63.pas и разберитесь, как она работает и что выдает на экран дисплея. Для этого запустите эту программу 2–3 раза и определите, какую последовательность чисел она выдает: одну и ту же при каждом запуске или различные. Определите, в чем отличие этих программ. Задание 67 Считайте программу из файла rnd_64а.pas и разберитесь, как она работает. Выясните, как там организован цикл и когда он завершает свою работу. 54 Считайте программу из файла rnd_64б.pas и попытайтесь разобраться, как она работает. Выясните, как там организован цикл и когда программа завершает свою работу. Задание 68 Используя алгоритм, предложенный в программе rnd_64б.pas , составьте программу, которая выводит на экран дисплея закрашенные прямоугольники в произвольном месте экрана произвольных размеров и произвольного цвета. Программа должна работать бесконечно (т. е. до тех пор, пока не будет закрыто окно). Очищать окно после каждого вывода не нужно. 2. Рисование точек в графическом режиме Точки в языке Паскаль рисуются достаточно просто: достаточно воспользо- ваться процедурой PutPixel(X, Y,Color: integer); Эта процедура позволяет закрашивать на экране точку с координатами X и Y цветом Color ( integer – это описание типа параметров процедуры). Например, если вам хочется нарисовать точку голубого цвета с координатами (100,200), то потребуется в программе лишь обратиться к процедуре вывода точки следу- ющего вида: PutPixel(100,200,clblue); Задание 69 Составьте программу «Звездное небо», которая постоянно выводит точки разного цвета в разных местах окна. Программа должна работать бесконечно (т. е. до тех пор, пока не будет закрыто окно). Задание 70 Откройте файл rnd_67.pas . Разберитесь в тексте программы. Измените программу так, чтобы она рисовала более крупные звезды и число лучей в них изменялось от 3 до 8. Задачи для самостоятельной работы Учебные тренажеры работают следующим образом: выдается некоторое случайным образом подобранное задание; пользователь вводит ответ; 55 если ответ верный, обучаемому выдается следующее задание; если ответ неверный, то обучаемому выдается верный ответ и сообщение о количестве допущенных им ошибок. Для создания заданий используйте датчик случайных чисел. 1. Разработайте простейший тренажер для учащихся младших классов, который проверяет: а) знание таблицы умножения (т. е. умение перемножать числа от 1 до 10); б) умение складывать числа от 1 до 100; в) навык вычитания чисел от 1 до 100. Следует иметь в виду, что учащиеся начальной школы еще не знают отрицательных чисел, поэтому уменьшае- мое должно быть больше вычитаемого; г) умение делить целые числа до 100. Здесь должны проверяться действия, обратные умножению целых чисел т. е. деление должно быть целочислен- ное (делимое должно делиться делителем нацело). 2. Разработайте простейший тренажер, который проверяет умение решать: а) линейные уравнения вида ax = b; б) квадратные уравнения вида ax 2 + bx + c = 0. Пригласите преподавателя и продемонстрируйте ему все выполненные вами задания. После этого сохраните все программы в своей папке и выйдите из среды PascalABC.NET. Будьте готовы ответить на вопросы преподавателя. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 56 Глава 11 ЦИКЛ С ПАРАМЕТРОМ: ТИПОВЫЕ АЛГОРИТМЫ Задание 71 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Конструкция цикла FOR». Обратите внимание на типовые алгоритмы. Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. 1. Вычисление суммы Задание 72 Запустите среду PascalABC.NET. Выполните следующие действия: а) загрузите файл lab11_68.pas ; б) прочитайте текст программы и проанализируйте его; в) запустите программу на выполнение (рекомендуем задать в качестве значения числа N значения 1, 10, 0, -5); оцените, как программа ведет себя в различных ситуациях); г) измените программу так, чтобы она считала сумму кубов первых N чисел. Задание 73 Выполните следующие действия: а) загрузите файл lab11_69.pas ; б) прочитайте текст программы и проанализируйте его; в) запустите программу на выполнение; г) модифицируйте программу так, чтобы она выводила таблицу Пифагора 15 на 15. 57 2. Вычисление факториала Задание 74 Внимательно просмотрите перечисленные ниже программы, поскольку на их основе потребуется самостоятельно реализовывать аналогичные алгоритмы: а) lab11_70а.pas – если значение факториала записывать в переменную типа integer , то быстро наступает переполнение. Выясните, при каком значении введенного числа это переполнение наступает (т. е. в качестве ответа выводится отрицательное число или 0); б) измените программу вычисления значения факториала, заменив тип integer на int64 .Выясните, при каком значении введенного числа наступает переполнение с этим типом данных; в) lab11_70в.pas – предлагается еще один вариант решения задачи: результат записывать в переменную типа real . Выясните, при каком значении введенного числа переполнение наступает в этом случае. 3. Вычисление суммы ряда Задание 75 Квадрат любого натурального числа N равен сумме первых N нечетных чисел: 1 2 = 1 2 2 = 1 + 3 3 2 = 1 + 3 + 5 4 2 = 1 + 3 + 5 + 7 . Проверьте, верна ли эта закономерность для других натуральных чисел. Задание 76 Многие из математических величин или значений функций могут быть выражены как суммы бесконечных последовательностей. Чем больше членов ряда участвует в сложении, тем более точным получается искомое значение. 58 Составьте программы и попытайтесь определить минимальное число членов ряда, обеспечивающих вычисление следующих данных: а) e = 1 + 1 1 1 1 1 1! 2! 3! 4! ! n ; (значение e = 2,718 281); б) 1 1 1 1 1 ( 1) π 4(1 ...) 3 5 7 9 2 1 n n (значение = 3,141 592); в) 2 = 2∙ 1 1 1 ( 1) 1 1 1 ... 1 3 5 7 2 1 k k (значение 2 ≈ 1,414 213) 4. Определение среднего Задание 77 Для определения рентабельности авиалинии вычисляется среднее количество пассажиров за год. Составьте программу вычисления среднего количества пассажиров, перевезанных за год, если известно общее количество пассажиров, перевезенных за каждый месяц. Задание 78 Составьте программу определения среднемесячной температуры воздуха, если известна средняя температура за каждый день месяца. Исходные данные для вычислений лучше использовать реальные. 5. Определение экстремума Задание 79 В память компьютера вводят по очереди координаты N точек. Определить координаты точки, максимально удаленой от начала координат. Задание 80 У тренера футбольного клуба имеется список членов команды и количества очков, которые принес команде каждый игрок в данном сезоне. Составить программу, с помощью которой можно определить самого результативного игрока. 59 6. Рекуррентные соотношения В 1202 году итальянский математик Леонард Пизанский, известный под именем Фибоначчи, предложил такую задачу: Пара кроликов каждый месяц дает приплод – пару кроликов (самца и самку), от которых через два месяца уже получается новый приплод. Сколько кроликов будет через год, если в начале года мы имели одну пару молодых кроликов? Обратим внимание на то, что числа, соответствующие количеству пар кро- ликов, которые имеются через каждый месяц, составляют последовательность: 1,1,2,3,5,8,13,21,34,... Каждый из членов этой последовательности, начиная с третьего, равен сумме двух предыдущих членов. Эта последовательность получила название ря- да Фибоначчи, а ее члены – числа Фибоначчи. Обозначив n-й член ряда Фибоначчи F(n), мы получим следующую зависи- мость, называемую рекуррентной (т. е. зависимость, в которой последующие элементы определяются предыдущими): F(1)=1 F(2)=1 F(n)=F(n-1)+F(n-2), при n>=3 Задание 81 Составить программу, которая: а) выводит первые N чисел Фибоначчи; б) определяет, сколько кроликов будет через М месяцев; через G лет; в) позволит определить номер члена последовательности, значение которого превосходит заданное число К; г) представить ряд Фибоначчи графически. Например: (длина прямоугольника пропорциональна числу; например, его длина рав- на числу, умноженному на 10). 60 Задачи для самостоятельной работы 1. Напишите программу вычисления наибольшего общего делителя двух нату- ральных чисел. 2. Оборудование фирмы в результате износа и старения уценивается на p % ежегодно. Составьте программу, которая по первоначальной стоимости обо- рудования и времени его эксплуатации вычисляет текущую стоимость этого оборудования. 3. Напишите программу, которая проверяет, является ли простым введенное пользователем положительное целое число. Простым называется такое число, которое делится без остатка только на единицу и само себя (например, 5, 11, 19). 4. Напишите программу вычисления совершенных чисел, не превосходящих заданного числа N. Совершенным называется такое число, сумма делителей которого совпадает с самим числом (например, 6 = 1 + 2 + 3). 5. Для каждого посетителя парикмахерской (с одним мастером) известны сле- дующие величины: t – момент его прихода; – продолжительность его об- служивания. Сколько клиентов обслужит мастер за смену продолжительно- стью T? Сколько рабочего времени он потратит на обслуживание? 6. Расписание звонков. В учебном заведении задается начало учебного дня, продолжительность пары или урока, продолжительность обычного и большо- го перерывов (и их место в расписании), количество пар (уроков). Составить программу, которая выведет на экран расписание звонков на весь учебный день. 7. Гуси и кролики. У гусей и кроликов 2n лап. Сколько может быть гусей и кро- ликов (вывести все возможные сочетания)? 8. Составить программу, которая позволит определить, сколько можно купить быков, коров и телят, платя за быка 10 р., за корову – 5 р., а за теленка – 0,5 р., если на 100 р. надо купить 100 голов скота? 61 9. Составьте программу, которая выводит на экран календарь на любой месяц по заданному году. Воспользуйтесь алгоритмом вычисления дня недели, опи- санном в гл. 5. Пригласите преподавателя и продемонстрируйте ему все выполненные вами задания. После этого сохраните все программы в своей папке и выйдите из среды PascalABC.NET. Будьте готовы ответить на вопросы преподавателя. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. |