Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Федеральное агентство по образованию
Пермский государственный технический университет
Кафедра автоматики и телемеханики
Лабораторная работа №4
По предмету:
«Программирование и основы алгоритмизации»
Тема: «ПРИМЕНЕНИЕ ПРИНЦИПОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ»
Выполнил ст. гр. ТК-11-1бзу
Бурылов С.В.
Проверил: доцент кафедры АТ
Кавалеров М.В.
Пермь 2012
Цель работы: получение навыков применения принципов объектно-ориентированного программирования.
Программа должна представлять собой графическую заставку по аналогии с той программой, которая была рассмотрена в лекции 14. В ходе проработки лекции 14 должна быть получена программа графической заставки, в процессе выполнения которой по графическому окну случайным образом перемещаются точки и прямоугольники. Надо дополнить эту программу следующим образом. Во-первых, к имеющимся точкам и прямоугольникам надо добавить окружности. Для этого добавьте перемещение объектов «Окружность» на основе принципа наследования по аналогии с тем, как это было сделано в случае объекта «Прямоугольник». При этом для объектов «Точка», объектов «Прямоугольник» и объектов «Окружность» надо использовать один и тот же массив obj. В итоге при выполнении графической заставки по графическому окну должны перемещаться точки, прямоугольники и окружности.
Во-вторых, добавьте объект, который отображается в виде пары рядом расположенных букв: первой буквы имени и фамилии студента, выполняющего данное задание. При этом буквы должна быть нарисованы с использованием графических элементов (линии, эллипсы, дуги эллипсов), а не с помощью функции GTextXY. Буквы в паре должны располагаться на одной горизонтальной линии. Расстояния между буквами в паре не должны превышать ширину этих букв. Кроме того, размер букв пары должен случайным образом выбираться при создании соответствующего объекта. Для того, чтобы сильно не снижать быстродействие программы, рекомендуется размеры букв делать не больше, чем 30 на 30 пикселей, а также общее количество всех объектов не делать слишком большим.
Таким образом, в результате выполнения лабораторной работы должна быть реализована программа, представляющая собой графическую заставку. При ее выполнении на экране должны случайным образом перемещаться точки, прямоугольники, окружности и пары букв указанного вида.
#include <graphics.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
class cfigure {
private:
int c;
int dx, dy;
protected:
int x, y;
public:
cfigure();
void move();
virtual void draw() = 0;
};
cfigure::cfigure()
{
x = random(640);
y = random(480);
c = random(15)+1;
dx = random(10)-5;
dy = random(10)-5;
}
void cfigure::move()
{
setcolor(0);
draw();
x+=dx;
if((x>=640)|(x<0)) dx=-dx;
y+=dy;
if((y>=480)|(y<0)) dy=-dy;
setcolor(c);
draw();
}
class cpoint : public cfigure {
public:
virtual void draw();
};
void cpoint::draw()
{
putpixel(x, y, getcolor());
}
class crectangle : public cfigure {
private:
int w, h;
public:
crectangle();
virtual void draw();
};
crectangle::crectangle()
{
w = random(50);
h = random(30);
}
void crectangle::draw()
{
rectangle(x-w/2, y-h/2, x+w/2, y+h/2);
}
class ccircle : public cfigure {
private:
int r;
public:
ccircle();
virtual void draw();
};
ccircle::ccircle()
{
r = random(20);
}
void ccircle::draw()
{
circle(x, y, r);
}
class cletters: public cfigure {
private:
float k;
public:
cletters();
virtual void draw();
};
cletters::cletters()
{
k = random(20)/10.0 + 1.0;
}
void cletters::draw()
{
line(x, y, x, y+30*k);
line(x, y, x + 20*k, y);
arc(x+8*k, y+20*k, 230, 135, 10*k);
ellipse(x+40*k, y+15*k, 45, 315, 10*k, 15*k);
}
int main(int argc, char* argv[])
{
time_t t;
time(&t);
srand((unsigned) time(&t));
srand(random(RAND_MAX));
int driver = VGA;
int mode = VGAHI;
initgraph(&driver, &mode, "");
cfigure* obj[100];
int i;
for (i=0;i<100;i++) {
switch(random(4)) {
case 0: obj[i] = new cpoint; break;
case 1: obj[i] = new crectangle; break;
case 2: obj[i] = new ccircle; break;
case 3: obj[i] = new cletters; break;
}
}
while (!kbhit()) {
for (i=0;i<100;i++) {
obj[i]->move();
}
delay(100);
}
for (i=0;i<100;i++) delete obj[i];
closegraph();
return 0;
}