150 likes | 168 Views
Lecture 6: Structure and Class. structure solving quadric equations as an example class air-plane and bullets. Computing the roots of a quadric equation. The roots of a quadric equation ax 2 +bx+c=0 are x1= (-b+( b 2 -4ac))/2ac x2=x1= (-b- ( b 2 -4ac))/2ac #include<iostream.h>
E N D
Lecture 6: Structure and Class • structure • solving quadric equations as an example • class • air-plane and bullets. CS3369 Real Time Control Software/Wang Lusheng
Computing the roots of a quadric equation The roots of a quadric equation ax2+bx+c=0 are x1= (-b+( b2-4ac))/2ac x2=x1= (-b- ( b2-4ac))/2ac #include<iostream.h> float x1, x2; int flag=0; void roots(float a, float b, float c) void main(void) { roots(1.0,2.0, 1.0); if(flag == 0) cout<<“The roots are”<<x1<<x2; else cout<<“No real root”; } void roots(float a, float b, float c) { if (b*b-4*a*c>=0) { x1=(-b+sqrt(b*b-4*a*c))/(2*a*c); x2 =(-b-sqrt(b*b-4*a*c))/(2*a*c); } else flag=1; } x1, x2 and flag are used as global variables. Otherwise, function roots must return two values (we do not know how to do it.) CS3369 Real Time Control Software/Wang Lusheng
Define structures • Structures are aggregate data types built using elements of other types. • We can use structure to group several variables together struct two_roots { float x1; float x2; } r; CS3369 Real Time Control Software/Wang Lusheng
Define a function of two_roots type • The function roots returns a value of type two_roots that contains two values of type float. struct two_roots roots (float a, float b, float c) { two_roots r; if (b*b-4*a*c>=0) { r.x1=(sqrt (b*b-4*a*c)-b)/(2*a*c); r.x2=(-sqrt(b*b-4*a*c)-b)/(2*a*c);} else x3=100; return r; } CS3369 Real Time Control Software/Wang Lusheng
Using structures in main() • In main function, we can print the two roots as follows; #include <iostream.h> int x3; struct two_roots { float x1; float x2; }; struct two_roots roots (float a, float b, float c); void main(void) { two_roots z; z=roots(1.0, 2.0, 1.0); if (x3==100) cout<<“There is no real root”; else cout<<“The roots are”<< z.x1<<“ ”<<z. x2; } struct two_roots roots (float a, float b, float c) { two_roots r; if (b*b-4*a*c>=0) { r.x1=(sqrt (b*b-4*a*c)-b)/(2*a*c); r.x2=(-sqrt(b*b-4*a*c)-b)/(2*a*c); } else x3=100; return r; } CS3369 Real Time Control Software/Wang Lusheng
Time Services (Clock) • struct the_time {int hrs, int mins, int secs, int hundth;}; • the_time get_time() { • the_time tmp; • int i,j,k,l; • _AH=0x2C; //service 0x2C for get time • interrupt(0x21); //interrupt 0x21 • i=_CH; j=_CL; k=_DH; l=_DL; • tmp.hrs=i; tmp.mins=j; tmp.secs=k; tmp.hundth=l; • return tmp; • } • void main() • { the_time x; • x=get_time(); • cout<<“The hour is ”<<x.hrs<<“The minute is ”<<x.mins; • cout<<“The second is ”<<x.sees; • } CS3369 Real Time Control Software/Wang Lusheng
Problem Solving: Student Records • We define a structure that can hold student records structure student { char name[20]; int student_id; char grade; }; struct student x; void main() {int j; cout<<“Please enter your name with <=20 characters\n”; for(j=0; j<=19; j++) cin>>x.name[j]; cout<<“Please enter your student number\n”; cin>>x.student_id; cout<<“Please enter the grade (A, B, C, D, F) \n”; cin>>x.grade; } Question: How to print out those input records? The program asks users to enter a record of students. Each record contains the name, student_id and grade. CS3369 Real Time Control Software/Wang Lusheng
Problem Solving: Student Records • We define a structure that can hold student records structure student { char name[20]; int student_id; char grade; }; struct student x[56]; void main() {int i,j; for(i=0; i<=55; i++) { cout<<“Please enter your name with <=20 characters\n”; for(j=0; j<=19; j++) cin>>x[i].name[j]; cout<<“Please enter your student number\n”; cin>>x[i].student_id; cout<<“Please enter the grade (A, B, C, D, F) \n”; cin>>x[i].grade; } Question: How to print out those input records? The program asks users to enter 104 records of students. Each record contains the nemae, student_id and grade. CS3369 Real Time Control Software/Wang Lusheng
Classes • Classes enable the programmer to model objects that have attributes (represented as data members) and behaviors or operations (represented as member functions). • Object-oriented programming models real-world objects with software counterparts--classes • Objects of the same class have the same characteristics • e.g., cars, vehicles, air-planes, etc. • OOP encapsulates data (attribute) and functions (behavior) into packages called objects. • Objects have the property of information hiding. CS3369 Real Time Control Software/Wang Lusheng
Classes (continued) • information hiding : objects may know how to communicate with each other, but do not know how other objects are implemented. • We can build software by combining “standardized, interchangeable parts” --classes. CS3369 Real Time Control Software/Wang Lusheng
Define air-plane as a class void main(void) { int driver = DETECT,mode; int i,k,f=0,f3=0; char x; Air y1, y2, y3; initgraph(&driver,&mode,"a:\\bgi"); setcolor(WHITE); line(1,400,400,400); for ( i = 0; i < 80; i++ ) { setcolor(BLUE); y1.size=2; y1.planeshow(5*i, 5); x=read_key(); if (x =='u') f=f-8; if (x =='i') f=f+8; if (x=='o') f3=f3-8; if (x=='p') f3=f3+8; setcolor(YELLOW); y2.size=4; y2.planeshow(5*(i-8), f); setcolor(RED); y3.size=6;y3.planeshow(5*(i-16), f3); delay (300); y1.ereasep(5*i, 5); y2.ereasep(5*(i-8), f); y3.ereasep(5*(i-16), f3); } closegraph(); } #include <graphics.h> #include<dos.h> #include<iostream.h> #include<conio.h> class Air{ public: int size; void planeshow(int i,int k); void ereasep(int i, int k); /*i decides the herizontal position */ /* k decides the vertical position */ }; void Air::planeshow(int i,int k) { int j; circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+size) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); circle(i+3, 200-2*size+k, size); } void Air::ereasep(int i, int k) { int j; setcolor(BLACK); circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+1) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); circle(i+3, 200-2*size+k, size); } char read_key() { int y=1; char x; _AH=0x01; geninterrupt(0x16); y=_FLAGS&0x40; if(y == 0) { _AH=0x00; geninterrupt(0x16); x=_AL; return x; } return '?'; } CS3369 Real Time Control Software/Wang Lusheng
Define air-plane as a class void main(void) { int driver = DETECT,mode; int sf=0, i,k,f=0,f3=0; char x; Air y1, y2, y3; initgraph(&driver,&mode,"a:\\bgi"); setcolor(WHITE); line(1,400,400,400); for ( i = 0; i < 120; i++ ) { setcolor(BLUE); y1.size=2; y1.planeshow(5*i, 5); x=read_key(); if (x =='u') f=f-8; if (x =='i') f=f+8; if (x=='o') f3=f3-8; if (x=='p') f3=f3+8; setcolor(YELLOW); y2.size=3; y2.planeshow(5*(i-8), f); setcolor(RED); y3.size=3; y3.planeshow(5*(i-16), f3); if(x=='k'){sf=1; y2.shoot(5*(i-8), f);} if (sf==0) delay (300); else sf=0; y1.ereasep(5*i, 5); y2.ereasep(5*(i-8), f); y3.ereasep(5*(i-16), f3); } closegraph(); } #include<dos.h> #include <graphics.h> #include<iostream.h> #include<conio.h> class Air{ public: int size; void planeshow(int i,int k); void ereasep(int i, int k); void shoot(int i, int k); }; void Air::planeshow(int i,int k) { int j; circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+size) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); circle(i+3, 200-2*size+k, size); } void Air::ereasep(int i, int k) { int j; setcolor(BLACK); circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+1) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); circle(i+3, 200-2*size+k, size); } void Air::shoot(int i, int k) {int j; sound(700); for(j=0; j<=10; j++) { setcolor(RED); line(i+j*30, 200+k,i+j*30+18, 200+k ); delay (30); setcolor(BLACK); line(i+j*30, 200+k,i+j*30+18, 200+k); } nosound(); } char read_key() { int y=1; char x; _AH=0x01; geninterrupt(0x16); y=_FLAGS&0x40; if(y == 0) { _AH=0x00; geninterrupt(0x16); x=_AL; return x; } return '?'; } CS3369 Real Time Control Software/Wang Lusheng
Define air-plane and Shoot classes void Air::ereasep(int i, int k) { int j; setcolor(BLACK); circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+1) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); circle(i+3, 200-2*size+k, size); } void Air::shoot(int i, int k) {int j; sound(700); for(j=0; j<=10; j++) { setcolor(RED); line(i+j*30, 200+k,i+j*30+18, 200+k ); delay (30); setcolor(BLACK); line(i+j*30, 200+k,i+j*30+18, 200+k); } nosound(); } #include<dos.h> #include <graphics.h> #include<iostream.h> #include<conio.h> class Air{ public: int size; void planeshow(int i,int k); void ereasep(int i, int k); void shoot(int i, int k); /*i decides the herizontal position */ /* k decides the vertical position */ }; void Air::planeshow(int i,int k) { int j; circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+size) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); circle(i+3, 200-2*size+k, size); } CS3369 Real Time Control Software/Wang Lusheng
Define air-plane and Shoot classes void main(void) { int driver = DETECT,mode; int sf=0, i,k,f=0,f3=0, xi=0, yi=0; char x; Air y1, y2, y3; Shoot bullet; initgraph(&driver,&mode,"a:\\bgi"); setcolor(WHITE); line(1,400,400,400); for ( i = 0; i < 80; i++ ) { setcolor(BLUE); y1.size=2; y1.planeshow(5*i, 5); x=read_key(); if (x =='u') f=f-8; if (x =='i') f=f+8; if (x=='o') f3=f3-8; if (x=='p') f3=f3+8; setcolor(YELLOW); y2.size=3; y2.planeshow(5*(i-8), f); if(x=='k'){sf=1; y2.shoot(5*(i-8), f);} setcolor(RED); y3.size=3;y3.planeshow(5*(i-16), f3); bullet.point(xi,yi); if(x=='l') bullet.sh(xi,yi); if (sf==0) delay (300); else sf=0; y1.ereasep(5*i, 5); y2.ereasep(5*(i-8), f); y3.ereasep(5*(i-16), f3); } closegraph(); } class Shoot { public: void point(int i, int k); void sh(int i, int k); }; void Shoot::point(int i, int k) { setcolor(YELLOW); circle(400+i, 400+k, 1); } void Shoot::sh(int i, int k) {int j; sound(900); for(j=0; j<=10; j++) { setcolor(RED); line(400-j*30+i, 400+k-30*j,400-j*30+i-10, 400+k-30*j-10); delay (30); setcolor(BLACK); line(400-j*30+i, 400+k-30*j,400-j*30+i-10, 400+k-30*j-10); } nosound(); } char read_key(); char read_key() { int y=1; char x; _AH=0x01; geninterrupt(0x16); y=_FLAGS&0x40; if(y == 0) { _AH=0x00; geninterrupt(0x16); x=_AL; return x; } return '?'; } CS3369 Real Time Control Software/Wang Lusheng
Attributes of air-plane: size, and position. Another definition of class Air void main(void) { int driver = DETECT,mode; int i,k,f=0,f3=0; char x; Air y1, y2, y3; initgraph(&driver,&mode,"a:\\bgi"); setcolor(WHITE); line(1,400,400,400); for ( i = 0; i < 80; i++ ) { x=read_key(); if (x =='u') f=f-8; if (x =='i') f=f+8; setcolor(BLUE); y1.size=2; y1.i=5*i; y1.k=f; y1.planeshow(); /*y1.planeshow(5*i, f); */ delay (300); y1.ereasep(); } closegraph(); } void Air::ereasep(int i, int k) { int j; setcolor(BLACK); circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+1) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); circle(i+3, 200-2*size+k, size); } char read_key() { int y=1; char x; _AH=0x01; geninterrupt(0x16); y=_FLAGS&0x40; if(y == 0) { _AH=0x00; geninterrupt(0x16); x=_AL; return x; } return '?'; } #include <graphics.h> #include<iostream.h> #include<conio.h> class Air{ public: int size; /** the size of the air-plane **/ int i; /** the horizontal position **/ int k /** the vertical position **// void planeshow(); void ereasep(); }; void Air::planeshow() { int j; circle(i+5, 200+size+k, size); circle(i+3, 200+2*size+k, size); for (j=0; j<=4+3*size; j=j+size) circle(i+j, 200+k, size); circle(i+5, 200-size+k, size); #include<dos.h> circle(i+3, 200-2*size+k, size); } CS3369 Real Time Control Software/Wang Lusheng