PDA

View Full Version : Bài toán lớp đa giác



wwwazxwww
14-04-2009, 20:31
Tớ có 1 bài toán về lớp đa giác như thế này:Xây dựng lớp đa giác rồi sau đó giải quyết vấn đề là cho n đa giác với mỗi đa giác có n điểm.Tìm đa giác có chu vi lớn nhất.Với dữ liệu đọc từ bàn phím vào thì tớ làm đuọc rồi.nhưng giờ thầy bắt ghi tọa độ điểm,số đỉnh,số đa giác ra tệp txt thì tớ chưa làm được.Đây la code của tớ và các bạn xem hộ tớ.Và các bạn xem hộ tớ xem code tớ trình bày thế đã hợp lý chưa.Thanks
Code:
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdio.h>
#include<fstream.h>
#include<ctype.h>
#include<stdlib.h>
class Diem
{
protected:
float x;
float y;
public:
friend class Da_giac;
friend class Day_DG;
Diem()
{
x=y=0;
}
Diem(int x1,int y1)
{
x=x1;
y=y1;
}
float khoang_cach(Diem d2)
{
return sqrt(pow(x-d2.x,2)+pow(y-d2.y,2));
}
void nhapd()
{

}
void xuatd()
{
cout<<"\ntoa do x,y: ";
cout<<"x= "<<x<<" "<<"y= "<<y;
}
float getx()
{
return x;
}
float gety()
{
return y;
}

};
class Da_giac
{

protected:
int n;
Diem d[20];
public:
Da_giac():Diem()
{
n=0;
}
Da_giac(int n1)
{
n=n1;

}
void nhapdg();
void hiendg();
float chuvi();

int getn()
{
return n;
}
};
class Day_DG:public Da_giac
{
private:
int m;
Da_giac *dg;
//Diem d[20];
public:
Day_DG()
{
m=0;
this->dg=NULL;
}
Day_DG(int x1,int y1,int n1,int N1)
{
m=N1;
dg=new Da_giac[m+1];
}
void nhapday_dg();
void hienday_dg();
float chuvimax();
void hienmax();
void ghitep(char *ttep);
};
void Da_giac::nhapdg()
{
do
{
cout<<"\nNhap vao so diem: ";
cin>>n;
if(n>2)
{
for(int i=1;i<=n;i++)
{
cout<<"\nDiem thu"<<i<<":";
cout<<"\nx= ";
cin>>d[i]x;
cout<<"\ny= ";
cin>>y;
}


for(i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
if(d[i].x==d[j].x&&d[i].y==d[j].y)

{ cout<<"\nBan da nhap sai. Ban can nhap lai toa do cho da giac.";

for(i=1;i<=n;i++)
{
cout<<"\nDiem thu"<<i<<":";
d[i].nhapd();
}
}


float a,b,c;
int kt=0;

for(i=1;i<n-1;i++)
for(j=i+1;j<n;j++)
for(int k=j+1;k<=n;k++)
{
a = sqrt(pow(d[i].x-d[j].x,2)+pow(d[i].y-d[j].y,2));
b = sqrt(pow(d[i].x-d[k].x,2)+pow(d[i].y-d[k].y,2));
c = sqrt(pow(d[j].x-d[k].x,2)+pow(d[j].y-d[k].y,2));
if(a>b)
{
if(a>c)
{
if(a==(b+c))
{
kt= 1;
}
}
else
{
if(c==(a+b))
{
kt = 1;
}
}
}
else
{
if(b>c)
{
if(b==(a+c))
{
kt = 1;
}
}
else
{
if(c==(a+b))
{
kt = 1;
}
}
}
}
if(kt==1)
{
cout<<"\nBan da nhap sai. Ban can nhap lai toa do cho da giac.";
cout<<"\nNhap lai so diem cua da giac.";
}
else break;


}
else
cout<<"\nNhap lai so diem cua da giac.";
}while(1);

}
void Da_giac::hiendg()
{
for(int i=1;i<=n;i++)
{
d[i].xuatd();
cout<< d[i].getx();
}
}

float Da_giac::chuvi()

{
float chuvi=0;
float s=0;
float s1=0;
for(int i=1;i<n;i++)
{
s+=d[i].khoang_cach(d[i+1]);
}
s1=d[n].khoang_cach(d[1]);
for(i=1;i<n;i++)
{
chuvi+=d[i].khoang_cach(d[i+1]);
}
chuvi+=d[n].khoang_cach(d[1]);
return chuvi;
} f


void Day_DG::nhapday_dg()
{
cout<<"\Nhap vao so luong cua da giac";
cin>>m;
for(int i=0;i<m;i++)
{
cout<<"Da giac thu "<<i+1;
dg[i].nhapdg();
}

}
void Day_DG::hienday_dg()
{
for(int i=0;i<m;i++)
{
cout<<"\nDa giac thu"<<i+1;
dg[i].hiendg();
cout<<" " << dg[i].chuvi();
}
}
float Day_DG::chuvimax()
{
float max=dg[0].chuvi();
for(int i=0;i<m;i++)
if(dg[i].chuvi()>max)
{
max=dg[i].chuvi();
}
return max;

}
void Day_DG::hienmax()
{
for(int i=0;i<m;i++)

if(chuvimax()==dg[i].chuvi())
{
cout<<"\nDa giac co chu vi max la da giac thu "<<i+1<<":";
dg[i].hiendg();

}


}
/*void Day_DG::ghitep(char *ttep)
{
ofstream f;
f.open(ttep,ios::out);
if(f.bad())
{
cout<<"\nTep"<<ttep<<" da ton tai";
cout<<"\nCo ghi de? - C/K";
int ch=getch();
if(toupper(ch)=='C')
{
f.close();
f.open(ttep);

}

else
exit(1);
}
f<<m<<endl;
for(int i=0;i<m;i++)

for(int j=0;j<dg[i].getn();j++)
{
cout<<"\nda la j"<<j;
f<<dg[i].getn()<<endl;
d[j].xuatd();
}

}*/
Hàm ghi tệp chưa được
void main()
{ textmode(C80);
clrscr();
Day_DG a;
Da_giac k;
a.nhapday_dg();
a.hienday_dg();
a.hienmax();
cout<<"\nVoi chu lon nhat la: "<<a.chuvimax();
cout<<"\nKet qua da luu vao tep Da_giac";
a.ghitep("AZX.txt");
getch();
}

kimduquan
15-04-2009, 15:45
hình như bạn phải khai báo 2 lớp bạn trước khi khai báo hàm chính hoặc khai báo 2 nguyên mẫu của 2 lớp bạn trước rồi mới khai báo hàm chính,hình như bạn viết 2 hàm tạo ko đối và hàm tạo có đối mà chưa viết hàm hủy( trong trường hợp này ko thể sử dụng hàm hủy mặc định trong C),trong hàm main bạn chưa gọi hàm nhập điểm thì làm sao hiện được đa giác,tuy trong lớp Diem bạn đã định nghĩa hàm nhập điểm nhưng trong hàm main bạn phải gọi hàm nhập thì nó mới thực thi,trong hàm Day_Dg và 1 số hàm khác sai vì lớp day_da giac ko phải là lớp bạn của lớp da_giac nên ko thể truy cập đến thành phần x,y của lớp Diem.

wwwazxwww
15-04-2009, 17:29
Bạn có thể chỉ rõ cho tớ được không.Tớ vẫn chưa hiểu ý bạn lắm.Nhưng dù sao cũng thanks bạn nhiều

[=========> Bổ sung bài viết <=========]

Tớ đa cần ý tưởng để thiết kể lại bài tập này.Mong các bnaj xem và cho mình ý tưởng.Rất cảm ơn.Dưới đây là đè bài

Xây dựng lớp đa giác, sau đó sử dụng để viết chương trình giải quyết bài toán sau:cho n đa giác,mỗi đa giác được tạo bởi 1 số điểm trên mặt phẳng tọa độ xOy.Tìm các đa giác có chu vi lớn nhất?

[=========> Bổ sung bài viết <=========]

Tớ đa cần ý tưởng để thiết kể lại bài tập này.Mong các bnaj xem và cho mình ý tưởng.Rất cảm ơn.Dưới đây là đè bài

Xây dựng lớp đa giác, sau đó sử dụng để viết chương trình giải quyết bài toán sau:cho n đa giác,mỗi đa giác được tạo bởi 1 số điểm trên mặt phẳng tọa độ xOy.Tìm các đa giác có chu vi lớn nhất?

[=========> Bổ sung bài viết <=========]

Sao không ai vào giúp minh với.Hu hu.