Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Нахождение индекса в массиве случайных чисел



Цель работы - создать программу, которая находит индекс числа в массиве случайных чисел.

Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: Button, Edit, Label.

3. Выполнить следующие действия:

Таблица 22.

Выделенный объект Вкладка окна Object Inspector Имя свойства/ имя события Действие
Form1 Properties Caption Установка имени формы «Новый проект»
Events OnCreate Очистить значения свойств Text текстовых полей
Button1   Properties Caption Введите название «Очистить»
Events Onclick Очистить значения свойств Text текстовых полей
Button2 Properties Caption Введите название «Закрыть»
Events Onclick Обработка события закрытия формы
Button3   Properties Caption Введите название «Найти первый индекс»
Events Onclick Обработка события нахождения индекса введенного числа
Button4 Properties Caption Введите название «Ввести случайным образом»
Events Onclick Ввод массива случайным образом
Edit1 Properties Caption Очистить значение свойства Text
Edit2 Properties Caption Очистить значение свойства Text
Edit3 Properties Caption Очистить значение свойства Text

 

4. Введите переменные ik, k, i: integer; s: string; a: array [1..15] of integer.

5. Сохраните проект, запустите и протестируйте его.

Листинг программы

procedure Tform1.FormCreate(Sender: Tobject);

Begin

Edit1.Text: = ‘’;

Edit2.Text: = ‘’;

Edit3.Text: = ‘’;

end;

procedure Tform1.Button1Click(Sender: Tobject);

Begin

Edit1.Text: = ‘’;

Edit2.Text: = ‘’;

Edit3.Text: = ‘’;

end;

procedure Tform1.Button2Click(Sender: Tobject);

Begin

close;

end;

procedure Tform1.Button3Click(Sender: Tobject);

Begin

k: = StrToInt (Edit2.Text);

For i: = 1 to 15 do

if k = a[i] then ik: = i;

if ik = 0 then Edit3.Text: = ‘number ubsent’

else Edit3.Text: = IntToStr (ik);

end;

procedure Tform1.Button4Click(Sender: Tobject);

Begin

randomize;

s: = ‘’;

For i: = 1 to 15 do

Begin

a[i]: = random (26);

s: = concat (s, IntToStr (a[i]), #32);

end;

Edit1.Text: = s;

end;

end.

Вид проекта по действиям:

 
 

Практическая работа № 23

Находение минимального и максимального числа в массиве

Цель работы - создать программу, которая находит минимальное и максимальное числа в введенном массиве.

Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: Button, Edit, Label.

3. Выполнить следующие действия:

 

Таблица 23.

Выделенный объект Вкладка окна Object Inspector Имя свойства/ имя события Действие
Form1 Properties Caption Установка имени формы «Поиск»
Events OnCreate Очистить значения свойств Text текстовых полей
Button1   Properties Caption Введите название «Очистить»
Events Onclick Очистить значения свойств Text текстовых полей
Button2 Properties Caption Введите название «Закрыть»
Events Onclick Обработка события закрытия формы
Button3   Properties Caption Введите название «Поиск»
Events Onclick Обработка события нахождения минимального и максимального чисел во введенном массиве
Edit1 Properties Caption Очистить значение свойства Text
Edit2 Properties Caption Очистить значение свойства Text
Edit3 Properties Caption Очистить значение свойства Text

 

4. Введите переменные

s, ss: string; a: array [1..15] of integer; I, j, k, max, min, p, code: integer.

5. Сохраните проект, запустите и протестируйте его.

Листинг подпрограмм

procedure Tform1.FormCreate(Sender: Tobject);

Begin

Edit1.Text: = ‘’;

Edit2.Text: = ‘’;

Edit3.Text: = ‘’;

end;

 

procedure Tform1.Button1Click(Sender: Tobject);

Begin

Edit1.Text: = ‘’;

Edit2.Text: = ‘’;

Edit3.Text: = ‘’;

end;

 

procedure Tform1.Button2Click(Sender: Tobject);

Begin

close;

end;

 

procedure Tform1.Button3Click(Sender: Tobject);

Begin

s: =Edit1.Text;

s: = concat (s, #32);

i: = 0;

while Length (s) > 0 do

Begin

i: = i+1;

p: = pos (#32, s);

ss: = copy (s, 1, p-1);

Val (ss, k, code);

a[i]: = k;

delete (s, 1, p);

end;

max: = a[1];

For j: = 1 to i do

if max < a[j] then max: = a[j];

min: = a[1];

For j: = 1 to i do

if min > a[j] then min: = a[j];

Edit3.Text: = IntToStr (max);

Edit2.Text: = IntToStr (min);

end;

 

 
 

 

Практическая работа № 24

«Текущее время и текущая дата»

Цель работы - создать программу, которая выводит текущее время и текущую дату.

Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: Button, Edit, Label.

3. Выполнить следующие действия:

Таблица 24.

Выделенный объект Вкладка окна Object Inspector Имя свойства/ имя события Действие
Form1 Properties Caption Установка имени формы «Таймер»
Button1   Properties Caption Введите название «Текущее время»
Events Onclick DateTime: =Time; Edit1.Text: =TimeToStr(DateTime);
Button2 Properties Caption Введите название «Текущая дата»
Events Onclick Edit2.Text: =DateToStr(Date);
Edit1 Properties Caption Очистить значение свойства Text
Edit2 Properties Caption Очистить значение свойства Text

 

 

 

 
 
Рис. 47.


Листинг подпрограмм

Var

DateTime: TdateTime;

 

procedure Tform1.Button1Click(Sender: Tobject);

Begin

DateTime: =Time;

Edit1.Text: =TimeToStr(DateTime);

end;

 

procedure Tform1.Button2Click(Sender: Tobject);

Begin

Edit2.Text: =DateToStr(Date);

end;

end.


Практическая работа № 25

«Электронные часы»

Цель работы - написать программу «Электронные часы», в окне которой отображается текущее время, дата и день недели.

 
 

 


Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: Label, Timer.

3. Выполнить следующие действия:

3.1. Ввести константы, отвечающие за названия дней недели и месяцев.

3.2. Объявить процедуру ShowTime вручную для доступа к компонентам формы напрямую.

3.3. Процедура ShowTime отображает текущее время.

3.4. Процедура FormTime обрабатывает событие Paint.

3.5. Процедура Timer1Timer обрабатывает сигнал таймера.

3.6. Процедура FormCreate обрабатывает событие OnCreate.

 

Листинг программы:

 

unit Unit1;

 

Interface

 

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

 

Type

TForm1 = class(TForm)

Timer1: TTimer;

Label1: TLabel; // время

Label2: TLabel; // дата и день недели

procedure Timer1Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure ShowTime;

private

{ Private declarations }

public

{ Public declarations }

end;

 

Var

Form1: TForm1;

 

Implementation

Const

stDay: array [1..7] of string [11] =

('воскресенье', 'понедельник', 'вторник',

'среда', 'четверг', 'пятница', 'суббота');

 

stMonth: array [1..12] of string [8] =

('января', 'февраля', 'марта',

'апреля', 'мая', 'июня', 'июля',

'августа', 'сентября', 'октября',

'ноября', 'декабря');

 

{$R *.dfm}

procedure TForm1.ShowTime;

var Time: TDateTime; // текущее время

Begin

Time: = Now(); // получить системное время

Label1.Caption: = FormatDateTime('hh: mm: ss', Time);

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

Begin

ShowTime; // отобразить время

end;

 

procedure TForm1.FormCreate(Sender: TObject);

Var

Present: TDateTime; // текущая дата и время

Year, Month, Day: Word; // год, месяц и число, как

// отдельные числа

Begin

Present: = Now; // получить текущую дату

DecodeDate(Present, Year, Month, Day);

Label2.Caption: = 'Сегодня '+IntToStr(Day)+ ' ' +

stMonth[Month] + ' '+ IntToStr(Year)+

' года, '+ stDay[DayOfWeek(Present)];

 

// настроить и запустить таймер

Timer1.Interval: = 1000; // период сигналов таймера 1 с

Timer1.Enabled: = True; // пуск таймера

end;

 

procedure TForm1.FormPaint(Sender: TObject);

Begin

ShowTime; // отобразить часы

end;

 

end.

 

 


Практическая работа № 26

Графика

 

Для рисования статичных рисунков используется компонент PaintBox (панель System). Этот компонент размещается на форме в виде прозрачного пунктирного квадрата, и в его пределах можно рисовать. Рисование выполняется обращением к свойству Canvas (графическая канва) этого компонента: PaintBox1.Canvas. У него в свою очередь есть свойство Pixels (PaintBox1.Canvas.Pixels), которое представляет собой матрицу, двумерный массив заданного размера - поточечный образ канвы, каждый элемент - отдельная точка. В Pixels[] отсчет точек (пикселов экрана) начинается с 0.

Координаты x, y отсчитываются от верхнего левого угла, то есть он считается точкой с координатой (0, 0), увеличение по оси x идет слева направо, а по оси y - сверху вниз. Для конкретной точки указывается цвет. Функция RGB() формирует цвет комбинацией интенсивности красного, зеленого и синего (интенсивность задается числом от 0 до 255). Например, черный - RGB(0, 0, 0), красный - rgb(255, 0, 0), синий - rgb(0, 0, 255), белый - rgb(255, 255, 255).

Цель работы - создать программу, выполняющую следующие действия:

1. Разместить на форме компонент PaintBox.

2. Заполнить доступную канву 300 красными точками в случайных позициях по нажатиям на некоторую кнопку.

3. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

4. Записать код в обработчике нажатия.

 
 


 

 

procedure TForm1.Button1Click(Sender: TObject);
var i, x, y: Integer;
begin

randomize;
for i: = 1 to 300 do
begin
x: = random(100);
y: = random(100);
PaintBox1.Canvas.Pixels[x, y]: = RGB(255, 0, 0);
end
end;

5. Изменить RGB(255, 0, 0) на RGB(random(255), random(255), random(255) ).

 

 
 

 

 


6. Заполнить фон черным цветом перед началом выполнения программы с помощью метода канвы FillRect. Метод вызывается с указанием прямоугольной области заливки цветом: FillRect(Rect(0, 0, 100, 100)) // координаты верхнего левого и правого нижнего углов

Вложенное слово Rect формирует данное типа " прямоугольник". Перед вызовом FillRect надо указать цвет заливки: PaintBox1.Canvas.Brush.Color: = RGB(0, 0, 0);

 

 
 

 


 

procedure TForm1.Button1Click(Sender: TObject);
var i, x, y: Integer;
begin

PaintBox1.Canvas.Brush.Color: = RGB(0, 0, 0);

PaintBox1.Canvas.FillRect(Rect(0, 0, 100, 100));

for i: = 1 to 300 do
begin
x: = random(100);
y: = random(100);
PaintBox1.Canvas.Pixels[x, y]: = RGB(random(255), random(255), random(255));

end
end;

7. Заполнить канву случайными разноцветными линиями разной толщины. Линия рисуется с помощью методов (сначала задается начальная точка, потом конечная):

PaintBox1.Canvas.MoveTo(10, 10);

PaintBox1.Canvas.LineTo(50, 50);

Цвет линии и толщина задаются свойством канвы Pen (карандаш). Pen.Color - цвет карандаша), Pen.Width - толщина линии в пикселах (по умолчанию - 1).

 

 
 

 


for i: = 1 to 300 do

Begin

PaintBox1.Canvas.Pen.Color: = RGB(random(255), random(255), random(255));

PaintBox1.Canvas.Pen.Width: = random(3)+1;

x: = random(100);

y: = random(100);

PaintBox1.Canvas.MoveTo(x, y);

x: = random(100);

y: = random(100);

PaintBox1.Canvas.LineTo(x, y);

End

8. Заполнить канву эллипсами случайным образом (круги, окружности - частный случай эллипса). Эллипсы рисуются методом Ellipse() с четырьмя параметрами - координатами верхнего левого и правого нижнего углов прямоугольника, в который эллипс вписывается. Кайма эллипса рисуется в соответствии с параметрами свойства Pen канвы, а заливается эллипс внутри цветом кисти Brush канвы.

 
 

 

 


 

for i: = 1 to 300 do
begin
// цвет и ширина каймы будущего эллипса
PaintBox1.Canvas.Pen.Color: = RGB(random(255), random(255), random(255));
PaintBox1.Canvas.Pen.Width: = random(3)+1;

// цвет заливки внутренности эллипса
PaintBox1.Canvas.Brush.Color: = rgb(random(255), random(255), random(255));

// координаты углов прямоугольника, в который вписывается эллипс
x: = random(150);
y: = random(150);
x2: = random(150);
y2: = random(150);

// вписываем эллипс
PaintBox1.Canvas.Ellipse(x, y, x2, y2);
end;

9. Сделать канву на весь экран. Заполнить разноцветными прямоугольниками в случайных позициях и случайных размеров с помощью FillRect().

10. Создать графический образ так называемого множества Жюлиа.

procedure TForm1.Button1Click(Sender: TObject);
var RE, IM, RE1, IM1: REAL;
V, X, Y: INTEGER;

// вывод точки заданного цвета
procedure PUTPIXEL(x, y, c: Integer);
var cc: TColor;
begin

case c mod 8 of
0: cc: =clBlack;
1: cc: =clRed;
2: cc: =clLime;
3: cc: =clYellow;
4: cc: =clBlue;
5: cc: =clFuchsia;
6: cc: =clAqua;
7: cc: =clWhite;
end;

PaintBox1.Canvas.Pixels[x, y]: = cc;
end;

procedure QWA;
begin
RE1: =RE*RE-IM*IM;

IM1: =2*RE*IM;

RE: =RE1;

IM: =IM1;
end;
procedure KUB;

Begin

RE1: =RE*(RE*RE-3*IM*IM);
IM1: =IM*(3*RE*RE-IM*IM);

RE: =RE1;

IM: =IM1;

end;

Begin
PaintBox1.Canvas.Brush.Color: = rgb(0, 0, 0);
PaintBox1.Canvas.FillRect(Rect(0, 0, 640, 480));

X: =-320;
REPEAT Y: =-240;
REPEAT V: =0; RE: =-1.+0.001*X; IM: =0+0.001*Y;
REPEAT KUB; RE: =RE+1.00003; IM: =IM+1.01828201638;
if RE*RE > 50 then break;
if IM*IM > 50 then break;
V: =V+1;
UNTIL V> 40;
if ( ABS(RE) > 10 ) or ( ABS(IM) > 1000)

Then

begin
PUTPIXEL((X+320), (Y+240), TRUNC(V));

end
else PUTPIXEL((X+320), (Y+240), 0);
Y: =Y+1;
UNTIL Y > 241;
X: =X+1;
UNTIL X> 320;
E nd;

 

 


Практическая работа № 27

«Олимпийский флаг»

Цель работы - создать программу, которая на поверхности формы рисует олимпийский флаг.

 
 

 


Листинг программы:

unit Unit1;

 

Interface

 

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs;

 

Type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

Var

Form1: TForm1;

 

Implementation

 

{$R *.dfm}

 

procedure TForm1.FormPaint(Sender: TObject);

Begin

with Canvas do

Begin

// полотнище

Canvas.Pen.Width: = 1;

Canvas.Pen.Color: = clBlack;

Canvas.Brush.Color: = clCream;

Rectangle(30, 30, 150, 115);

 

// кольца

Pen.Width: = 2;

Brush.Style: = bsClear; // область внутри круга

// не закрашивать

Pen.Color: = clBlue;

Ellipse(40, 40, 80, 80);

Pen.Color: = clBlack;

Ellipse(70, 40, 110, 80);

Pen.Color: = clRed;

Ellipse(100, 40, 140, 80);

Pen.Color: = clYellow;

Ellipse(55, 65, 95, 105);

Pen.Color: = clGreen;

Ellipse(85, 65, 125, 105);

end;

end;

 

end.

 


Практическая работа № 28

«Узоры»

Цель работы - создать программу, выполняющую следующие действия без участия пользователя:

1. После запуска программы в окне изображаются рисунки, созданные самой программой по заранее заданным правилам.

2. Картинка обновляется «сама собой». Интервал таймера может быть любым. Он зависит от компьютера, на котором работает программа.

3. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

 
 

 

 


Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: область рисования PaintBox, таймер Timer.

3. Область рисования представить в виде клеток (точек или пикселов). Каждая клетка покрашена в свой цвет. В ходе программы цвета меняются.

4. Описать предварительно константы в окне кода пред ключевым словом:

Const size = 40;

csize = 12;

Colors: array [1..16] of TColor =

(clRed, clGreen, clYellow, clBlue, clWhite, clGray, clFuchsia, clTeal,

clNavy, clMaroon, clLime, clOlive, clPurple, clSilver, clAqua, clBlack);

Константа size задает число клеточек по каждому направлению, константа csize – число используемых цветов. Массив Colors (константа) определяет цвета.

В разделе описаний после ключевого слова var описывается массив клеток

Points: array[1..size, 1..size] of Integer;

5. Выполнить следующие действия:

 

Таблица 25.

Выделенный объект Вкладка окна Object Inspector Имя свойства/ имя события Действие
Form1 Properties Caption Установка имени формы «Узор»
Events OnCreate В процедуре обеспечить неповторимость случайных чисел с помощью процедуры Randomize. Провести инициализацию массива пикселов.
PaintBox1 (Вкладка System) Properties Height Задать значение 320
Width Задать значение 320

 

Продолжение таблицы 25.
Выделенный объект Вкладка окна Object Inspector Имя свойства/ имя события Действие
    Canvas Свойства и методы этого свойства обеспечивают рисование. Метод Rectangle рисует прямоугольник с заданными вершинами. Цвет контура задается свойством Pen.Color, а цвет закраски – свойством Brush.Color.
Timer1 (Вкладка System) Properties Interval Задать значение 100 (одна десятая секунды)
Events OnTimer В созданной процедуре-заготовке Timer1Timer описать переменные c (color), up (up), d (down), l (left), r (right). Новые значения цветов записываются в отдельном массиве NewPoints. Написать правила, по которым будут меняться цвета.

 

6. Сохраните проект, запустите и протестируйте его.

Листинг подпрограммы

procedure TForm1.FormCreate (Sender: TObject);

var i, j: Integer;

Begin

Randomize;

for i: = 1 to size do {инициализация массива пикселов}

for i: = 1 to size do

Points[i, j]: = 1 + Random (csize); {Минимально возможное значение элемента массива равно 1}

end;

procedure TForm1.Timer1Timer (Sender: TObject);

var i, j: Integer;

c, l, r, u, d: Integer;

newPoints: array [1..size, 1..size] of Integer;

Begin

{Вычислить, какого цвета будет клетка на следующем шаге}

for i: = 1 to size do

for j: = 1 to size do

Begin

c: = Points[i, j] + 1; {Вычисляется «следующий цвет» и запоминается в переменной с}

if c > csize then c: = 1; {После последнего цвета идет первый}

{Вычисляются индексы для клеток, примыкающих к данной сверху, снизу, слева и справа. Края узора как бы «склеены» друг с другом}

u: = i – 1;

if u = 0 then u: = size;

d: = i + 1;

if d > size then d: = 1;

l: = j – 1;

if l = 0 then l: = size;

r: = j + 1;

if r > size then r: = 1;

newPoints [i, j]: = Points [i, j]; {Если среди «соседей» цвет отсутствует, то клетка остается без изменений}

{Если хотя бы один из «соседей» имеет такой цвет, клетка перекрашивается}

if (Points [u, j] = c) or (Points [d, j] = c) or (Points [i, l] = c) or (Points [i, r] = c)

then newPoints [i, j]: = c;

end;

c: = 320 div size; {Выбирается размер клетки так, чтобы узор занимал, по возможности, всю область рисования}

{Обновляется узор на экране}

for i: = 1 to size do

for j: = 1 to size do

Begin

Points [i, j]: = newPoints [i, j];

{Настроить цвет контура прямоугольника и цвет закраски}

PaintBox1.Canvas.Pen.Color: = Colors[Points[i, j]];

PaintBox1.Canvas.Brush.Color: = Colors[Points[i, j]];

{Выполнить рисование}

PaintBox1.Canvas.Rectangle (c*(i - 1), c*(j - 1), c*i – 1, c*j – 1);

{Параметры метода Rectangle подобраны так, чтобы между клетками оставался небольшой зазор. Чтобы клетки располагались вплотную друг к другу, заменить (c*(i - 1), c*(j - 1), c*i – 1, c*j – 1) на (c*(i - 1), c*(j - 1), c*i, c*j }

end;

end;


Практическая работа № 29

Перемещение рисунка

Цель работы - создать программу, в которой на поверхности окна перемещается случайным образом изображение веселой рожицы. Пользователь должен сделать щелчок кнопкой мыши по изображению. Программа должна завершить работу после того, как пользователь сделает 10 щелчков кнопкой мыши.

Начало игры осуществляется по нажатию на кнопку Ok.

Свойство WordWrap компонента Label – признак того, что слова, которые не помещаются в текущей строке, автоматически переносятся на следующую строку (значение свойства AutoSize должно быть False).

 
 

 

 


Листинг программы:

 

unit Unit1;

 

Interface

 

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

 

Type

TForm1 = class(TForm)

Timer: TTimer;

Label1: TLabel;

Button1: TButton;

procedure TimerTimer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

 

{ объявление процедур помещено сюда,

чтобы процедуры имели прямой доступ

к форме, на которой они рисуют}

 

procedure PaintFace (x, y: integer); {рисует рожицу}

procedure EraseFace(x, y: integer); {стирает рожицу}

end;

 

Var

Form1: TForm1;

fx, fy: integer; { координаты рожицы}

n: integer; { количество щелчков кнопкой мыши}

p: integer; { количество попаданий}

Implementation

 

{ рисует рожицу}

procedure TForm1.PaintFace(x, y: integer);

Begin

Canvas.Pen.Color: = clBlack; { цвет линий}

Canvas.Brush.Color: = clRed; { цвет закраски}

{ рисуем рожицу}

Canvas.Ellipse(x, y, x+30, Y+30); { лицо}

Canvas.Ellipse(x+9, y+10, x+11, y+13); { левый глаз}

Canvas.Ellipse(x+19, y+10, x+21, y+13); { правый глаз}

Canvas.Arc(x+4, y+4, x+26, y+26, x, y+20, x+30, y+20); {улыбка}

end;

 

{ стирает рожицу}

procedure TForm1.EraseFace(x, y: integer);

Begin

{ зададим цвет границы и цвет закраски, совпадающий с цветом формы.}

{ По умолчанию цвет формы - clBtnFace }

Canvas.Pen.Color: = clBtnFace; { цвет окружности}

Canvas.Brush.Color: = clBtnFace; { цвет закраски}

Canvas.Ellipse(x, y, x+30, y+30);

end;

 

{$R *.dfm}

 

procedure TForm1.TimerTimer(Sender: TObject);

Begin

EraseFace(fx, fy);

{ новое положение рожицы}

fx: = Random(ClientWidth-30); { 30 - это диаметр рожицы}

fy: = Random(ClientHeight-30);

PaintFace(fx, fy);

end;

 

procedure TForm1.FormCreate(Sender: TObject);

Begin

{ исходное положение рожицы}

fx: =100;

fy: =100;

Randomize; { инициализация генератора случайных чисел}

end;

 

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

Begin

inc(n); { кол-во щелчков}

 

if (x > fx) and (x < fx+30) and (y > fy) and (y < fy+30)

Then begin

{ щелчок по рожице}

inc(p);

end;

if n = 10 then

Begin

{ игра закончена}

Timer.Enabled: = False; { остановить таймер}

ShowMessage('Щелчков: 10. Попаданий: ' + IntToStr(p)+'.');

EraseFace(fx, fy);

Label1.Visible: = True;

Button1.Visible: = True;

{ теперь кнопка и сообщение снова видны}

end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

Begin

Label1.Visible: = False; { скрыть сообщение}

Button1.Visible: = False; { скрыть кнопку}

Timer.Enabled: = True; { пуск таймера}

end;

 

end.

 

 


Практическая работа № 30

Рисунок

Цель работы - создать программу, выводящую на форму приведенный ниже рисунок. По нажатию на клавишу «Лучи» происходит смена направления лучей. Изменить программу так, чтобы лучи изменяли направления без нажатия клавиши.

 
 

 


1. Добавьте в форму компоненты Image и Button.

2. Создайте обработчик события нажатия. Важнейшим свойством компонента Image является свойство Canvas: TCanvas (холст). Это свойство само является объектом. У Canvas есть методы и свойства. Это свойства и методы рисования на холсте.

· Pen: Tpen (перо): рисование линий, границ фигур и т.п. производится пером. Важнейшие свойства пера – Color: Tcolor (цвет), Width: Integer (ширина), Style: TpenStyle (стиль).

· Brush: Tbrush (кисть): закраска фигур, заднего фона надписей и т.п. производится кистью. Важнейшие свойства кисти – Color: Tcolor (цвет), Style: TbrushStyle (стиль).

· Font: Tfont (шрифт): надписи на холсте выполняются с учетом значений его свойства Font. При этом задний фон за надписью закрашивается текущим значением кисти. Для того чтобы закраски не было, нужно установить прозрачный стиль кисти: Brush.Style: = bsClear, но затем не забудьте сделать кисть непрозрачной: Brush.Style: = bsSolid, иначе фигуры, которые вы будете в дальнейшем рисовать, тоже окажутся незакрашенными. Важнейшие свойства шрифта – Name: string (имя), Size: Integer (размер), Color: Tcolor (цвет). Вы также использовали два метода холста:

· Rectangle (X1, Y1, X2, Y2: Integer) (прямоугольник): рисует прямоугольник, закрашивая его кистью и обводя пером (в нашем случае, для того чтобы рамки не было видно, мы сделали цвет кисти и пера одинаковым). В качестве параметров задаются координаты верхнего левого X1, Y1 и нижнего правого X2, Y2 углов относительно верхнего левого угла холста.

· TextOut (X, Y: Integer; const Text: string) (вывести текст): рисует текст согласно заданному шрифту и закрашивая задний фон согласно заданной кисти (в нашем случае эта закраска незаметна, поскольку текст рисуется на том же фоне, что и текущее значение кисти). В качестве параметров задаются координаты верхнего левого угла текста X, Y относительно верхнего левого угла холста и текст надписи Text.

3. Нарисуйте градиентно закрашенное синее небо отдельными линиями, каждую следующую линию рисуя более светлой. Таким образом, рисование выполняется в цикле. Необходимо определить локальную переменную. В цикле меняются значения цветов, устанавливается перо в точку и чертится линия из этой точки в другую.

· MoveTo(X, Y: Integer) (передвинуть перо): передвигает позицию пера в точку холста в координаты X, Y. При этом на холсте ничего не рисуется;

· LineTo (X, Y: Integer) (чертить линию): чертит линию из точки, в которой находилось перо, в точку X, Y, используя текущее перо. При этом перо тоже перемещается в эту точку.

Местоположение пера хранится в свойстве холста PenPos: Tpoint. Запись в эту переменную полностью эквивалентна вызову метода MoveTo. Цвет можно задавать, используя константы цвета clBlack, clNavy, clGreen и т.д. – полный список констант находится в выпадающем списке свойства Color в Инспекторе Объектов. Цвет также можно задать, используя функцию RGB (Red, Green, Blue: byte), в параметрах Red, Green и Blue указываются значения интенсивности красной, зеленой и синей компоненты цвета (от 0 до 255 каждая).

4. Добавить на небо солнце. Нарисовать эллипс с линиями-лучами. Лучи нарисовать случайным образом, для этого необходимо использовать генератор случайных чисел.

· Круги и эллипсы рисуются с помощью метода холста Ellipse (X1, Y1, X2, Y2: Integer). Как и прямоугольник, эллипс закрашивается текущей кистью и обводится текущим пером. В качестве параметров X1, Y1, X2, Y2 необходимо указать левый верхний и нижний правый углы прямоугольника, в который «вписан» эллипс. Если Y2 – Y1 = X2 – X1 (то есть прямоугольник является квадратом), эллипс рисуется как круг.

· Датчик случайных чисел – функция random выдает число типа double в диапазоне от 0 до 1.

5. Нарисовать облака. Можно воспользоваться картинкой из файла. Нарисовать в стандартном редакторе Paint облако: а) установить атрибуты картинки – ширина 100, высота 50; б) закрасить картинку черным цветом – этот цвет в программе будет прозрачным; в) нарисовать облако, используя инструмент Распылитель и различные оттенки серого; г) проследите, чтобы левая нижняя точка картинки осталась черной (именно по этой точке автоматически определяется прозрачный цвет).

6. Сохранить картинку в файл.

7. Добавить в форму еще один Image, щелкнуть по нему мышкой и загрузить в него картинку. Сделать его прозрачным можно, установив свойство Transparent. Поскольку он вспомогательный, лучше, чтобы он не был виден во время работы программы, поэтому отключите ему свойство Visible.

8. Добавить компонент Timer. Установите его интервал 100.

9. На вкладке событий Инспектора Объектов напротив события OnTimer в выпадающем списке выберите имя обработчика события Button1Click. Таким образом устанавливается уже существующий обработчик для еще одного события.

10. В программе каждые сто миллисекунд будет вызываться событие и происходить перерисовка картинки, как если бы мы нажимали каждый раз кнопку. Замедлить интервал между перерисовкой картинки можно, увеличив интервал таймера.

11. При рисовании часто требуется использовать более сложные объекты, чем просто комбинации линий прямоугольников и эллипсов. Может возникнуть необходимость использования готового растрового изображения. Кроме того, может понадобиться копирование изображения из одного Image на другой. Для этого используется метод холста Draw (X, Y: Integer; Graphic: Tgraphic). Этот метод практически копирует графический объект на холст в область с координатами верхнего левого угла X, Y. Графическим объектом Graphic могут быть битовые картинки, иконки и метафайлы. Для нас важным является его применение к копированию картинок из одного Image в другой. Это делается следующим образом:

ImageA.Canvas.Draw(X, Y, ImageB.Picture.Bitmap)

При этом все, что нарисовано на ImageB, будет скопировано на ImageA. Если ImageB.Transparent = true, то картинка копируется с прозрачным фоном.

Вместо ImageA и ImageB соответственно подставьте нужные вам имена компонентов, фигурирующие в вашей программе:

Image1.Canvas.Draw(130 + random(2), 20 + random(2), Image2.Picture.Bitmap);
Image1.Canvas.Draw(100 + random(2), 50 + random(2), Image2.Picture.Bitmap);
Image1.Canvas.Draw(170 + random(2), 80 + random(2), Image2.Picture.Bitmap);

Таким образом, для рисования можно использовать любые картинки из файла – облака, домики, персонажей, логотипы и т.п.

 

Листинг программы

procedure Tform1.Button1Click(Sender: Tobject);

var i: integer;

Begin

Image1.Canvas.Pen.Color: = clGreen;

Image1.Canvas.Brush.Color: = clGreen;

Image1.Canvas.Rectangle(0, 200, 300, 300);

Image1.Canvas.Font.Color: = clWhite;

Image1.Canvas.Font.Size: = 30;

Image1.Canvas.Font.Name: = ‘Arial’;

Image1.Canvas.TextOut(10, 250, ‘Delphi’);

for i: = 0 to 200 do

Begin

Image1.Canvas.Pen.Color: = RGB(I, I, 255);

Image1.Canvas.MoveTo(0, i);

Image1.Canvas.LineTo(300, i);

end;

Image1.Canvas.Pen.Color: = clRed;

Image1.Canvas.Brush.Color: = clYellow;

Image1.Canvas.Ellipse(20, 20, 60, 60);

Image1.Canvas.Pen.Color: = clYellow;

for i: = 1 to 20 do

Begin

Image1.Canvas.MoveTo(40, 40);

Image1.Canvas.LineTo(5 + random(70), 5 + random(70));

end;

end;

end.


Практическая работа № 31

Построение графика

Цель работы - cоздать программу построения графика, в которой устанавливается масштаб, в цикле осуществляется построение графика функции, рисуются оси координат и печатаются на них числовые шкалы.

 
 

 

 


Описание плана разработки программы

1. Открыть новый проект.

2. Разместить на форме экземпляры компонентов: кнопка Button, область рисования PaintBox.

3. Выполнить следующие действия:

 

Таблица 26.

Выделенный объект Вкладка окна Object Inspector Имя свойства/ имя события Действие
Form1 Properties Caption Установка имени формы «График функции»
Button1   Properties Caption Введите название «График»
Events Onclick Написать процедуру, рисующую график по точкам
PaintBox1 Properties Canvas Соединение линиями получаемых точек
Button2 Properties Caption Введите название «Выход»
Events Onclick Close;

 

4. Сохраните проект, запустите и протестируйте его.

Листинг программы

procedure TForm1.Button1Click(Sender: Tobject);

 

function f(x: integer): integer;

var c: integer;

Begin

c: =round(10*sin(0.1*x));

f: =c;

end;

 

var x: integer;

Begin

PaintBox1.Canvas.LineTo(0, 150);

PaintBox1.Canvas.LineTo(410, 150);

x: =0;

for x: =0 to 350 do

Begin

PaintBox1.Canvas.LineTo(x, f(x)+150);

end;

end;

 

procedure Tform1.Button2Click(Sender: Tobject);

Begin

Close;

end;

end.


Практическая работа № 32

«Градусник»

Цель работы - создать программу, которая переводит значение температуры по Цельсию в значения температуры по Фаренгейту. Введите графический объект изображения значения температуры.

1. Поместите на форму два поля ввода Edit и четыре кнопки.

 
 

 

 


Поделиться:



Последнее изменение этой страницы: 2017-05-06; Просмотров: 310; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.382 с.)
Главная | Случайная страница | Обратная связь