Thứ Tư, 22 tháng 4, 2015

tạo lập đối tượng trong c++

*tạo lập đối tượng
Khai báo và tạo đối tượng:
<tên lớp>  <tên đối tượng>;
Gọi hàm thành phần của lớp
<tên đối tượng>.<tên hàm thành phần> (<danh sách các tham số nếu có>);
<tên con trỏ đối tượng><tên hàm thành phần> (<danh sách các tham số nếu có>);
class  Time {
  public:
void Set (int  hours , int  minutes , int  seconds);
void Increment ( );
void Write ( )  const;
Time (int  initHrs, int  initMins,  int  initSecs ); //constructor 
Time ( );                      //default constructor
  private:
int             hrs;       
int             mins;
int         secs;
} ;
Xây dựng lớp Điểm (Point) trong hình học 2D
Thuộc tính
Tung độ
Hoành độ
Thao tác (phương thức)
Khởi tạo
Di chuyển
In ra màn hình

/*point.cpp*/
#include <iostream.h>
#include <conio.h>
class point {
  /*khai báo các thành phần dữ  liệu riêng*/
  private:
    int x,y;
  /*khai báo các hàm thành phần công cộng*/
  public: 
    void init(int ox, int oy);
    void move(int dx, int dy);
    void display();
    };
void point::init(int ox, int oy) {
  cout<<"Ham thanh phan init\n";
     x = ox; y = oy; 
/*x,y là các thành phần của đối tượng gọi hàm thành phần*/
  }
void point::move(int dx, int dy) {
  cout<<"Ham thanh phan move\n";
  x += dx; y += dy;
  }
void point::display() {
  cout<<"Ham thanh phan display\n";
  cout<<"Toa do: "<<x<<" "<<y<<"\n";
  }
void main() {
  point p;
  p.init(2,4); /*gọi hàm thành phần từ đối tượng*/
  p.display();
  p.move(1,2);
  p.display();
  }

lớp class trong lập trình c++

Một lớp bao gồm các thành phần dữ liệu (thuộc tính) và các phương thức (hàm thành phần).
Lớp trong C++ thực chất là một kiểu dữ liệu do người sử dụng định nghĩa.
Trong C++, dùng từ khóa class để chỉ điểm bắt đầu của một lớp sẽ được cài đặt.
Lớp là một mô tả trừu tượng của nhóm các đối tượng cùng bản chất, ngược lại mỗi một đối tượng là một thể hiện cụ thể cho những mô tả trừu tượng đó.
Lớp là cái ta thiết kế và lập trình
Đối tượng là cái ta tạo (từ một lớp) tại thời gian chạy.
class <tên_lớp> 
{
//Thành phần dữ liệu

//Thành phần xử lý
};
class <tên_lớp> {
  private:
   <khai báo thành phần riêng trong từng đối tượng>
  protected:
   <khai báo thành phần riêng trong từng đối tượng, có thể truy cập từ lớp dẫn xuất >
  public:
    <khai báo thành phần công cộng>
};
Thuộc tính: Các thuộc tính được khai báo giống như khai báo biến trong C
Phương thức: Các phương thức được khai báo giống như khai báo hàm trong C. Có hai cách định nghĩa thi hành của một phương thức
Định nghĩa thi hành trong lớp
Định nghĩa thi hành ngoài lớp
cơ chế tạo lập các lớp
Xác định các thuộc tính (dữ liệu)
Những gì mà ta biết về đối tượng – giống như một struct
Xác định các phương thức (hình vi)
Những gì mà đối tượng có thể làm
Xác định các quyền truy xuất
Sẽ trình bày sau
Định nghĩa các hàm thành phần ở bên ngoài khai báo lớp:
<tên kiểu giá trị trả về> <tên lớp>::<tên hàm> (<danh sách tham số>) 
{
<nội dung >
}
Ví dụ:
void point::display() { 
//……..
}

Chủ Nhật, 19 tháng 4, 2015

[C++] điều khiển robot trong bản đồ Oxy U-D-L-R-T-B


Robot đang đứng ở vị trí 0 0 trong bản đồ. Robot có thể nhận các lệnh L: về phía bên trái, R: về bên phải, U: tiến về phía trước, D: lùi ra sau, B: quay lại vị trí trước đó (lưu ý, nếu robot đã thực hiện lênh U, R, sau đó nhận lệnh B, B thì robot sẽ thực hiện lệnh L, D, còn nếu robot chưa thực hiện lệnh nào thì lệnh B sẽ không có tác dụng) và lệnh T (turn around, lệnh này sẽ đọc thêm lệnh tiếp theo và khiến robot quay 180 độ về phía sau nếu lệnh tiếp theo là D, quay 90 độ theo kim đồng hồ nếu lệnh tiếp theo là R, quay 90 độ ngược kim đồng hồ nếu lệnh tiếp theo là L, khiến robot đứng yên không di chuyển nếu lệnh tiếp theo là B hay U.)
Ban đầu robot đang quay lên trên
Hãy tìm tọa độ của robot sau khi thực hiện xong n chuỗi lệnh. (robot sẽ vẫn giữ nguyên vị trí và hướng quay sau khi thực hiện xong 1 chuỗi lệnh)
Input
N (N<100)
N dòng, mỗi dòng là 1 chuỗi lệnh cho robot (mỗi dòng <255 kí tự)
(40% test sẽ không có lệnh T)
Output
N dòng, mỗi dòng là tọa độ robot sau khi thực hiện chuỗi lệnh của dòng tương ứng
Ví Dụ:
Input:
4
UDLRTBBBBTUTRTLTDU
UUUU
TLUUUU
BBBB
Output:
0 0
0 -4
4 -4
0 -4

#include<iostream>
using namespace std;
struct diem{int x,y,z;};
void tinh(char *s,diem &x,char *a,int &j)
{
int i=0;
while(i<strlen(s))
{
if(s[i]=='U')
{
if(x.z==0)
{
x.y++;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.x++;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.y--;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.x--;
a[j++]=s[i++];
}
}
else if(s[i]=='D')
{
if(x.z==0)
{
x.y--;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.x--;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.y++;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.x++;
a[j++]=s[i++];
}
}
else if(s[i]=='L')
{
if(x.z==0)
{
x.x--;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.y++;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.x++;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.y--;
a[j++]=s[i++];
}
}
else if(s[i]=='R')
{
if(x.z==0)
{
x.x++;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.y--;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.x--;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.y++;
a[j++]=s[i++];
}
}
else if(s[i]=='T')
{
if(s[i+1]=='B' || s[i+1]=='U') i=i+2;
else
{
i++;
if(s[i]=='L')
{
x.z--;
if(x.z==-1) x.z=3;
}
else if(s[i]=='R')
{
x.z++;
if(x.z==4) x.z=0;
}
else if(s[i]=='D') x.z=(x.z+2)%4;
i++;
}
}
else if(s[i]=='B')
{
if(j==0) i++;
else if(j>0)
{
j--;
if(a[j]=='U')
{
if(x.z==0)
{
x.y--;
i++;

}
else if(x.z==1)
{
x.x--;
i++;

}
else if(x.z==2)
{
x.y++;
i++;

}
else if(x.z==3)
{
x.x++;
i++;

}
}
else if(a[j]=='D')
{
if(x.z==0)
{
x.y++;
i++;

}
else if(x.z==1)
{
x.x++;
i++;

}
else if(x.z==2)
{
x.y--;
i++;

}
else if(x.z==3)
{
x.x--;
i++;

}
}
else if(a[j]=='L')
{
if(x.z==0)
{
x.x++;
i++;

}
else if(x.z==1)
{
x.y--;
i++;

}
else if(x.z==2)
{
x.x--;
i++;

}
else if(x.z==3)
{
x.y++;
i++;

}
}
else if(a[j]=='R')
{
if(x.z==0)
{
x.x--;
i++;

}
else if(x.z==1)
{
x.y++;
i++;

}
else if(x.z==2)
{
x.x++;
i++;

}
else if(x.z==3)
{
x.y--;
i++;
}
}
}
}
else i++;
}
}
void main()
{
FILE *t1=fopen("bai2.inp","r");
FILE *t2=fopen("bai2.out","w");
if(t1==NULL || t2==NULL) exit(0);
char s[300],a[300];
int i,n,j=0;
fgets(s,4,t1);
n=atoi(s);
diem x;
x.x=x.y=x.z=0;
for(i=0;i<n;i++)
{
fgets(s,300,t1);
tinh(s,x,a,j);
fprintf(t2,"%d %d\n",x.x,x.y);
}
fcloseall();

}

Thứ Sáu, 10 tháng 4, 2015

Viết định nghĩa lớp TamGiac ,quay, tịnh tiến, phóng thu






Viết định nghĩa lớp TamGiac để biểu diễn khái niệm tam giác trong mặt phẳng với các phương thức thiết lập, huỷ bỏ (nếu có). Các hàm thành phần nhập, xuất, tịnh tiến, quay, phóng to, thu nhỏ và vẽ tam giác (tùy chọn).
Tịnh tiến theo vector v (a,b) : x’= x +a; y’=y+b;
Phép quay tâm O, góc quay α
x’ = xcosα – y sinα;

y’= xsinα  + ycosα;

diem.h

#pragma once
#include<iostream>
using namespace std;
class diem
{
private:
float x,y;
public:
diem();
diem(float,float);
~diem(void);
void nhap();
void xuat();
void setx(float);
void sety(float);
diem vector(diem);
float getx();
float gety();
void setxy(float,float);
void tinhtien(float=0,float=0);
void quay(float);
};


tamgiac.h

#pragma once
#include"diem.h"
class tamgiac
{
private:
diem A,B,C;
public:
tamgiac();
tamgiac(diem,diem,diem);
~tamgiac(void);
void nhap();
void xuat();
void tinhtien(float=0,float=0);
void quay(float);
void thuphong(float);
};


diem.cpp

#include "diem.h"
diem::diem()
{
}
void diem::setx(float a)
{
x=a;
}
void diem::sety(float a)
{
y=a;
}
float diem::getx()
{
return x;
}
float diem::gety()
{
return y;
}
void diem::setxy(float a,float b)
{
x=a;
y=b;
}
diem::diem(float a,float b)
{
x=a;y=b;
}
void diem::nhap()
{
cout<<"\nhoanh do x=";cin>>x;
cout<<"tung do y=";cin>>y;
}
void diem::xuat()
{
cout<<"( "<<x<<" , "<<y<<" )";
}
diem::~diem(void)
{
}
void diem::tinhtien(float a,float b)
{
x+=a;
y+=b;
}
void diem::quay(float rad)
{
x=x*cos(rad)+y*sin(rad);
y=x*sin(rad)+y*cos(rad);
}
diem diem::vector(diem a)
{
diem t;
t.setx(a.getx()-x);
t.sety(a.gety()-y);
return t;
}

tamgiac.cpp

#include "tamgiac.h"

tamgiac::tamgiac()
{
}
tamgiac::tamgiac(diem x,diem y,diem z)
{
A=x;B=y;C=z;
}
tamgiac::~tamgiac(void)
{
}
void tamgiac::nhap()
{
int kt;
do{
kt=0;
cout<<"\nnhap dinh A";
A.nhap();
cout<<"\nnhap dinh B";
B.nhap();
cout<<"\nnhap dinh C";
C.nhap();
diem d,e;
d=A.vector(B);
e=A.vector(C);
if(float(d.getx()*e.gety())==float(d.gety()*e.getx()))
{
kt=1;
cout<<"\ntam giac khong ton tai! nhap lai!";
}
cout<<"\n";
}while(kt);
}
void tamgiac::xuat()
{
cout<<"\ntam giac tao boi 3 diem: ";
A.xuat();cout<<" , ";B.xuat();cout<<" , ";C.xuat();
}
void tamgiac::tinhtien(float m,float n)
{
A.tinhtien(m,n);
B.tinhtien(m,n);
C.tinhtien(m,n);
}
void tamgiac::quay(float rad)
{
A.quay(rad);
B.quay(rad);
C.quay(rad);
}
void tamgiac::thuphong(float k)
{
A.setxy(A.getx()*k,A.gety()*k);
B.setxy(B.getx()*k,B.gety()*k);
C.setxy(C.getx()*k,C.gety()*k);
}

main.cpp

#include"tamgiac.h"
void main()
{
float x,y,rad,k;
tamgiac a;
a.nhap();
a.xuat();
cout<<"\n\ntinh tien theo vector v(x,y):\nx=";cin>>x;
cout<<"y=";cin>>y;
a.tinhtien(x,y);
a.xuat();
cout<<"\nquay goc: rad=";cin>>rad;
a.quay(rad);
a.xuat();
cout<<"\nnhap he so thu phong k=";cin>>k;
a.thuphong(k);
a.xuat();
system("pause");
}

Bài đăng phổ biến