Lập trình hướng đối tượng - Một số chương trình hướng đối tượng trên C++

7 20 0
Lập trình hướng đối tượng - Một số chương trình hướng đối tượng trên C++

Đang tải... (xem toàn văn)

Thông tin tài liệu

[r]

(1)

Chương 10

M t s ch ương trình hướng đ i tố ượng C++ Chương trình b y thêm m t s chầ ộ ố ương trình hướng đ iố tượng C++ Đây chương trình tương đ i ph c t p,ố ứ h u ích s d ng công c m nh c a C++ nh : Cáchữ ụ ụ ủ truy nh p tr c ti p b nh hình, k thu t đ ho , trậ ự ế ộ ỹ ậ ỏ void, tính k th a, l p c s tr u tế ừ ượng, tương ng b i,ứ ộ phương th c o ứ ả

§ L p c a sớ

Chương trình g m l p cua_so l p stackồ ớ + L p c a sớ

Thu c tính g m:ộ

char *noidung; // Tr đ n vùng nh ch a n i dung ỏ ế ứ ộ // so n th o c a sạ ả ổ

int cao,rong ; // Chi u cao chi u r ng c a sề ề ộ ổ int mau; // mau = 16*mau_nen + mau_chu

int ra_mh; // Cho bi t c a s đế ổ ược đ a hìnhư ch a?ư

int posx,posy; // V trí trái c a c a s hìnhị ủ ổ word *pluu; // Tr đ n vùng nh ch a n i dungỏ ế ứ ộ

// ph n hình b c a s đè lênầ ị ổ Phương th c g m:ứ

cua_so();

cua_so(int c,int r,byte mau_nen, byte mau_chu); int push(int x,int y); // Đ a c a s hình t i (x,y)ư ổ

// cho phép so n th o c a sạ ả ổ // B m F6 chuy n sang c a s khácấ ể ổ // B m ESC k t thúcấ ế

void pop(); // Tháo g c a s khơi ph c hìnhỡ ổ ụ int get_ra_mh();

+ L p stack (dùng đ qu n lý m t d y c a s )ớ Thu c tính g m:ộ

int max; //S c a s c c đ i có th qu n lýố ổ ự ể ả int num; //S c a s hi n có stackố ổ ệ

cua_so **pcs; //Con tr tr đ n vùng nh ch a ỏ ỏ ế ứ //đ a ch c a đ i tị ỉ ủ ố ượng cua_so Phương th c g m:ứ

stack();

stack(int max_cs);

int accept(cua_so *cs,int x,int y); //Đ a m t c a sư ộ ổ

//vào stack, s hi n lên mànẽ ệ hình

void del(); // Lo i c a s kh i stack, s b xoáạ ổ ỏ ẽ ị // kh i hình ỏ

N i dung chộ ương trình:

+ Đ u tiên hi n c a s th nh t n n GREEN ch a WHITE.ầ ệ ổ ứ ấ ề ữ Có th so n th o ể ả

+ N u b m ESC k t thúc chế ấ ế ương trình, n u b m F6 thìế ấ hi n thêm c a s th hai n n CYAN ch MAGENTA Có thệ ổ ứ ề ữ ể so n th o đó.ạ ả

+ N u b m ESC k t thúc chế ấ ế ương trình, n u b m F6 thìế ấ hi n thêm c a s th ba n n RED ch YELLOW Có thệ ổ ứ ề ữ ể so n th o đó.ạ ả

+ Đang m t c a s , n u b m ESC k t thúc chở ộ ổ ế ấ ế ương trình, n u b m F6 hi n c a s ti p theo (theo th t vòngế ấ ệ ổ ế ứ ự quanh: -> -> -> 1)

(2)

Chương trình s d ng phử ụ ương pháp truy nh p tr c ti pậ ự ế b nh hình trình b y chộ ầ ương

// CT10_01.CPP // lop cua_so #include <stdio.h> #include <conio.h> #include <dos.h> #include <alloc.h>

typedef unsigned int word; typedef unsigned char byte; struct kt_word

{

word kt; };

struct kt_byte {

byte ma, mau; };

union ky_tu {

struct kt_byte h; struct kt_word x; };

typedef union ky_tu far *VP; VP vptr=(VP)MK_FP(0xb800,0); // Vi tri x,y tren man hinh

#define VPOS(x,y) (VP)(vptr + ((y)-1)*80+(x)-1) class cua_so

{

private:

char *noidung; int cao, rong;

int mau; // mau = 16*mau_nen + mau_chu int ra_mh;

int posx,posy; word *pluu; public:

cua_so();

cua_so(int c,int r,byte mau_nen, byte mau_chu); int push(int x,int y);

void pop(); int get_ra_mh(); };

cua_so::cua_so() {

cao=rong=mau=ra_mh=posx=posy=0; noidung=NULL; pluu=NULL;

}

cua_so::cua_so(int c,int r,byte mau_nen, byte mau_chu) {

cao=c; rong=r;

mau= 16*mau_nen+mau_chu; ra_mh=posx=posy=0;

noidung = (char*)malloc(cao*rong); for (int i=0;i<cao*rong;++i)

noidung[i]=32;

pluu= (word*)malloc(2*cao*rong);

(3)

}

int cua_so::push(int x,int y) {

word *p= pluu; char *pnd=noidung; VP ptr;

int i,j;

// Luu man hinh if (ra_mh==0)

{

ra_mh=1; posx=x;posy=y; for (i=posx;i<=posx+rong-1;++i)

for (j=posy;j<=posy+cao-1;++j) {

ptr=VPOS(i,j); *p=ptr->x.kt; ++p; }

}

// Hien noi dung dang soan thao tren cua so for (i=posx;i<=posx+rong-1;++i)

for (j=posy;j<=posy+cao-1;++j) {

ptr=VPOS(i,j); ptr->h.mau=mau;

ptr->h.ma=*pnd; ++pnd; }

// Soan thao

int xx=posx,yy=posy,ch1,ch2; while (1)

{

gotoxy(xx,yy);

if ((ch1=getch())==0) ch2=getch();

if (ch1==27)break; // ESC Ket Thuc Soan Thao else if (ch1==0&&ch2==64)break; //F6

else if (ch1==13) {

++yy; xx=posx; if(yy>=posy+cao) break; }

else if (ch1!=0) {

ptr=VPOS(xx,yy); ptr->h.ma=ch1; ++xx;

if (xx>=posx+rong) {++yy; xx=posx;} if (yy>=posy+cao) break;

}

else if (ch2==72||ch2==80||ch2==75||ch2==77) {

if (ch2==72) yy ; else if (ch2==80) ++yy; else if (ch2==75) xx; else ++xx;

if (xx<posx) xx=posx;

if (xx>=posx+rong) {++yy; xx=posx;} if (yy<posy) yy=posy;

if (yy>=posy+cao) break; }

}

// Luu ket qua soan thao pnd=noidung;

(4)

for (i=posx;i<=posx+rong-1;++i) for (j=posy;j<=posy+cao-1;++j)

{

ptr=VPOS(i,j);

*pnd=ptr->h.ma; ++pnd; }

if (ch1==0&&ch2==64) return 0; //F6 else return 1;

}

void cua_so::pop() // Khoi phuc vung nho bi cua so chiem {

if (ra_mh==0) return; ra_mh=0;

word *p=pluu; VP ptr;

int i,j;

for (i=posx;i<=posx+rong-1;++i) for (j=posy;j<=posy+cao-1;++j)

{

ptr=VPOS(i,j); ptr->x.kt=*p; ++p; }

}

int cua_so::get_ra_mh() {

return ra_mh; }

//class stack class stack

{

private:

int max,num; cua_so **pcs; public:

stack();

stack(int max_cs);

int accept(cua_so *cs,int x,int y); void del();

};

stack::stack() {

max=num=0; pcs=NULL; }

stack::stack(int max_cs) {

max=max_cs; num=0;

pcs=(cua_so**)malloc(max*sizeof(cua_so*)); for (int i=0;i<max;++i) pcs[i]=NULL;

}

int stack::accept(cua_so *cs,int x,int y) {

int gt;

if (num==max)return 0; if (!cs->get_ra_mh())

{

pcs[num]=cs; ++num; }

(5)

gt=cs->push(x,y); return gt;

}

void stack::del() {

if (num==0) return; num;

pcs[num]->pop(); pcs[num]=NULL; }

main() {

int ch;

cua_so w1(10,40,GREEN,WHITE), w2(12,42,CYAN,MAGENTA), w3(14,44,RED,YELLOW); stack s(4);

clrscr(); while(1)

{

ch=s.accept(&w1,5,5); if(ch==1)break;

ch=s.accept(&w2,8,8); if(ch==1)break;

ch=s.accept(&w3,11,11); if(ch==1)break;

}

s.del(); s.del(); s.del(); }

§ L p menuớ

L p cmenu có phớ ương th c đ t o l p s d ng menu:ứ ể ậ ụ 1 Hàm t oạ

cmenu(int so_cn_menu,char **nd_menu);

dùng đ t o m t menu (đ i tể ộ ố ượng ki u cmenu) Hàm t oể ch a đ i là:ứ ố

+ Bi n so_cn_menu ch a s ch c c a menuế ứ ố ứ ủ

+ Con tr nd_menu tr t i m t vùng nh ch a đ a ch cácỏ ỏ ộ ứ ị ỉ chu i ký t dùng làm tiêu đ menu tiêu đ ch c năngỗ ự ề ề ứ menu

Ví dụ câu l nh:ệ

char *nd[]={"Qu n lý v t t ", "Nh p s li u",ả ậ ậ ố ệ "Tìm ki m","K t thúc"};ế ế

cmenu mc(3,nd);

s t o m t menu mc g m ch c năng: Nh p s li u, Tìmẽ ộ ứ ậ ố ệ ki m K t thúc Menu có tiêu đ là: Qu n lý v t tế ế ề ả ậ

2 Phương th cứ

int menu(int x,int y,int mau_nen,int mau_chon); th c hi n vi c sau:ự ệ ệ

+ Hi n th menu t i v trí (x,y) hình Menu có m uể ị ị ầ n n xác đ nh b i đ i mau_nen m u ch c đ nh ch nề ị ố ầ ứ ị ọ (h p sáng) xác đ nh b i đ i mau_chon.ộ ị ố

+ Cho phép s d ng phím mũi tên lên, xu ng đ diử ụ ố ể chuy n h p sáng dùng phím Enter đ kh i phể ộ ể ỏ ương th c.ứ

(6)

// Lop sort

#include "c_sort.h"

int ss_tang(void *i1,void *i2) {

return *((int*)i1) < *((int*)i2); }

int ss_giam(void *i1,void *i2) {

return *((int*)i1) > *((int*)i2); }

void main() {

int i,n;

struct time t1,t2;

int b[20],a[20], k, tg, sec, hund; n=10;

sort *s[3]; select_sort ss; quick_sort qs; heap_sort hs;

s[0]=&ss; s[1]=&qs; s[2]=&hs; clrscr();

srand(5000); for(i=1;i<=n;++i) b[i]=rand();

cout<<"\nDay ban dau\n "; for(i=1;i<=n;++i) cout <<b[i]<<" ";

cout<<"\n\nCac day tang sap xep theo ";

cout << "select_sort, quick_sort, heap_sort\n"; for(k=0; k<3; ++k)

{

for(i=1;i<=n;++i) a[i]=b[i];

s[k]->sapxep (a+1,n,sizeof(int),ss_tang); //In

for(i=1;i<=n;++i) cout <<a[i]<<" "; cout<<"\n";

}

cout<<"\n\nCac day giam sap xep theo "; cout << "select_sort, quick_sort, heap_sort\n"; for(k=0; k<3; ++k)

{

for(i=1;i<=n;++i) a[i]=b[i];

s[k]->sapxep (a+1,n,sizeof(int),ss_giam); //In

for(i=1;i<=n;++i) cout <<a[i]<<" "; cout << "\n";

} getch(); }

(7)

Ngày đăng: 09/03/2021, 05:59

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan