понедельник, 13 мая 2013 г.
понедельник, 22 апреля 2013 г.
Практикум
Задания для самостоятельного решения (на выбор)
Задание 1 "Определи цвет". Напишите программу, которая создает на экране разноцветную картинку (используются несколько стандартных цветов). Затем щелчок мыши по экрану выдает название цвета, на который попадет мышь.
Например, рисуем светофор. Наводим мышь, щелкаем по цвету и на свободном поле (напротив цвета) появляется надпись - "Красный цвета, прохода нет" и т. д.
Задание 2 "Назови фигуру". Напишите программу, которая рисует на экране несколько геометрических фигур (квадрат, круг, треугольник, пятиугольник и т. д.) и заливает их разным цветом (стандартным, код которого известен). Затем по щелчку мыши на фигуре выдает название этой фигуры.
Задание 3 "Найди цвет". Напишите программу, которая задает несколько квадратов известного расположения и цвета. Затем предлагается щелкнуть по квадрату указанного цвета. Если щелчок происходит в нужной области, по выводится - "Молодец, верно!", иначе предлагается повторить попытку (до тех пор пока не будет найден верный цвет).
Например, рисуем светофор. Наводим мышь, щелкаем по цвету и на свободном поле (напротив цвета) появляется надпись - "Красный цвета, прохода нет" и т. д.
Задание 2 "Назови фигуру". Напишите программу, которая рисует на экране несколько геометрических фигур (квадрат, круг, треугольник, пятиугольник и т. д.) и заливает их разным цветом (стандартным, код которого известен). Затем по щелчку мыши на фигуре выдает название этой фигуры.
Задание 3 "Найди цвет". Напишите программу, которая задает несколько квадратов известного расположения и цвета. Затем предлагается щелкнуть по квадрату указанного цвета. Если щелчок происходит в нужной области, по выводится - "Молодец, верно!", иначе предлагается повторить попытку (до тех пор пока не будет найден верный цвет).
вторник, 16 апреля 2013 г.
Модуль Events (продолжение)
1. Событие нажатие на клавиши
Пример программы, осуществляющая движение графического окна с помощью клавиатуры.uses GraphABC,Events;
procedure KeyDown(Key: integer);
begin
case Key of
VK_Left: SetWindowLeft(WindowLeft-2);
VK_Right: SetWindowLeft(WindowLeft+2);
VK_Up: SetWindowTop(WindowTop-2);
VK_Down: SetWindowTop(WindowTop+2);
end;
end;
begin
SetWindowCaption('Двигайте окно стрелками');
OnKeyDown:=KeyDown;
end.
Задание 1. Увеличьте шаг движения окна с помощью клавиатуры.
Задание 2. Измените программу таким образом, чтобы при нажатии на курсор влево окно двигалось по диагонали влево и вниз, при нажатии курсора вправо - вправо и вверх.
uses GraphABC,Events;
procedure Resize;
begin
FillRect(0,0,WindowWidth,WindowHeight);
Ellipse(0,0,WindowWidth,WindowHeight);
end;
begin
OnResize:=Resize;
Resize;
end.
Задание 4. Измените в программе эллипс на ромб, вершины которого лежат на середине сторон окна.
2. Событие изменение размеров графического окна
Пример программы, меняющей форму и размеры эллипса в зависимости от изменения размеров окна.uses GraphABC,Events;
procedure Resize;
begin
FillRect(0,0,WindowWidth,WindowHeight);
Ellipse(0,0,WindowWidth,WindowHeight);
end;
begin
OnResize:=Resize;
Resize;
end.
Задание 4. Измените в программе эллипс на ромб, вершины которого лежат на середине сторон окна.
понедельник, 8 апреля 2013 г.
Модуль Events
1. Обзор
Модуль Events предназначен для создания программ, управляемых событиями. Он работает только в паре с модулем GraphABC. При одновременном подключении модулей GraphABC и Events программа после запуска и выполнения своего основного блока begin/end не завершается, а продолжает выполняться, отслеживая возникающие события. После закрытия графического окна программа завершается.
Каждому событию соответствует своя процедурная переменная:
Переменные, соответствующие событиям, описаны в модуле Events следующим образом:
var
OnMouseDown, OnMouseUp, OnMouseMove: procedure (x,y,mousebutton: integer);
OnKeyDown, OnKeyUp: procedure (key: integer);
OnKeyPress: procedure (ch: char);
OnResize, OnClose: procedure;
Параметры x и y в обработчиках OnMouseDown, OnMouseUp и OnMouseMove определяют координаты курсора мыши в момент наступления события, параметр mousebutton равен 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши. Параметр key в обработчиках OnKeyDownи OnKeyUp определяет виртуальный код нажатой клавиши. Параметр ch в обработчике OnKeyPress определяет нажатый символ. Если переменная-событие OnKeyPress имеет обработчик, то графическое окно не закрывается по нажатию клавиши Esc.
Каждому событию соответствует своя процедурная переменная:
- нажатие мыши OnMouseDown
- отпускание мыши OnMouseUp
- перемещение мыши OnMouseMove
- нажатие клавиши OnKeyDown
- отпускание клавиши OnKeyUp
- нажатие символьной клавиши OnKeyPress
- изменение размеров графического окна OnResize
- закрытие графического окна OnClose
Переменные, соответствующие событиям, описаны в модуле Events следующим образом:
var
OnMouseDown, OnMouseUp, OnMouseMove: procedure (x,y,mousebutton: integer);
OnKeyDown, OnKeyUp: procedure (key: integer);
OnKeyPress: procedure (ch: char);
OnResize, OnClose: procedure;
Параметры x и y в обработчиках OnMouseDown, OnMouseUp и OnMouseMove определяют координаты курсора мыши в момент наступления события, параметр mousebutton равен 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши. Параметр key в обработчиках OnKeyDownи OnKeyUp определяет виртуальный код нажатой клавиши. Параметр ch в обработчике OnKeyPress определяет нажатый символ. Если переменная-событие OnKeyPress имеет обработчик, то графическое окно не закрывается по нажатию клавиши Esc.
2. События с мышью
Пример программы, в которой каждый раз при щелчке мыши по графическому окну в окно вывода будет выводиться "Щелчок мыши!"
uses GraphABC, Events;
procedure MouseDown(x,y,mb: integer);
begin
write('Щелчок мыши!');
end;
begin
OnMouseDown:=MouseDown;
end.
Задание 1. Измените эту программу таким образом, чтобы вывод данного текста происходил в графическое окно с задержкой на экране и последующим очищением окна.
Указание: для вывода текста в графическое окно используйте процедуру TextOut, для задержки sleep, для очистки окна ClearWindow.
Задание 2. Доработайте программу таком образом, чтобы текст выводился в точку, где произошел щелчок мыши.
Задание 3. Напишите программу, которая оставляет в точке, где происходит щелчок мыши, штамп (штамп - это некоторое графическое изображение, размер его не меняется).
Пример программы, рисование мышью.
uses GraphABC, Events;
procedure MouseDown(x,y,mb: integer);
begin
MoveTo(x,y);
end;
procedure MouseMove(x,y,mb: integer);
begin
SetWindowCaption('('+IntToStr(x)+','+IntToStr(y)+')');
if mb=1 then LineTo(x,y);
end;
begin
OnMouseDown:=MouseDown;
OnMouseMove:=MouseMove
end.
Задание 4. Измените цвет и толщину пера (цвет- красный, толщина - 10 пиксел).
Задание 5. Изменение цвета должно происходить каждый раз после отпускания мыши (цвет - случайный).
Пример программы, демонстрирующей обработку события OnClose (закрытие окна).
uses GraphABC,Events;
procedure CloseWin;
var i: integer;
begin
for i:=1 to 20 do
begin TextOut(10,20*i,'Не хочу закрываться!');
Sleep(100); end;
end;
begin
OnClose:=CloseWin;
end.
Задание 6. Измените программу таким образом, чтобы при закрытии окна трижды менялся его цвет (случайным образом).
Указание: для вывода текста в графическое окно используйте процедуру TextOut, для задержки sleep, для очистки окна ClearWindow.
Задание 2. Доработайте программу таком образом, чтобы текст выводился в точку, где произошел щелчок мыши.
Задание 3. Напишите программу, которая оставляет в точке, где происходит щелчок мыши, штамп (штамп - это некоторое графическое изображение, размер его не меняется).
Пример программы, рисование мышью.
uses GraphABC, Events;
procedure MouseDown(x,y,mb: integer);
begin
MoveTo(x,y);
end;
procedure MouseMove(x,y,mb: integer);
begin
SetWindowCaption('('+IntToStr(x)+','+IntToStr(y)+')');
if mb=1 then LineTo(x,y);
end;
begin
OnMouseDown:=MouseDown;
OnMouseMove:=MouseMove
end.
Задание 4. Измените цвет и толщину пера (цвет- красный, толщина - 10 пиксел).
Задание 5. Изменение цвета должно происходить каждый раз после отпускания мыши (цвет - случайный).
3. События с окном
Пример программы, демонстрирующей обработку события OnClose (закрытие окна).
uses GraphABC,Events;
procedure CloseWin;
var i: integer;
begin
for i:=1 to 20 do
begin TextOut(10,20*i,'Не хочу закрываться!');
Sleep(100); end;
end;
begin
OnClose:=CloseWin;
end.
Задание 6. Измените программу таким образом, чтобы при закрытии окна трижды менялся его цвет (случайным образом).
понедельник, 1 апреля 2013 г.
Шрифт
1. Действия со шрифтом
TextOut(x,y,s) - выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s);
SetFontColor(color) - цвет шрифта;
SetFontSize(sz) - размер шрифта в пунктах;
SetFontName(name) - наименование шрифта (наиболее популярные Times,
Arial
и Courier New);
SetFontStyle(fs) - стиль шрифта.
Стили шрифта:
fsNormal – обычный;
fsBold – жирный;
fsItalic – наклонный;
fsBoldItalic – жирный наклонный;
fsUnderline – подчеркнутый;
fsBoldUnderline – жирный подчеркнутый;
fsItalicUnderline – наклонный подчеркнутый;
fsBoldItalicUnderline – жирный наклонный подчеркнутый.
Пример программы, выводящей слово 'Привет!" в окно, начиная с точки (10,10) с заданным цветом, размером и стилем.
Uses GraphABC;
SetFontColor(clRed);
SetFontSize(48);
SetFontStyle(fsBold);
TextOut(10,10,'Привет!')
end.
Задание 1. Измените положение текста, его размер, цвет и стиль.
Задание 2. Напишите программу, выводящую следующий текст:
Для вывода используйте цикл! Цвет текста задается случайным образом.
2. Дополнительно о шрифте
tw:=TextWidth(s) - возвращает ширину строкиs
в пикселях при текущих настройках шрифта;th:=TextHeight(s) -
возвращает высоту строки s
в пикселях при текущих настройках шрифта.Пример программы, выводящей текст по центру окна. Обратите внимание на процедуры SetWindowCaption и CenterWindow.
uses GraphABC;
var
s: string;
tw,th: integer;
begin
SetWindowCaption('Текст по центру');//задает заголовок окна
s:='Width & Height';
SetWindowSize(700,300);
CenterWindow;//Центрирует графическое окно по центру экрана
SetFontName('Times'); SetFontSize(50);
tw:=TextWidth(s); th:=TextHeight(s);
TextOut(WindowWidth div 2 - tw div 2,WindowHeight div 2 - th div 2,s);
end.
Задание 3. Измените программу таким образом, чтобы текст вписывался в верхнюю четверть окна (точно по центру). Возможно надо будет изменить и размер шрифта.
Задание 4. Напишите программу, выводящую 4 строки в центр каждой из четырех четвертей окна (см. картинку).
вторник, 19 марта 2013 г.
Картинки
1. Решение задач
Задача 1. Напишите программу, рисующую треугольники в видимой части окна. Вершины задаются случайным образом (вырожденный треугольник допустим).
Задача 2. Напишите программу, рисующую вот такую фигуру (центр фигуры - фиксированная точка, конец лучика - случайная точка на видимой части окна). Размер пузырика - случайный из небольшого диапазона, зависящего от размеров окна.
n:=LoadPicture(fname) – загружает рисунок из файла с именем fname (строковый тип, пишется в ' ') в оперативную память и возвращает описатель рисунка в целую переменную n; если файл не найден, то возникает ошибка времени выполнения. Загружать можно рисунки в формате .bmp, .jpg или .gif.
DrawPicture(n,x,y) - выводит рисунок с описателем n в позицию (x,y) графического окна.
DestroyPicture(n) - удаляет рисунок с описателем n из оперативной памяти, описатель рисунка при этом становится недействительным.
Задача 1. Нарисуйте в графическом редакторе Paint картинку рыбки, размером 100х100 пиксел и сохраните ее в файл под именем fish.bmp. Напишите программу в Паскале, выводящую рубку в центр видимой части окна.Задача 2. Напишите программу, рисующую вот такую фигуру (центр фигуры - фиксированная точка, конец лучика - случайная точка на видимой части окна). Размер пузырика - случайный из небольшого диапазона, зависящего от размеров окна.
2. Использование картинок
Для работы с готовым изображением используются следующие процедуры и функции:n:=LoadPicture(fname) – загружает рисунок из файла с именем fname (строковый тип, пишется в ' ') в оперативную память и возвращает описатель рисунка в целую переменную n; если файл не найден, то возникает ошибка времени выполнения. Загружать можно рисунки в формате .bmp, .jpg или .gif.
DrawPicture(n,x,y) - выводит рисунок с описателем n в позицию (x,y) графического окна.
DestroyPicture(n) - удаляет рисунок с описателем n из оперативной памяти, описатель рисунка при этом становится недействительным.
Пример, программы, выводящей изображение 1.jpg в верхний левый угол окна:
uses GraphABC;
var
pic: integer;
begin
pic:=LoadPicture('1.jpg');
DrawPicture(pic,0,0);
end.
Задача 2. Напишите программу, двигающую вашу рыбку по какой-нибудь линии в окне. Пример рабочей программы можно посмотреть в разделе SAMPLES->GraphABC->movingobject.pas
понедельник, 4 марта 2013 г.
Генератор случайных чисел
1. Оператор RANDOM
В программировании часто возникают задачи, при решении которых необходимо получать случайные числа из некоторого диапазона. Алгоритмы, реализующие такие последовательности не могут быть поистине случайными, а получаются в результате некоторых вычислений. Такие наборы называются псевдослучайными.
Random - функция (типа real) возвращает случайное вещественное в диапазоне [0..1)
Random(x) - функция типа integer (x - integer) возвращает случайное целое в диапазоне от 0 до x-1
Random(x) - функция типа integer (x - integer) возвращает случайное целое в диапазоне от 0 до x-1
Например, оператор random(10)-5 задает числа от -5 до 4 (10 штук).
Задание 1.
Напишите генератор случайных чисел, задающий следующие диапазоны:
Задача 1. Засыпать окно (учитывать изменение размеров) точками.
uses GraphABC;
var x,y,i:integer;
begin
for i:=1 to 10000 do
begin
x:=random(WindowWidth)+1; //WindowWidth - возвращает ширину окна
y:= random(WindowHeight)+1; // WindowHeight - возвращает высоту окна
SetPixel(x,y,clblack);
end;
end.
Задача 2. Засыпать окно точками разного цвета.
Изменения надо внести только в оператор рисования точки, а именно в определение цвета:
SetPixel(x,y,RGB(Random(256),Random(256),Random(256)));
Задача 3. Напишите программу, рисующую и стирающую закрашенные шарики случайным цветом, случайного размера (не более 1/10 от ширины окна) и случайного расположения, не подходящего к границам окна на расстояние ближе 1/10 ширины окна.
Для задержки изображения используйте оператор Sleep(x):
Sleep(ms) - процедура (ms - integer) осуществляет паузу в выполнении программы на ms миллисекунд.
Задача 4. Напишите программу, рисующую звезды (звезда - это набор отрезков разной длины, выходящих из одной точки). Размер звезды должен быть ограничен 1/10 ширины окна, количество лучей от 3 до 20. Положение центра звезды и ее цвета - случайно. Для рисования звезды используйте процедуру.
Задание 1.
Напишите генератор случайных чисел, задающий следующие диапазоны:
- от 0 до 100;
- от 0 до 99;
- от -10 до 10;
- от -13 до 14.
2. Использование оператора Random в анимации
Для задания положения, размера или цвета объекта можно использовать генератор случайных чисел. Рассмотрим задачу, в которой случайным является положение точки на экране.Задача 1. Засыпать окно (учитывать изменение размеров) точками.
uses GraphABC;
var x,y,i:integer;
begin
for i:=1 to 10000 do
begin
x:=random(WindowWidth)+1; //WindowWidth - возвращает ширину окна
y:= random(WindowHeight)+1; // WindowHeight - возвращает высоту окна
SetPixel(x,y,clblack);
end;
end.
Задача 2. Засыпать окно точками разного цвета.
Изменения надо внести только в оператор рисования точки, а именно в определение цвета:
SetPixel(x,y,RGB(Random(256),Random(256),Random(256)));
Задача 3. Напишите программу, рисующую и стирающую закрашенные шарики случайным цветом, случайного размера (не более 1/10 от ширины окна) и случайного расположения, не подходящего к границам окна на расстояние ближе 1/10 ширины окна.
Для задержки изображения используйте оператор Sleep(x):
Sleep(ms) - процедура (ms - integer) осуществляет паузу в выполнении программы на ms миллисекунд.
Задача 4. Напишите программу, рисующую звезды (звезда - это набор отрезков разной длины, выходящих из одной точки). Размер звезды должен быть ограничен 1/10 ширины окна, количество лучей от 3 до 20. Положение центра звезды и ее цвета - случайно. Для рисования звезды используйте процедуру.
понедельник, 25 февраля 2013 г.
Анимация
1. Движение шарика
Алгоритм движения следующий: пером красного цвета рисуем параметризованную окружность (изменяемые параметры - координаты центра), заливаем круг внутри окружности красным цветом. Делаем задержку. Очищаем экран в цвет фона (т.е. стираем шарик). За счет изменения параметра получаем необходимое смещение шарика.
Пример программы, где шарик движется по диагонали.
var i:integer;
procedure shar(a:integer);
var k,m:integer;
begin
SetPenColor(clRed);
Circle(a,a, 50);
FloodFill(a,a,clRed );
for k:=1 to 100000 do m:=m+1;
ClearWindow(clSilver );
end;
begin
SetWindowHeight(500);
SetWindowWidth(500);
ClearWindow(clSilver );
for i:=1 to 500 do shar(i);
end.
Задание 1. Измените цвет шарика на зеленый, а цвет фона на желтый.
Задание 2. Измените программу таким образом, чтобы шарик двигался по горизонтали в центре окна.
Задание 3. Измените программу таким образом, чтобы шарик двигался по вертикали в центре окна.
Задание 4. Измените программу таким образом, чтобы шарик двигался по второй диагонали сверху вниз.
2. Изменение размера шарика
Пример программы рисующей раздувающийся пузырь. Центр пузырика стоит на месте, увеличивается радиус.
Uses GraphABC;
var i:integer;
procedure shar(a:integer);
var k,m:integer;
begin
SetPenColor(clSkyBlue);
Circle(250,250, a);
FloodFill(250,250,clSilver);
for k:=1 to 100000 do m:=m+1;
ClearWindow(clSilver );
end;
begin
SetWindowHeight(500);
SetWindowWidth(500);
ClearWindow(clSilver );
for i:=1 to 250 do shar(i);
end.
Задание 1. Измените цвет пузырика и цвет фона.
Задание 2. Измените программу таким образом, чтобы пузырик увеличивался и двигался по главной диагонали.
вторник, 19 февраля 2013 г.
Графика в PABC (продолжение)
1. Параметризованная графика
Задача 1.
Напишите программку рисования домика, где ширина домика вводится с клавиатуры.
Для рисования используйте следующие графические примитивы:
MoveTo(x,y) - передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).
LineTo(x,y) - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).
Line(x1,y1,x2,y2) - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).
Задача 2.
Напишите программу, которая имеет 3 процедуры для рисования трех фигур: прямоугольника, окружности и треугольника. Пользователь должен ввести комбинацию трех целых положительных чисел. Если число равно 0, то данная фигура не рисуется, если не 0, то выводится на экран фигура, для которой данное число определяет линейный размер.
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).
Создайте на экране следующие фигуры:
Напишите программку рисования домика, где ширина домика вводится с клавиатуры.
Для рисования используйте следующие графические примитивы:
MoveTo(x,y) - передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).
LineTo(x,y) - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).
Line(x1,y1,x2,y2) - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).
Задача 2.
Напишите программу, которая имеет 3 процедуры для рисования трех фигур: прямоугольника, окружности и треугольника. Пользователь должен ввести комбинацию трех целых положительных чисел. Если число равно 0, то данная фигура не рисуется, если не 0, то выводится на экран фигура, для которой данное число определяет линейный размер.
2. Графические примитивы для рисования кривых
Ellipse(x1,y1,x2,y2) - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).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).
Создайте на экране следующие фигуры:
- эллипсы (сжатый по оси ОХ и по оси ОУ);
- дуги: в половину окружности, четверть окружности;
- сектора: половина круга, десятая часть круга;
- сегмент, ограничивающий треть окружности.
понедельник, 11 февраля 2013 г.
Графика в PABC
1. Модуль GraphABC
Графика в Паскале создаются при помощи модуля GraphABC, который подключается в начале программы:Uses GraphABC;
Система координат выглядит следующим образом:
SetWindowHeight(h); - Устанавливает высоту графического окна
SetWindowWidth(w); - Устанавливает ширину графического окна
ClearWindow; - очищает графическое окно белым цветом.
ClearWindow(color); - очищает графическое окно указанным цветом.
2. Задание цвета
Стандартные цвета задаются символическими константами:
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный
Цвет также можно задать с помощью палитры RGB для это за место color пишется rgb(r,g,b): где r,b,g - числа от 0 до 255
Задание для самостоятельного решения.Напишите программу, которая задает окно 200х100 пиксел и закрашивает его по очереди в любые пять цветов. Имейте ввиду, что это закрашивание происходит мгновенно и надо придумать задержку для того, что бы увидеть все пять окрашиваний.
3. Прямоугольник, овал, заливка
Rectangle(x1,y1,x2,y2) - рисует контур прямоугольника со сторонами параллельными сторонам экрана. Точки с координатами (x1, y1) и (x2, y2) определяют диагональные вершины прямоугольника.
Circle(x,y, radius) - рисует окружность с центром в точке с координатами (x,y) и радиусом radius.
FloodFill(x,y,color) - заливает область одного цвета цветом color, начиная с точки (x,y).
SetPenWidth(w) - устанавливает ширину пера, равную w пикселам.
Пример программы, рисующей пирамидку:SetPenWidth(w) - устанавливает ширину пера, равную w пикселам.
Uses GraphABC;
begin
SetWindowHeight(400);
SetWindowWidth(500);
ClearWindow(clSilver );
SetPenWidth(10);
Rectangle(100,400,400,300);
FloodFill(150,350,clRed);
Rectangle(150,300,350,200);
FloodFill(170,280,clYellow);
Rectangle(200,200,300,100);
FloodFill(220,180,clLime);
end.
понедельник, 4 февраля 2013 г.
Процедуры (продолжение)
1. Выполните без использования компьютера
1) Выполните алгоритм для следующих входных данных:
- 2 5 10
- 5 10 2
- 10 5 2
Расскажите, что делает данная программа.
program Test1;
var a,b,c,m:real;
procedure fun(x1,x2:real;var max:real);
begin
if x1>x2 then max:=x1 else max:=x2;
end;
begin
readln(a,b,c);
fun(a,b,m);
writeln(m);
fun(m,c,m);
writeln(m);
end.
2) Напишите программу поиска минимального из пяти чисел.
2. Решение задач
Вместе: proc9.Самостоятельно: proc8; proc12; proc15.
понедельник, 28 января 2013 г.
Процедуры
1. Процедуры в Паскале
Структура описания процедур похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур.
Формат описания процедуры имеет вид:
procedure имя процедуры (формальные параметры);
раздел описаний процедуры
begin
исполняемая часть процедуры
end;
Формальные параметры в заголовке процедур и функций записываются в виде:
var имя параметра: имя типа
и отделяются друг от друга точкой с запятой (служебное слово var может отсутствовать, об этом см. ниже). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. Список формальных параметров может отсутствовать.
Вызов процедуры производится оператором, имеющим следующий формат:
var имя параметра: имя типа
и отделяются друг от друга точкой с запятой (служебное слово var может отсутствовать, об этом см. ниже). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. Список формальных параметров может отсутствовать.
Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров);
Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
Пример программы с использованием процедуры поиска максимума из двух целых чисел.
var x,y,m,n: integer;
procedure MaxNumber(a,b: integer; var max: integer);
begin
if a>b then max:=a else max:=b;
end;
begin
write('Введите x,y ');
readln(x,y);
MaxNumber(x,y,m);
MaxNumber(2,x+y,n);
writeln('m=',m,'n=',n);
end.
Вместе: proc6, самостоятельно (или вместе) proc7.
Пример программы с использованием процедуры поиска максимума из двух целых чисел.
var x,y,m,n: integer;
procedure MaxNumber(a,b: integer; var max: integer);
begin
if a>b then max:=a else max:=b;
end;
begin
write('Введите x,y ');
readln(x,y);
MaxNumber(x,y,m);
MaxNumber(2,x+y,n);
writeln('m=',m,'n=',n);
end.
2. Передача параметров
Передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры перед ними ставится служебное слово var.
При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке (var). Практически это сводится к расстановке в заголовке процедуры описателя var при всех параметрах, которые обозначают результат работы подпрограммы.
3. Решение задач
Вместе: proc3 (стр. 36), самостоятельно proc4.Вместе: proc6, самостоятельно (или вместе) proc7.
понедельник, 21 января 2013 г.
Цикл while (продолжение)
1. Выполните задание без компьютера
Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
begin
s:=5;
k:=0;
while k < 9 do begin
k:=k+2;
s:=s+k;
end;
write(s);
end.
2. Программируем
Добавим для использования еще один тип данных.
Тип boolean (логический). Переменные и константы логического типа занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными константами True (истина) и False (ложь).
Решаем вместе задачу while22.
Перед решение задачи выполните упражнения:
- разложите число на простые множители: 55, 350, 47.
- определите, является ли число простым: 53, 91.
Решаем вместе задачу while23.
Описание алгоритма нахождения НОД делением
- Большее число делим на меньшее.
- Если делится без остатка, то меньшее число и есть НОД (следует выйти из цикла).
- Если есть остаток, то большее число заменяем на остаток от деления.
- Переходим к пункту 1.
Перед решение задачи выполните упражнения:
- найдите вручную НОД (42,66), НОД (55,12), НОД (350,35).
Самостоятельно напишите программу для поиска НОД вычитанием по следующему алгоритму:
- Из большего числа вычитаем меньшее.
- Если получается 0, то значит, что числа равны друг другу и являются НОД (следует выйти из цикла).
- Если результат вычитания не равен 0, то большее число заменяем на результат вычитания.
- Переходим к пункту 1.
Задание В2 ЕГЭ по информатике за 2011 год:
вторник, 15 января 2013 г.
Цикл с предусловием (while)
1. Структура цикла while
Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.
Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.
2. Решение задач
Вместе while1, самостоятельно while2.Вместе while5, самостоятельно while11.
Вместе while17, самостоятельно while18.
Подписаться на:
Сообщения (Atom)