Л. И. Долинер основы программирования в среде pascalabc. Net учебное пособие
Скачать 1.88 Mb.
|
ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОЦЕДУРЫ 1. Необходимость технологии программирования Предположим, вам захотелось построить дом. Возможно два варианта: «любительский» – берем кирпич (дерево, плиту, бетон...) и строим. Что- нибудь получится. Если не развалится. А если развалится – будем пробовать еще. Пока не получится; «профессиональный» – создаем сами или заказываем ЭСКИЗ дома (фа- сад, количество комнат, подземных гаражей, туалетов, размеры и количество окон и дверей и т.д.), затем – ПРОЕКТ (подробнейший план дома с размерами деталей и структурой материала), далее – привязка дома к ландшафту (чтобы было удобно строить и красиво смотрелось) и только потом уж начинается прак- тическая РЕАЛИЗАЦИЯ: фундамент, стены, перекрытия, крыша, системы обес- печения (отопление, водопровод, канализация, электричество, телефон), внут- ренняя отделка, строительство газонов, установка мебели. Цепочка ЭСКИЗ ПРОЕКТ РЕАЛИЗАЦИЯ имеет отношение практи- чески ко всем видам производственной деятельности: создание машин, картин, одежды, и в том числе программ для компьютеров. Когда речь идет о программе от 5 до 50 строк, можно воспользоваться «любительским» вариантом: сел и пи- ши. Если же речь идет о быстром написании больших программ, необходима специальная технология, обеспечивающая как скорость, так и качество про- граммного продукта. Одной из таких технологий является технология програм- мирования «сверху вниз». С примером разработки программы по такой техноло- гии вы и познакомитесь в данной лабораторной работе. 2. Знакомство с технологией проектирования «сверху вниз» Выполним следующее задание. Составить программу, которая рисует на экране дисплея еловый лес. 63 РЕШЕНИЕ 1.Уточнение постановки задачи (ЭСКИЗ) Выясним подробнее, что же все-таки нам нужно нарисовать. Договоримся, что под «еловым лесом» будем понимать набор елочек различных размеров и различной расцветки, расположенных в произвольных местах экрана. 2. Первый вариант решения Предположим, что у нас есть уже готовая процедура Forest(n) (n – количе- ство деревьев в лесу), при вызове которой рисуется требуемый лес. Тогда наша программа выглядит достаточно просто: uses GraphABC; begin Forest(25); // Вызов процедуры – рисуем лес из 25 деревьев end . К сожалению, если эту программу запустить в PascalABC.NET, будет выда- на ошибка, означающая, что среда не знает процедуры Forest. 3. Уточнение решения Следовательно, такую процедуру надо создать. Сначала познакомимся с тем, как это делается. ТЕОРИЯ Вы уже знакомы со стандартными процедурами типа Rectangle(x,y,x1,y1), SetPenColor(m) и т. п. Язык программирования Паскаль позволяет вам созда- вать свои собственные процедуры и функции. Процедура представляет собой часть программы, оформленной специальным образом. Любая процедура имеет структуру, напоминающую структуру программы: Procedure <имя >[(<список формальных параметров>);] <блок описания данных> begin <операторы> end ; 64 Обратите внимание на структуру заголовка процедуры и точку с запятой в конце процедуры – именно этим оформление процедур отличается от оформ- ления программ. Процедуры, как и переменные, должны быть описаны непосредственно в программе, в которой они используются. Описание процедур в программе рас- полагается после блока описания переменных VAR. В этом случае программа имеет следующую структуру: Program <имя программы>; // необязательная строка <блок описания констант> <блок описания типов> <блок описания переменных> <блок описания процедур> begin <операторы> end . Задание 82 1. Запустите среду PascalABC.NET. Загрузите программу Proc1.pas . Раз- беритесь в тексте программы. Обратите внимание на оформление заго- ловка и расположение процедуры в тексте программы. 2. Запустите программу на выполнение и выясните, что она делает. 3. Модифицируйте программу так, чтобы она рисовала забор толщиной 15 и высотой 75 пикселов, а доски располагала ступеньками сверху вниз по диагонали экрана. ТЕОРИЯ Заголовок процедуры включает в себя ключевое слово PROCEDURE (чита- ется «просидже» и переводится как «процедура» или «образ жизни»), имя про- цедуры и описание параметров, т. е. тех данных, которые передаются в процеду- ру извне и используются в теле процедуры. Типы параметров описываются непосредственно в заголовке. Различные параметры с описанием типов отделяются друг от друга точкой с запятой. В процедуре может и не быть параметров. 65 Например: Procedure House(x,y:word; name:string; usd:real); – процедура с 4 па- раметрами (2 целых числа, строка и вещественное число). ... Procedure Man(name,adress:string); – заголовок процедуры с 2 парамет- рами (строками). ... Procedure Girl(name:string; eye:byte; nice:real); – процедура с 3 пара- метрами (строка, целое число от 0 до 255, вещественное число). ... Procedure Wait; – заголовок процедуры без параметров. ... Задание 83 1. Загрузите программу Proc2.pas . Разберитесь в тексте программы. Выясните последовательность описания вызываемой и вызывающей процедур. 2. Переделайте программу таким образом, чтобы сам фрагмент рисования трех заборов был выделен в отдельную процедуру pict БЕЗ ПАРАМЕТРОВ. При этом тело программы должно выглядеть следующим образом: ... begin PICT // Обращение к процедуре рисования трех заборов end . Задание 84 Загрузите программу из файла Proc3.pas . Допишите в ней процедуру TRIANGLE, рисующую равносторонний закрашенный треугольник. Сохраните все программы, пригласите преподавателя и продемонстрируй- те их ему. В случае, если вы обучаетесь дистанционно, после выполнения всей лабораторной работы тексты программ отправьте тьютору. 4. Уточнение решения Теперь вы знаете, что в программе рисования леса следует описать проце- дуру Forest Задание 85 Загрузите файл Proc4.pas . В этом файле находится текст уточненной программы. Запустите программу. Убедитесь в том, что программа не имеет 66 ошибок и исполняется. Но программа ничего не делает, поскольку ее следует еще дописать, вставив вместо комментариев реальную процедуру (или процедуры). 5. Уточнение решения Давайте предположим, что у нас есть еще одна графическая процедура Fir (по-английски «ель»), которая позволяет нарисовать елочку. Пусть данная про- цедура имеет следующий заголовок: procedure fir(x,y,h:integer; c1,c2:Color); где x,y – координаты елочки; h – высота елочки; c1 – цвет линий; с2 – цвет за- краски. Под «координатами елочки» договоримся понимать, например, коорди- наты ее вершины. Тогда программа будет выглядеть следующим образом. Uses GraphABC; procedure triangle(x,y,h:integer; c1,c2: color); // Рисование треугольника {Параметры: x,y – координаты вершины; h – высота; c1 – цвет линий; c2 – цвет закраски } begin // Рисуем треугольник end ; procedure fir(x,y,h:integer; c1,c2: color); // Процедура рисования елочки {Параметры: x,y – координаты вершины; h – высота; c – цвет линий; c2 – цвет закраски } begin // Рисуем елочку, обращаясь к процедуре TRIANGLE end ; // процедура рисования леса procedure Forest (N:integer); // N – количество елочек в лесу const h0=30; // высота треугольника var i: integer; a,b,h: integer; color1,color2,: color; begin For i:=1 to N do begin h:=random(h0)+10; // высота треугольника a:=random(WindowWidth)+20; // координата x вершины елочки b:=random(WindowHeight)+5; // координата y вершины елочки color1:=ClRandom; // цвет линий 67 color2:=ClRandom; // цвет закраски fir(a,b,h,color1,color2); // рисуем елочку end end ; begin { тело программы } Forest(25); end . Приведенная выше программа также не имеет ошибок, исполняется, но все же леса по-прежнему не рисует. 6. Уточнение решения Теперь попробуем понять, а как, собственно, рисует процедура Fir. Для простоты пусть елочка состоит из 3 равнобедренных треугольников и ножки (см. рисунок). Под «высотой» елочки проще всего считать высоту верхнего треугольника. Цвет елочки – цвет треугольника. Высоту ножки елочки можно задать, например, равной вы- соте первого треугольника. Треугольники, расположенные ниже, могут иметь высоту немного побольше (например, h+5 и h+7 соответ- ственно). Вариант размеров елочки вы можете посмотреть на рисунке. Понятно, что эти размеры условны и, если вам хочется, вы можете выбрать их другими. Таким образом, процедура Fir рисует елочку из 3 закрашенных треугольни- ков и ножки. Задание 86 Учитывая, что процедура рисования треугольника у вас уже написана (не забудьте ее использовать в проекте), завершите реализацию программы рисования леса. Для ускорения работы воспользуйтесь уже готовой частью программы из файла Proc4.pas При рисовании вы, несомненно, заметили дефекты закраски треугольников. Эту ситуацию можно исправить, если воспользоваться процедурой рисования многоугольников polygon. 68 Задание 87 Откройте файл ромбы.pas . Разберитесь в технологии рисования ромбов. Модифицируйте программу так, чтоба она рисовала треугольники. На основе этой программы составьте процедуру рисования треугольника и замените ею процедуру triangle . Все проблемы будут устранены. Задание 88 Модифицируйте программу таким образом, чтобы вместе с лесом рисовались домики ( ) или машинки ( ). Количество фигурок должно соответствовать числу елей. В программе должна быть отдельная процедура рисования выбранного объекта. Это вам пригодится Обратите внимание на этапы деятельности при проектировании программы рисования леса – это очень важно! Дело в том, что практическое программиро- вание – это на 70 % проектирование программы и только на 30 % – запись про- граммы на языке программирования. Описанный данный вариант проектирования разработан и используется в наиболее известных программистских фирмах мира. По этой технологии (напо- минаем, что называется она «технология программирования “сверху вниз”»), в частности, разработана и реализована сама среда PascalABC.NET. Такая техноло- гия позволяет достаточно быстро разрабатывать сколь угодно большие программы. Быстрота разработки обеспечивается тем, что после создания проекта про- граммы (на уровне простых процедур) реализация процедур может быть пору- чена нескольким программистам, и, если в проекте нет серьезных ошибок, про- грамма будет готова тогда, когда последний программист закончит писать свою процедуру. Далее, правда, следует этап отладки программы, но это предмет дру- гой лабораторной работы. Пригласите преподавателя и продемонстируйте созданный вами проект. При обучении в условиях дистанционного обучения отправьте проект по электронной почте. 69 Глава 13 ЦИКЛЫ С УСЛОВИЕМ Задание 89 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Циклы с условием». Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. 1. Цикл с предусловием (WHILE) Цикл со счетчиком используется тогда, когда количество повторений цикла заранее известно. Цикл WHILE используется тогда, когда количество повторений заранее неизвестно, но известно условие завершения выполнения цикла. При этом усло- вие должно проверяться до выполнения оператора в цикле. Общая структура цикла: WHILE <условие> DO <оператор> Цикл выполняется до тех пор, пока <условие> TRUE (ИСТИННО). Задание 90 Выполните следующие действия: а) загрузите файл lab13_86.pas ; б) прочитайте текст программы и проанализируйте его; в) запустите программу на выполнение (рекомендуем задать значения 1000, 200, 0, -5 в качестве значения M). Оцените, как программа ведет себя в различных ситуациях; г) измените программу так, чтобы она проверяла, является ли введенное число суммой кубов первых N натуральных чисел. Если является, следует указать это N. Для проверки используйте число 2025, здесь N = 9. 70 2. Цикл с постусловием (REPEAT) Этот цикл используется также в ситуации, когда количество повторений неизвестно, а известно условие завершения работы цикла. В таком случае само условие должно проверяться после выполнения действий в цикле. Общая структура цикла: REPEAT <оператор 1>; <оператор 2>; <оператор N> UNTIL <условие> Цикл выполняется до тех пор, пока <условие> FALSE (ЛОЖНО). Обратите внимание, что цикл с предусловием, в отличие от других операторов языка, может содержать любое количество операторов! Задание 91 Выполните следующие действия: а) загрузите файл lab13_87.pas ; б) прочитайте текст программы и проанализируйте его; в) запустите программу на выполнение; г) измените программу так, чтобы она завершала работу при А = 999. Задание 92 Выполните следующие действия: а) загрузите файл lab13_88.pas ; б) прочитайте текст программы и проанализируйте его; в) запустите программу на выполнение; д) измените программу так, чтобы в гонке участвовал еще третий участник. Задание 93 Составьте программу, которая вычисляет сумму ряда: а) 1 1 1 1 1 ( 1) π 4 (1 ...) 3 5 7 9 2 1 n n (значение ≈ 3,141 592); 71 б) ! 1 ! 4 1 ! 3 1 ! 2 1 ! 1 1 1 n e (значение e ≈ 2,718 281). Добавлять члены последовательности необходимо до тех пор, пока очередной член не станет меньше заданной точности Задачи для самостоятельной работы 1. В компьютер автомастерской после обслуживания клиента вводится стоимость ремонта. В конце дня вместо стоимости вводится число 0, после чего компьютер выводит на экран дисплея общую сумму выручки за день. Составьте такую программу. 2. Напишите программу, которая выводит двоичное представление введенного с клавиатуры десятичного числа. 3. Напишите программу, которая выводит шестнадцатеричное представление введенного с клавиатуры двоичного числа. 4. Напишите программу, которая выводит десятичное представление введенного с клавиатуры двоичного числа. 5. Напишите программу рисования шахматной доски. 6. Напишите программу-игру «Угадай число». Один игрок, в роли которого выступает компьютер, задумывает число в заданных пределах (например, от 1 до 999), другой игрок – человек – пытается его отгадать за минимальное число попыток. Для каждого числа, введенного человеком в качестве очередной версии, компьютер выдает сообщение «мое число больше», «мое число меньше» или «поздравляю, вы выиграли!», если число угадано точно. Предусмотрите начисление очков обратно пропорционально количеству затраченных попыток. 7. Дано натуральное число. Определить сумму его цифр. 8. В одной старинной задаче мудрец предложил шаху в качестве награды за услугу выдать ему зерно. Причем количество зерна оговорил так: на первую клетку шахматной доски положить 1 зерно, на вторую – 2, на третью – 4, на четвертую – 8 и т. д. Составить программу, с помощью 72 которой можно вычислить, на какой клетке суммарное количество зерен превысит N штук. 9. В компьютер по очереди вводятся баллы, полученные участницей на конкурсе красоты «Мисс Урал», а также номер участницы. Составить программу, которая обеспечит этот ввод и вывод на экран номер участницы, имеющей лучший результат. Пригласите преподавателя и продемонстрируйте ему все выполненные вами задачи и задания. После этого сохраните все программы в своей папке и вый- дите из среды PascalABC.NET. Будьте готовы ответить на вопросы препо- давателя. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 73 Глава 14 ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ Задание 94 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Построение графиков». Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. Задание 95 Используйте описанную в теоретической работе программу (файл lab14_90.pas ) для построения графика функции f(x) = 2x + 30. Убедитесь, что программа работает правильно (из курса алгебры вам известно, что графиком такой функции является прямая линия, пересекающая оси Ox и Oy в точках -15,0 и 0,30 соответственно). Задание 96 Пользуясь своей программой, постройте графики функций: а) f(x) = 2x + 30 ; б) f(x) = x – 80 – 40 – 20 – 10 (вместо знака модуля используйте функцию abs). Задание 97 Попробуйте с помощью той же программы построить график функции f(x)= 0,01x 2 + 3x – 7. Удалось ли это вам? Если нет, давайте разберемся, что произошло. А дело вот в чем: координаты точки на экране обязательно должны быть целыми числами, а значения функции f(x) оказываются в этом примере вещественными. Придется изменить описание переменных |