Міністерство науки і освіти України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
кафедра програмного забезпечення
Звіт з лабораторної роботи №7
з дисципліни “Об’єктно-орієнтоване програмування ”
Тема: Наслідуванням класів з використанням віртуальних функцій
Завдання
Створити об’єкти для роботи з класами згідно завдання, використовуючи наслідування, абстрактні класи, віртуальні функції. Роботу з похідними об’єктами здійснювати через вказівник типу базового класу.
Варіанти
Робота з плоскими фігурами: трикутник, квадрат, коло.
Для даних об’єктів, базовим класом являється клас “ плоска фігура ”.
Необхідно використати віртуальні функції для обчислення площ і визначення належності точок фігурам.
Необхідно ввести N точок Pi(x, y), N>= 3
Вивести назви і площі фігур, яким належать введені точки Pi(x, y)
Відсортувати фігури в порядку спадання значень їх площ.
Текст програми
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
class Fihyru
{
public:
virtual double square(int,int,int,int,int,int,int,int){return 0;}
void sort(double Spr,double Str,double Sel);
};
class Priamokytnuk :public Fihyru
{
public:
int x1,x2,x3,y1,y2,y3;
double Spr;
double square(int x1,int x2,int x3,int y1,int y2,int y3,int,int);
};
class Trukytnuk :public Fihyru
{
public:
int x1,x2,x3,y1,y2,y3;
double Str;
double square(int x1,int x2,int x3,int y1,int y2,int y3,int,int);
};
class Elips:public Fihyru
{
public:
int x1,x2,x3,x4,y1,y2,y3,y4;
double Sel;
double square(int x1,int x2,int x3,int x4,int y1,int y2,int y3,int y4);
};
double Priamokytnuk::square(int x1,int x2,int x3,int y1,int y2,int y3,int,int)
{
double Sa,Sb,S;
Sa=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
Sb=sqrt(pow((x2-x3),2)+pow((y2-y3),2));
S=Sa*Sb;
return S;
}
double Trukytnuk::square(int x1,int x2,int x3,int y1,int y2,int y3,int,int)
{
double Sa,Sb,Sc,ppr,S;
Sa=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
Sb=sqrt(pow((x2-x3),2)+pow((y2-y3),2));
Sc=sqrt(pow((x1-x3),2)+pow((y1-y3),2));
ppr=(Sa+Sb+Sc)/2;
S=sqrt(ppr*(ppr-Sa)*(ppr-Sb)*(ppr-Sc));
return S;
}
double Elips::square(int x1,int x2,int x3,int x4,int y1,int y2,int y3,int y4)
{
double S,Sb,Sa;
Sa=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
Sb=sqrt(pow((x3-x4),2)+pow((y3-y4),2));
S=3.14*sqrt(pow(Sa,2)+pow(Sb,2))/2;
return S;
}
void Fihyru::sort(double Spr,double Str,double Sel)
{
if((Spr>=Str)&&(Spr>=Sel))
{
Form1->Label1->Caption=Form1->Label1->Caption+"Прямокутник S="+FloatToStr(Spr);
if(Str>=Sel)
{
Form1->Label2->Caption=Form1->Label2->Caption+"Трикутник S="+FloatToStr(Str);
Form1->Label3->Caption=Form1->Label3->Caption+"Еліпс S="+FloatToStr(Sel);
}
else
{
Form1->Label2->Caption=Form1->Label2->Caption+"Еліпс S="+FloatToStr(Sel);
Form1->Label3->Caption=Form1->Label3->Caption+"Трикутник S="+FloatToStr(Str);
}
}
else if((Str>=Spr)&&(Str>=Sel))
{
Form1->Label1->Caption=Form1->Label1->Caption+"Трикутник S="+FloatToStr(Spr);
if(Spr>=Sel)
{
Form1->Label2->Caption=Form1->Label2->Caption+"Прямокутник S="+FloatToStr(Str);
Form1->Label3->Caption=Form1->Label3->Caption+"Еліпс S="+FloatToStr(Sel);
}
else
{
Form1->Label2->Caption=Form1->Label2->Caption+"Еліпс S="+FloatToStr(Sel);
Form1->Label3->Caption=Form1->Label3->Caption+"Прямокутник S="+FloatToStr(Str);
}
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{Label4->Caption="Введіть координати точок прямокутника:";
Label5->Caption="Введіть координати точок трикутника:";
Label6->Caption="Введіть координати точок еліпса:";
Label7->Caption="Відсортoвані фігури в порядку спадання значень їх площ";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Fihyru M;
Fihyru *pP=new Priamokytnuk;
Fihyru *pT=new Trukytnuk;
Fihyru *pK=new Elips;
Priamokytnuk p;
Trukytnuk t;
Elips e;
p.x1=StrToInt(Edit1->Text);
p.y1=StrToInt(Edit2->Text);
p.x2=StrToInt(Edit3->Text);
p.y2=StrToInt(Edit4->Text);
p.x3=StrToInt(Edit5->Text);
p.y3=StrToInt(Edit6->Text);
p.Spr=pP->square(p.x1,p.x2,p.x3,p.y1,p.y2,p.y3,0,0);
t.x1=StrToInt(Edit7->Text);
t.y1=StrToInt(Edit8->Text);
t.x2=StrToInt(Edit9->Text);
t.y2=StrToInt(Edit10->Text);
t.x3=StrToInt(Edit11->Text);
t.y3=StrToInt(Edit12->Text);
t.Str=pT->square(t.x1,t.x2,t.x3,t.y1,t.y2,t.y3,0,0);
e.x1=StrToInt(Edit13->Text);
e.y1=StrToInt(Edit14->Text);
e.x2=StrToInt(Edit15->Text);
e.y2=StrToInt(Edit16->Text);
e.x3=StrToInt(Edit17->Text);
e.y3=StrToInt(Edit18->Text);
e.x4=StrToInt(Edit19->Text);
e.y4=StrToInt(Edit20->Text);
e.Sel=pK->square(e.x1,e.x2,e.x3,e.x4,e.y1,e.y2,e.y3,e.y4);
M.sort(p.Spr,t.Str,e.Sel);
}
//---------------------------------------------------------------------------
Результат виконання програми
Висновок: під час виконання лабораторної роботи ми вивчили наслідування класів з використанням віртуальних функцій