Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа 23 / MAINLIST
.CPP//File mainlist.cpp
//Naznachenie: Postroenie i ispolzovanie nabora mnogougolnikov
//Author: Pavel Morozov
//Redakcija: 2.0 13.04.07
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdio.h>
#include"cpoint.h"
#include"cpoint.cpp"
#include"CELTRNGL.h"
#include"CELTRNGL.cpp"
#include"ctriangl.h"
#include"ctriangl.cpp"
#include"cpolygon.h"
#include"cpolygon.cpp"
#include"cplist.h"
#include"cplist.cpp"
#include"celpoly.h"
#include"celpoly.cpp"
int main()
{
cout.setf(ios::fixed); // fixed format(no exp)
cout.setf(ios::showpoint); // shows zero
cout.precision(2); // 2 posle zapiatoj
clrscr();
//Vyvod zagolovka
cout<<endl
<<endl
<<"Author: Pavel Morozov Group 4351."
<<endl
<<endl
<<"Postroenie i ispolzovanie nabora mnogougolnikov,"<<endl
<<"obrazovannyh slozeniem dvuh treugolnikov,"<<endl
<<"Kazdyj iz kotoryh predstavlen linejnym odnonapravlennym spiskom."
<<endl<<endl;cout<<"Red2"<<endl;
//Objavlenie i inicializacija peremennyh
CPolyList ListPoly; //Spisok elementov(nabor mnogougolnikov)
CTriangle *FptrPoly;
CTriangle *FptrPoly2; //Ukazatel na element
CPolygon *ElemptrPoly;
CElPoly *ElList;
char ch; //Polzovatelskij element
float x0,y0,Sq,dx,dy,x2,y2,x3,y3,fi1,h1,h2;//Atributy
// CTriangle List; //Spisok elementov
CPoint *Fptr; //Ukazatel na element
CElement *Elemptr; //Ukazatel na element spiska
do{
end:
//Vvod elementov spiska
int i=0;
getch();
cout<<"Press any key";
clrscr();
cout<<endl
<<" Dlia vvoda koordinat vvedite 1"<<endl
<<" Dlia prosmotra koordinat mnogougolnikov vvedite 2"<<endl
<<" Dlia prosmotra ploshadej mnogougolnikov vvedite 3"<<endl
<<" Dlia peremeshenija mnogougolnikov na dx i dy nazmite 4"<<endl
<<" Dlia vrashenija mnogougolnikov nazmite 5"<<endl
<<" Vyhod - 6"<<endl;
cin>>ch;
switch(ch) {
case '1':
{
textcolor(15);
cout<<endl<<endl;
cout<<endl<<endl;
//Kakoj element obrabatyvaetsia
int j=0;
/////////////////////////////////////////////////////////
// pervyj treugolnik //
/////////////////////////////////////////////////////////
FptrPoly = new CTriangle;
while (j<3)
{
j=j+1;
cout<<endl<<endl;
cprintf(" VVod koordinat dlia tochki ");
cout<<j<<endl;
//VVod znachenija
cout<<endl;
//////////////////////
//vvod znachenija x //
//////////////////////
cout<<endl;
cprintf("x= ");
cin>>x0;
cout<<endl;
//////////////////////
//vvod znachenija y //
//////////////////////
cout<<endl;
cprintf("y= ");
cin>>y0;
cout<<endl;
if(j==1)
{
dx=x0;dy=y0;
}
if(j==2)
{
x2=x0;y2=y0;
}
if(j==3)
{
x3=x0;y3=y0;
}
//Vydelenie pamiati dlia elementa
Fptr= new CPoint;
//Ustanovka elementa
Fptr->SetX(x0,y0);
//Vydelenie pamiati i ustanovka ukazatelia na element
Elemptr=new CElement(Fptr);
//Vstavka elementa v spisok
FptrPoly->Insert(Elemptr);
Fptr=0;Elemptr=0;
if(j==3)
{
printf("Ploshad objekta:");
FptrPoly->Square(Sq);
if(Sq==0)
{ clrscr();
textcolor(13);
cout<<endl<<"Vse tochki lezat na odnoj priamoj, povtorite vvod"<<endl;
cout<<endl; goto end;
textcolor(15);
}
}
}
/////////////////////////////////////////////////////////
// vtoroj treugolnik //
/////////////////////////////////////////////////////////
FptrPoly2 = new CTriangle;
cout<<endl<<endl;
end2:
cprintf("Vvedite koordinaty tochki D ");
//VVod znachenija
cout<<endl;
//////////////////////
//vvod znachenija x //
//////////////////////
cout<<endl;
cprintf("x= ");
cin>>x0;
cout<<endl;
//////////////////////
//vvod znachenija y //
//////////////////////
cout<<endl;
cprintf("y= ");
cin>>y0;
cout<<endl;
h2=(y2-y3)/(x2-x3)*x0+(y2*x3-y3*x2)/(x3-x2)-y0;
h1=(y2-y3)/(x2-x3)*dx+(y2*x3-y3*x2)/(x3-x2)-dy;
cout<<"h1= "<<h1<<", h2= "<<h2<<endl;
getch();
if(((h1>0)&&(h2<0))||((h1<0)&&(h2>0)))
{
//Vydelenie pamiati dlia elementa
Fptr= new CPoint;
//Ustanovka elementa
Fptr->SetX(x0,y0);
//Vydelenie pamiati i ustanovka ukazatelia na element
Elemptr=new CElement(Fptr);
//Vstavka elementa v spisok
FptrPoly2->Insert(Elemptr);
}
else goto end2;
/////////////////////////////////////////////////////////////////
//VVod koordinat tochki B
////////////////////////////////////////////////////////////////
//Vydelenie pamiati dlia elementa
Fptr= new CPoint;
//Ustanovka elementa
Fptr->SetX(x2,y2);
//Vydelenie pamiati i ustanovka ukazatelia na element
Elemptr=new CElement(Fptr);
//Vstavka elementa v spisok
FptrPoly2->Insert(Elemptr);
getch();
////////////////////////////////////////////////////////////////
//Vvod koordinat tochki C
////////////////////////////////////////////////////////////////
//Vydelenie pamiati dlia elementa
Fptr= new CPoint;
//Ustanovka elementa
Fptr->SetX(x3,y3);
//Vydelenie pamiati i ustanovka ukazatelia na element
Elemptr=new CElement(Fptr);
//Vstavka elementa v spisok
FptrPoly2->Insert(Elemptr);
getch();
/////////////////////////////////////////////////////////////////
ElemptrPoly = new CPolygon;//(FptrPoly);
ElemptrPoly->SetFptrPoly(FptrPoly,FptrPoly2);
ElList = new CElPoly(ElemptrPoly);
ListPoly.InsertPoly(ElList);
i=i+1;
getch();
//Obnulenie ukazatelej
FptrPoly=0;ElemptrPoly=0;FptrPoly2=0;
break; }
case '2': {
clrscr();
//Vyvod spiska elementov
// cout<<endl<<"Ishodnyj spisok "<<i<<" elementov";
ListPoly.OutListPoly(); break; }
case '3':{ ListPoly.SquarePoly(); break; }
case '4': {
cout<<"Vvedite dx i dy";
cin>>dx>>dy;
ListPoly.MovePoly(dx,dy); break;
}
case '5':{
CPoint Q;
cout<<"Vvedite koordinaty tochki - x, y, i ugol fi"
<<" vokrug kotoroy budet osushestvlen povorot";
cin>>dx>>dy>>fi1;
Q.SetX(dx,dy);
ListPoly.RotatePoly(Q,fi1);break;}
}
}while (ch!='6');
cprintf("Zavershenie raboty.");
cout<<endl<<endl;
cout<<endl<<"Nazmite probel...";
getch();
return 0;
}
Соседние файлы в папке Лабораторная работа 23