Учебное пособие для школьников 79 классов СанктПетербург Павловск 20152016 Введение
Скачать 0.84 Mb.
|
Использование модуля CRT Язык Паскаль имеет специальную библиотеку работы с экраном в текстовом режиме. Она называется CRT 5 . Эта библиотека содержит набор подпрограмм, позволяющих задавать цвет выводимых букв, цвет фона, устанавливать курсор в желаемую позицию. В текстовом режиме считается, что окно содержит 25 строк по 80 колонок. В каждой позиции может быть один символ (буква, цифра, специальные знаки). Графические объекты (прямые, окружности и т.п.) в текстовом окне не допустимы. Модуль CRT эмулирует текстовый терминал первых персональных компьютеров. Подключение библиотеки к программе осуществляется предложением Uses: Program Card; Uses CRT; { Это предложение вставляется сразу после Program } Далее могут идти описания переменных, затем begin и тело программы. Рассмотрим использование подпрограмм этой библиотеки на примере создания заставки программы. Program Card; Uses CRT; { Подключить модуль CRT } begin ClrScr; { Очистить экран } TextColor(White); { Установить белый цвет букв } TextBackGround(Blue); { Установить синий цвет фона } GotoXY(36,13); { Поставить курсор в 36 колонку, 13 строку } write(' Привет '); { Вывести текст } ReadKey; { Ожидать нажатия любой клавиши } end Наберите текст этой программы и выполните её Разберем действия отдельных процедур: • ClrScr – очищает экран или текущее окно (от англ. Clear Screen), закрашивая его текущим цветом фона, установленным процедурой TextBackGround. По умолчанию – цвет экрана белый. • TextColor(цвет) – устанавливает текущий цвет букв, который будет исполь– зоваться операторами write и writeln. По умолчанию используется светло-серый цвет букв. • TextBackgroud(цвет) – устанавливает текущий цвет фона, который будет исполь- зоваться операторами write и writeln. • GotoXY(колонка, строка) – переводит курсор в указанную позицию; вывод, осуществляемый последующим оператором write или writeln будет начинаться с этой позиции. Обычно экран в текстовом режиме содержит 80 колонок и 25 строк. • ReadKey – ожидание нажатия на любую клавишу (далее мы рассмотрим другое применение этой подпрограммы). 5 От английского Cathode Ray Tube – Электронно-лучевая трубка (ЭЛЧ) Тема №2 – Использование модуля CRT А.С.Цветков, ABC Pascal - 10 - 19.09.2015 В качестве цвета может использоваться число от 0 до 15, но лучше пользоваться определенными в модуле CRT константами: Таблица цветов Рассмотрим еще несколько полезных подпрограмм. • Window(x1,y1,x2,y2) – создание окна вывода. В случае задания окна, все операторы write и writeln выводят только в него, процедура ClrScr будет очищать только это окно. • WhereX, WhereY – две функции, позволяющие узнать координаты местонахождения курсора. Пример использования: GotoXY(WhereX+10,WhereY+2). Задание №2: Напишите программу «Визитная карточка», которая выводила бы на экран хорошо оформленные ваши личные данные: имя, фамилию, год рождения, адрес, телефон. Используйте разные цвета, хорошо скомпонуйте. Задание №2*: Модуль Sounds содержит процедуры и функции для работы со звуком: n:=LoadSound(fname) – загружает звук из файла с именем fname в оперативную память и возвращает описатель звука в целую переменную n (звуковой файл должен может иметь любой формат); PlaySound(n) – начинает проигрывание звука с описателем n; StopSound(n) – останавливает проигрывание звука с описателем n; RewindSound(n) – "перематывает" звук с описателем n на начало; DestroySound(n) – удаляет звук с описателем n из оперативной памяти, описатель звука при этом становится недействительным; SoundLength(n) – возвращает длительность звука с описателем n в миллисекундах. Используйте его возможности для «улучшения» программы «Визитная карточка» Пример использования модуля sound: Program Player; Uses Sounds, CRT; var n: integer; begin n:=LoadSound('C:\WINDOWS\MEDIA\ringin.wav'); // укажите расположение файла PlaySound(n); Sleep(SoundLength(n)); DestroySound(n); end Black Черный DarkGray Темно-серый Blue Синий LightBlue Светло-синий Green Зеленый LightGreen Светло-зеленый Cyan Небесно голубой LightCyan Ярко-голубой Red Красный LightRed Светло-красный Magenta Малиновый LightMagenta Светло-малиновый Brown Коричневый Yellow Желтый LightGray Светло-серый White Белый Тема №3. Графика в системе ABC Pascal А.С.Цветков, ABC Pascal - 11 - 19.09.2015 Занятие №3 Графический модуль GraphABC Система ABC Pascal обладает великолепной графической библиотекой. Для ее модключения после заголовка программы необходимо написать Uses GraphABC. Модуль GraphABC содержит константы, типы, процедуры и функции для рисования в графическом окне. Они подразделяются на несколько групп: • Графические примитивы • Действия с цветом • Действия с точками и прямоугольниками • Действия с пером • Действия с кистью • Действия со шрифтом • Действия с рисунками • Действия с графическим окном Рассмотрим сразу пример: Program Gr01; Uses GraphABC; begin SetWindowSize(256,256); SetPenColor(RGB(0,0,255)); Line(0,0, WindowWidth, WindowHeight) Line(0,WindowHeight, WindowWidth, 0) end Процедура SetWindowSize устанавливает размер графического окна 256×256 пикселей. Процедура SetPenColor определяет цвет рисования линий. Функция RGB возвращает цвет, заданный своими Red, Green, Blue компонентами. Процедура Line рисует линию из точки, заданной первой парой координат, в точку, заданную второй парой координат. Функции WindowWidth и WindowHeight возвращают текущие значения ширины и высоты графического окна (следовательно, если вы поменяете размер окна в процедуре SetWindowSize, то линии все равно будут проводиться из угла в угол). Оконные координаты • Координата x растет слева на право от 0 до значения WindowWidth • Координата y растет сверху вниз от 0 до значения WindowHeight 0 0 WindowWidth WindowHeigth Тема №3. Графика в системе ABC Pascal А.С.Цветков, ABC Pascal - 12 - 19.09.2015 Задание цвета Как известно восприятие цвета у человека трехцветное. Основываясь на этом, в графических библиотеках используется именно такое трехкомпонентное представление цвета. Цвет задается с помощью функции rgb(Red,Green,Blue) Здесь • Red – число от 0 до 255, соответствующее интенсивности красной компоненты • Green – число от 0 до 255, соответствующее интенсивности зеленой компоненты • Blue – число от 0 до 255, соответствующее интенсивности синей компоненты Функция формирует целое число (integer), которое может использоваться везде в графической библиотеке, где требуется указание цвета. Есть несколько предопределенных цветов: clBlack – черный clPurple – фиолетовый clWhite – белый clMaroon – темно-красный clRed – красный clNavy – темно-синий clGreen – зеленый clBrown – коричневый clBlue – синий clSkyBlue – голубой clYellow – желтый clCream – кремовый clAqua – бирюзовый clOlive – оливковый clFuchsia – сиреневый clTeal – сине-зеленый clGray – серый clLime – ярко-зеленый clLightGray – светло-серый clMoneyGreen – цвет зеленых денег clDarkGray – темно-серый Задание стиля и цвета пера • SetPenColor(цвет) – устанавливает цвет пера, задаваемый параметром color. • SetPenWidth(ширина) – устанавливает ширину пера. • SetPenStyle(стиль) – устанавливает стиль пера (сплошной, пунктир и т.п.), возможные значения указаны в таблице (стиль применим только к ширине пера 1 пиксел) psSolid psClear psDash psDot psDashDot psDashDotDot Текущее перо используется для рисования линий, прямоугольников, ломаных, окружностей, эллипсов, дуг и т.п. Пример: Program Gr02; Uses GraphABC; Var i : integer; begin SetWindowSize(512,512); SetPenStyle(psDash); SetBrushStyle(bsClear); Circle(256,256,WindowHeight div 2); end Тема №3. Графика в системе ABC Pascal А.С.Цветков, ABC Pascal - 13 - 19.09.2015 Задание стиля и цвета кисти • SetBrushColor(цвет) – устанавливает цвет кисти • SetBrushPicture(имя файла) – устанавливает в качестве образца для закраски кистью образец, хранящийся в файле, при этом текущий цвет кисти при закраске игнорируется. • ClearBrushPicture – очищает рисунок-образец, выбранный для кисти. • SetBrushStyle(стиль) – устанавливает стиль кисти, задаваемый параметром bs. Возможные стили кисти: bsSolid bsClear bsCross bsDiagCross bsHorizontal bsBDiagonal bsVertical bsFDiagonal Текущей кистью закрашиваются все замкнутые фигуры, контур фигур рисуется текущим пером. Чтобы нарисовать не закрашенную фигуру, используйте SetBrushColor(bsClear). Пример: Program Gr03; Uses GraphABC; Var i,j : integer; begin SetWindowSize(512,512); SetBrushColor(rgb(128,0,255)); SetBrushStyle(bsDiagCross); Rectangle(10,10,WindowWidth-10,WindowHeight-10); end Некоторые графические примитивы 6 • Line(x1,y1,x2,y2) – рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2). • Circle(x,y,r) – рисует окружность с центром в точке (x,y) и радиусом r. • Ellipse(x1,y1,x2,y2) – рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2). • Rectangle(x1,y1,x2,y2) – рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2). • RoundRect(x1,y1,x2,y2,w,h) – рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев. • Arc(x,y,r,a1,a2) – рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки). • Pie(x,y,r,a1,a2) – рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc). • Chord(x,y,r,a1,a2) – рисует фигуру, ограниченную дугой окружности и отрезком, соеди- няющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc). • FloodFill(x,y,color) – закрашивает область одного цвета, начиная с точки (x,y) цветом color. Задание: Напишите программу, использующую не менее трех процедур рисования, которая рисовала бы несложный рисунок (домик, автомобиль, и т.п.) 6 Дополнительную информацию можно получить в справочной системе ABC Pascal, раздел Стандартные модули – Модуль GraphABC. Тема №3. Графика в системе ABC Pascal А.С.Цветков, ABC Pascal - 14 - 19.09.2015 Пример решения задания program avto; uses graphABC; var i : integer; begin SetWindowSize (800,600); SetPenStyle (psClear); // верхняя часть автомобиля setBrushColor (Clgreen); rectangle (250,250,550,351); setBrushColor (ClAqua); // окна rectangle (255,255,395,345); rectangle (405,255,545,345); setBrushColor (Clgreen); // корпус rectangle (50,350,750,500); setBrushColor (ClYellow); // фары rectangle (749,375,764,400); setBrushColor (ClRed); rectangle (35,375,51,400); setBrushColor (ClLightGray); // бампер RoundRect (725,450,775,475,10,10); RoundRect (25,450,75,475,10,10); SetPenStyle (psSolid); // двери Line(250,350,250,425); Line(250,425,300,500); Line (400,250,400,500); Line (550,350,550,425); Line (550,425,500,500); setBrushColor (ClBlack); // колеса Circle (200,500,50); setBrushColor (ClLightGray); Circle (200,500,25); setBrushColor (ClBlack); Circle (600,500,50); setBrushColor (ClLightGray); Circle (600,500,25); end Тема №4. Цикл for А.С.Цветков, ABC Pascal - 15 - 19.09.2015 Занятие №4 Цикл for Цикл for используется для повторения фрагментов программы заданное число раз. Синтаксис оператора: for i:=N1 to N2 do оператор; или for i:=N1 to N2 do begin оператор1; оператор2; end; Здесь i – индекс цикла (обязательно переменная целочисленного типа), N1 – целочисленное выражение, определяющее нижнюю границу индекса цикла, N2 – целочисленное выражение, определяющее верхнюю границу индекса цикла, N2 должно быть больше или равно N1, для того чтобы цикл выполнился хоть один раз. Алгоритм выполнения оператора такой: 1. Индексу цикла присваивается значение выражения N1. 2. Проверяется условие i<=N2. Если условие истинно, то переход к п. 3, иначе к п.6. 3. Выполняются операторы тела цикла. 4. Значение индекса цикла увеличивается на единицу (автоматически!). 5. Переход к п. 2. 6. Конец цикла. Пример: Построить таблицу квадратов чисел от 1 до 10. Program Square; var i, j : integer; begin for i:=1 to 10 do begin j:=sqr(i); writeln(i:4,j:4); end; end. или проще: Program Square; var i: integer; begin for i:=1 to 10 do writeln(i:4,sqr(i):4); end. Обратите внимание на указание формата вывода целого числа в операторе writeln.Число после двоеточия указывает на количество символов, отводимых для представления целого числа. Если число занимает меньшее количество цифр, то при выводе оно слева дополняется необходимым числом пробелов. Составной оператор – это группа операторов, заключенная в операторные скобки begin ... end. Тема №4. Цикл for А.С.Цветков, ABC Pascal - 16 - 19.09.2015 Цикл for … downto Иногда возникает желание выполнить цикл for наоборот, так чтобы индекс цикла не возрастал, а убывал. Эту возможность реализует следующая конструкция: for i:=N2 to N1 do оператор; Здесь подразумевается, что N2 должно быть больше или равно N1. Использование цикла for для построения изображений Использование цикла for весьма эффективно при построении изображений. Например, следующая программа строит набор концентрических окружностей. Program Concentric; uses graphABC; var i : integer; // для цикла for begin SetWindowSize (400,400); SetBrushStyle (bsClear); // строятся 10 окружностей с // радиусами 20, 40, ... 200 for i:=1 to 10 do Circle(200,200,i*20); end Вот более сложный пример, разберитесь с ним сами. Ответьте на вопрос: «Почему используется цикл не for … to, а for … downto?» Program Concentric2; uses graphABC; var i : integer; // для цикла for begin SetWindowSize (400,400); SetPenStyle(psClear); for i:=20 downto 1 do begin SetBrushColor (RGB(10*i,0,0)); Circle(200,200,i*10); end; end. Интересных эффектов можно добиться, используя так называемый «генератор случайных чисел». Встроенная функция random(N) возвращает случайное число в диапазоне от 0 до N–1. Посмотрите, как эта возможность применяется в следующей программе. Program RandomLines; uses graphABC; var i : integer; begin SetWindowSize (400,400); for i:=1 to 200 do Line(Random(400),Random(400),Random(400),Random(400)); end Задание №5. Дополните вашу графическую программу узором, получаемым с помощью цикла for. Тема №5. Оператор if А.С.Цветков, ABC Pascal - 17 - 19.09.2015 Занятие №5 Оператор if В языке Pascal существуют операторы, позволяющие изменить линейный ход программы. Их можно разделить на две группы: развилки и циклы. Развилки Циклы if ... then ... else ... while if ... then repeat ... until case for Развилки Оператор if Синтаксис 7 оператора: if логическое условие then оператор-1 else оператор-2; Пример: if x>0 then z:=1 else z:=–1; Выполнение оператора начинается с проверки логического условия, если оно истинно, то выполняется оператор-1, иначе оператор-2. В качестве оператора может выступать простой оператор или составной оператор. Составной оператор – это группа операторов, заключенная в операторные скобки begin ... end. Пример: if x>0 then begin z:=1; x:=2*x; end else begin z:=-1; x:=-x; end; Обратите внимание, что перед else точка с запятой не ставится. Точка с запятой используется только для разделения операторов друг от друга. Можно было бы и не ставить запятую после операторов x:=2*x и x:=-x, поскольку begin и end не являются операторами, а являются скобками. Паскаль будет интерпретировать 8 точку с запятой перед end, как наличие пустого оператора между ней и end. Обратите внимание на запись “лесенкой”, она не обязательна, но весьма желательна, поскольку помогает наглядно увидеть алгоритмическую структуру программы. Правило такое: end пишем под begin. 7 Синтаксис оператора – правила его записи. 8 Интерпретировать – толковать. |