Lớp Sư phạm Cử nhân tin học khóa 1
Chào mừng bạn trở lại diễn đàn.

Bài tập hình đa giác nộp thầy

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Bài tập hình đa giác nộp thầy

Bài gửi by huynhvanphuc on 6/8/2008, 3:22 pm

Bài tập tính diện tích các hình đa giác sử dụng hàm thuần ảo.
File 1: Dientich.h
Code:

# ifndef DienTich_H
# define DienTich_H 1

class Hinh
{
public:
   virtual void nhap() = 0;
   virtual void xuat() = 0;
   virtual double Tinhdt() = 0;
};

class diem
{
public:
   int x, y;
   void nhap();
   void xuat();
   double KhoangCach(diem d2);
};

class Hinhtron : public Hinh
{
public:
   static double Pi;

protected:
   diem tam;
   double r;
public:
   Hinhtron();
   Hinhtron(diem d, double r1);
   void nhap();
   void xuat();
   double Tinhdt();
};

class HinhCN : public Hinh
{
protected:
   diem traitren, phaiduoi;
public:
   HinhCN();
   HinhCN(diem tt, diem pd);
   HinhCN(diem tt, int dai, int rong);
   void nhap();
   void xuat();
   double Tinhdt();
};

class HinhTG : public Hinh
{
protected:
   diem A, B, C;
public:
HinhTG();
HinhTG(diem dA, diem dB, diem dC);
void nhap();
void xuat();
double Tinhdt();

};
#endif
File 2: Dientich.cpp
Code:

#include "DienTich.h"
#include <iostream>
#include <cmath>

using namespace std;

void diem::nhap()
{   cout << "\n  Nhap hoanh do x: "; cin >> x;
   cout << "  Nhap tung do y: "; cin >> y;
}

void diem::xuat()
{   
   cout << "(" << x << "," << y << ")";
}

double diem::KhoangCach( diem d)
{
   double kc;
      kc=sqrt((x-d.x)*(x-d.x)+(y-d.y)*(y-d.y));
   return kc;

}

Hinhtron::Hinhtron()
{
   tam.x = 0; tam.y = 0; r = 0;
}

Hinhtron::Hinhtron(diem d, double r1)
{
   tam = d; r = r1;
}

double Hinhtron::Pi = 3.14;

void Hinhtron::nhap()
{
   cout << "Nhap hinh tron :\n";
   cout << "Toa do Tam: "; tam.nhap();
   cout << "Ban kinh: "; cin >> r;
}

void Hinhtron::xuat()
{
   cout << "tam: "; tam.xuat();
   cout << "Ban kinh: " << r;
}


double Hinhtron::Tinhdt()
{
   return (Pi*r*r);
}


HinhCN::HinhCN()
{}

HinhCN::HinhCN(diem tt, diem pd)
{
   traitren = tt;   phaiduoi = pd;
}

HinhCN::HinhCN(diem tt, int dai, int rong)
{
   traitren = tt;
   phaiduoi.x = traitren.x + dai;
   phaiduoi.y = traitren.y + rong;
}

void HinhCN::nhap()
{
   cout << "Nhap hinh chu nhat: \n";
   cout << "Toa do dinh trai tren: ";traitren.nhap();
   cout << "Toa do dinh phai duoi: ";phaiduoi.nhap();   
}

void HinhCN::xuat()
{
   cout << "Trai tren: "; traitren.xuat();
   cout << "phai duoi: "; phaiduoi.xuat();
}

double HinhCN::Tinhdt()
{
   int dx = phaiduoi.x - traitren.x;
   int dy = phaiduoi.y - traitren.y;
   return (dx*dy);
}

HinhTG ::HinhTG()
{}

HinhTG :: HinhTG(diem dA, diem dB, diem dC)
{
   A = dA; B = dB; C = dC;
}

void HinhTG :: nhap()
{
   cout <<"Nhap tam giac.";
   cout <<"\nNhap dinh A :";
   A.nhap();
   cout <<"\nNhap dinh B :";
   B.nhap();
   cout <<"\nNhap dinh C :";
   C.nhap();
}

void HinhTG :: xuat()
{
   cout << "Dinh A: " ; A.xuat();
   cout << "Dinh B: " ; B.xuat();
   cout << "Dinh C: " ; C.xuat();
}

double HinhTG ::Tinhdt()
{
double a = B.KhoangCach(C);
double b = C.KhoangCach(A);
double c = A.KhoangCach(B);
double p= (a+b+c)/2;
double dt;
 dt=sqrt(p*(p-a)*(p-b)*(p-c));

return dt;
}
File 3: main.cpp
Code:

#include "DienTich.h"
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;

int main()
{
   vector<Hinh*> dayhinh;
   Hinh* hinhmoi;
   int chon;
      do{
      cout << "Nhap vao loai hinh ma ban chon: (1:tron, 2: chu nhat, 3: tam giac, 0:thoat)";
      cin >> chon;
      switch (chon)
      {
      case 1:
         hinhmoi = new Hinhtron(); break;
      case 2:
         hinhmoi = new HinhCN(); break;
      case 3:
         hinhmoi = new HinhTG(); break;
      }
      if (chon != 0)
      {
         hinhmoi->nhap();
         dayhinh.push_back(hinhmoi);
      }
   } while (chon != 0);
   double tongdientich = 0;
   vector<Hinh*>::iterator it;
   for (it = dayhinh.begin(); it!=dayhinh.end(); it++)
   {
      tongdientich += (*it)->Tinhdt();
   }
   cout << "\nTong dien tich cac hinh la: " << tongdientich << endl;
      system("pause");
      return 0;
}

Tải về tại đây


Được sửa bởi huynhvanphuc ngày 9/8/2008, 10:29 am; sửa lần 1.

huynhvanphuc

Tổng số bài gửi : 2
Registration date : 06/08/2008

Xem lý lịch thành viên http://cnthk1.tk

Về Đầu Trang Go down

Tính diện tích đa giác

Bài gửi by PhamNam on 9/8/2008, 10:22 am

Hai chương trình tính diện tích đa giác mình sưu tầm được trên net.
Các bạn tham khảo và vận dụng để đưa vào bài tập về hình của thầy.
Bài 1:
Code:
typedef struct {
  double x,y;
} Point;
double PolygonArea(Point *polygon,int N)
{
  int i,j;
  double area = 0;
  for (i=0;i<N;i++) {
      j = (i + 1) % N;
      area += polygon[i].x * polygon[j].y;
      area -= polygon[i].y * polygon[j].x;
  }
  area /= 2;
  return(area < 0 ? -area : area);
}
Bài 2:
Code:

ypedef struct POINT
{
    float x;
    float y;
};

POINT Poly[MAX];
int N,M;

void Init (int m)
{
    Poly[m].x = Poly[0].x;
    Poly[m].y = Poly[0].y;
}

double Area ()
{
    double S = 0;
    for (int i=0; i<M; i++)
        S = S + ((Poly[i+1].x - Poly[i].x) * (Poly[i+1].y + Poly[i].y) / 2);
    return fabs(S);
}

PhamNam

Tổng số bài gửi : 6
Registration date : 24/12/2007

Xem lý lịch thành viên http://www.dongnai.edu.vn

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết