zadanie v nasledovnom programe pridajte do triedy c funkciu pre výpočet

40
ie ovnom programe pridajte do triedy C funkciu pre výp ocniny premennej x a v hlavnom programe túto hodnot { int x; void set (int ); int get(); : set (int value){ x = value; get(){return x;} :

Upload: caldwell-norman

Post on 03-Jan-2016

34 views

Category:

Documents


3 download

DESCRIPTION

Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet druhej mocniny premennej x a v hlavnom programe túto hodnotu vypíšte. class C { int x; public: void set (int ); int get(); }; void C:: set ( int value){ x = value; } - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

1. ZadanieV nasledovnom programe pridajte do triedy C funkciu pre výpočetdruhej mocniny premennej x a v hlavnom programe túto hodnotu vypíšte.

class C { int x; public: void set (int ); int get(); }; void C:: set (int value){ x = value; } int C:: get(){return x;}

Riešenie:

Page 2: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

class C { int x; public: void set (int ); int get(); int area(); }; void C:: set (int value){ x = value;} int C:: get(){return x;} int C:: area(){return x*x;}

#include <iostream.h> main(){ C c0; c0.set(3); cout << c0.area() << endl; // vypíše 9 return 0;}

Page 3: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

2. Pridajte do triedy konštruktor, ktorý inicializuje lokálnu premennú, v hlavnom programe ju vypíšte, zmeňte jej hodnotu a opäť ju vypíšte.

class C { int x; public: C(int ); void set (int ); int get(); }; C::C( int value){ x = value; } void C:: set (int value){ x = value; } int C:: get(){return x;}

Page 4: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

#include <iostream.h> main(){ C c0(3); cout << c0.get() << endl; // vypíše 3 c0.set(5); cout << c0.get() << endl; // vypíše 5 return 0; }

3. Implementujte triedu na výpočet plochy obdĺžnika a) bez konštruktora b) s konštruktorom V hlavnom programe vypíšte hodnotu plochy.

Page 5: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

a)#include <iostream.h> class CRectangle { int x, y; public: void set_values (int, int); int area () {return (x*y);}}; void CRectangle::set_values (int a, int b) { x = a; y = b;} int main () { CRectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); //vypíše area: 12 return 0;}

Page 6: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

b)#include <iostream.h> class CRectangle { int x, y; public: CRectangle (int, int); int area () {return (x*y);}};  CRectangle::CRectangle (int a, int b) { x = a; y = b;} int main () { CRectangle rect(3, 4); CRectangle rect1(5, 6); cout << “rect area: " << rect.area()<< endl; // rect area: 12 cout << “rect1 area: " << rect1.area()<< endl; // rect1 area: 30 return 0;}

Page 7: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

c) V triede CRectangle implementujte lokálnu premennú, ktorá bude obsahovať text, tak aby sa v hlavnom programe pri výpise plochy vypísalo text = hodnota plochy.

#include <iostream.h> class CRectangle { int x, y; char *text; public: CRectangle (int, int, char *); int area () { cout << text<< “= “; return (x*y);}};  CRectangle::CRectangle (int a, int b, char *s) {   x = a; y = b; text = s;}int main () { CRectangle rect(3, 4, “small rect”); cout << rect.area()<< endl; // small rect = 12 return 0;}

Page 8: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

d) V hlavnom programe vytvorte smerník na objekt typu CRectangle vytvorte objekt a vypíšte jeho plochu.

#include <iostream.h> class CRectangle { int x, y; public: CRectangle (int, int); int area () {return (x*y);}};  CRectangle::CRectangle (int a, int b) { x = a; y = b;} int main () { CRectangle rect(3, 4), *rect_p1, *rect_p2; rect_p1 = new CRectangle(3, 4); rect_p2 = &rect; cout << “rect area: " << rect_p1->area()<< endl; // rect area: 12 cout << “rect area: " << rect_p2->area()<< endl; // rect area: 12 delete rect_p1; return 0;}

Page 9: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

4) V triede C vytvorte statickú premennú, ktorá určí koľko objektov triedy bolo vytvorených a ktorej hodnota sa po zrušení objektu zníži. Pre kontrolu tlačte jej hodnoty v hlavnom programe.

class C{ public: static int m; C(){m++;}; ~C(){m--;}; }; int C::m = 0; main(){ C a; C b[5]; C *c = new C; cout << a.m<< endl; // 7 delete c; cout<< C::m<< endl; // 6 return 0;}

Page 10: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

5. Implementujte triedu umožňujúcu tvoriť zreťazený zoznam jej objektov. V hlavnej funkcii vytvorte v cykle zoznam 10 objektov.

class Box{ int length, width ; Box *another_box; public: Box(); void set_next_box( Box* ); Box *get_next(); }; Box::Box(){ length = 10; width = 10; another_box = NULL;} void Box::set_next_box(Box *new_box){another_box = new_box} Box* Box::get_next(){return another_box;}

Page 11: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

main(){ Box *start = NULL; // ukazuje na začiatok zoznamu Box *temp; // pomocný smerník Box *box_pointer; //použitý na tvorbu nového objektu for( int i =0 ; i<10; i++){ box_pointer = new Box; if (start == NULL){ start = box_pointer; // prvy prvok temp = start;} else temp->set_next_box(box_pointer); temp = box_pointer; } // po ukončení cyklu má posledný v another_box NULL temp = start; do{ temp = temp->get_next(); delete start; start = temp; }while(temp!= NULL); return 0;}

Page 12: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

6. Vytvorte triedu obdĺžnik s globálnymi funkciami na zadanie dĺžok strán a výpočtu plochy. Ako friend funkcie definujte prekryté operátory sčítania a súčinu, ktoré pridajú k stranám konštantu resp. násobne zväčšia strany obdĺžnika.

#include <iostream.h> class CRectangle { int x, y; public: void set_values (int a, int b) { x = a; y = b;} int area () {return (x*y);} friend CRectangle operator +(int , CRectangle); friend CRectangle operator *(int , CRectangle);};  CRectangle operator +(int a, CRectangle rect){ CRectangle temp; temp.x = a+ rect.x; temp.y = a+ rect.y; return temp;}

Page 13: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

CRectangle operator *(int a, CRectangle rect){ CRectangle temp; temp.x = a* rect.x; temp.y = a* rect.y; return temp;} main(){ CRectangle r; CRectangle temp; r.set_values(2,4); cout << r.area() <<endl; // result 8 temp= 3 + r; cout << temp.area() <<endl; // result 35 temp= 3*r; cout << temp.area() <<endl; // result 72 return 0; }

Page 14: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

7. Navrhnite triedy pre tvorbu rozvrhu prednášok na VŠ. Program by mal obsahovať nasledovné triedy: class Student, class Teacher, class Course a class Scheduler. Trieda Student by mala obsahovať premennú pre meno. Trieda Teacher by mala obsahovať lokálnu premennú na zadanie mena, lokálnu premennú, ktorá určuje koľko predmetov učiteľ učí a statickú premennú, ktorá určuje pre každého učiteľa hornú hranicu počtu predmetov ktoré môže maximálne učiteľ učiť. Globálna funkcia v tejto triede by mala umožniť testovanie či počet predmetov neprekročil danú hranicu. Trieda Course by mala obsahovať lokálne premenné ako číslo kurzu, čas kedy sa uskutoční a zoznam študentov, ktorý navštevujú kurz. Ako globálna premenná by mal byť objekt typu učiteľ, ktorý daný kurz učí a globálnu funkciu pre jej zadanie. Trieda Scheduler by mala ako lokálnu premennú obsahovať pole ponúkaných kurzov a globálnu funkciu na priradenie učiteľa ku špecifikovanému kurzu.

Page 15: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

#include <stdio.h>#include <iostream.h>enum bool {FALSE=0, TRUE=1};class Teacher { char *name; // name of teacher int courses; static int MaxCourses; public: Teacher(){}; //empty constructor Teacher(char* newName):courses(0){ // constructor name = newName;} bool assign(); //member function void print(){ printf("the teachers name is: %s \n", name);}};class Student{ char *name; // name of student public: Student(){ cout<< “give student’s name: “; cin >>name;} };

Page 16: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

int Teacher:: MaxCourses =3;

bool Teacher::assign(){ if(courses < MaxCourses){ // test for teachar’s number of courses++; // courses return TRUE; } else return FALSE; }

Page 17: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

class Course { char *number; // course number as string char *time; // time slot as string Student *students; // pointer to students in classpublic: Course(); //empty constructor Course(char *n, char *t, int s); // constructor with parameters ~Course(){ delete students;}; //destructor Teacher teacher; // teacher for class void assignTeacher(Teacher& t);}; Course(){ number = “unassigned”; time = “T1”;} Course(char *n, char *t, int s){ number = n; time = t; students = new student[s];}

Page 18: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

void Course::assignTeacher(Teacher &t){ if (t.assign()) teacher = t; else printf(“more then MaxCourses! \n”);}class Schedule { Course *offerings[10]; // array of courses int offered; // number of courses offeredpublic: Schedule():offered(0){} void assign(Course &c, Teacher &t); // bolo *c, *t }; void Schedule::assign(Course &c, Teacher &t){ if (offered < 10) { offerings[offered++] = &c; c.assignTeacher (t); } else printf("Schedule full ! \n"); }

Page 19: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

main(){ Schedule s; //vytvorenie objektu rozvrhu Teacher t1(“John”), t2(“Jack”); // vytvorenie objektov učiteľa Course c1(“No1”, “10.00-12.00”,6); // vytvorenie objektov kurzu Course c2(“No2”, “13.00-14.00”,5); s.assign(c1, t1); // priradenie učiteľa kurzu s. assign(c2, t2); cout << “Teacher of first course:” << endl; c1.teacher.print(); cout << “Teacher of second course:” << endl; c2.teacher.print(); return 0;}

Page 20: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

9. Navrhnite program pre riadenie spúšťania závor na železničnom prechode s nasledovnými predpokladmi. Vlak má konštantnú rýchlosť a vo vzdialenosti d1 od prechodu vyšle senzor signál o priblížení sa vlaku k prechodu. Signál je určený pre riad. systém (RS), ktorý dá do 1 časovej jednotky povel na spustenie závor. Závory sa spustia tiež do 1 časovej jednotky. Keď vlak minie prechod ( vzdialenosť d2) vyšle senzor opäť signál RS, že prechod je volný. RS vyšle do 1 časovej jednotky povel na zdvihnutie závor a tie sa do 2 časových jednotiek zdvihnú. Návrh riešenia: Vytvorte triedy Train, Controller a Gate (Vlak, RS, Závory) v stavovo prechodovej reprezentácii (model je konečný automat). Globálny čas simulujte ako celočíselnú premennú, ktorá sa bude v hlavnom programe inkrementovať. Časové ohraničenia na prechody medzi stavmi objektov pre všetky triedy simulujte lokálnymi časovými premennými a implementujte ich v danej triede.

Page 21: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Prechody medzi stavmi sú aktivované takto: pre objekt triedy Train: s0->s1 prejdenou vzdialenosťou d1 s1->s2 2 časovými jednotkami s2->s3 do 5 časových jednotiek s3-> s4=s0 po prejdení vzdialenosti d2 pre objekt triedy Controller: u0->u1 signálom senzora o priblížení sa vlaku u1-> u0 uplynutím 1 časovej jednotky u0-> u2 signálom senzora o minutí prechodu vlakom u2-> u0 uplynutím 1 časovej jednotky pre objekt triedy Gate: t0->t1 povelom RS na sklopenie závor t1-> t2 uplynutím 1 časovej jednotky t2-> t3 povelom RS na zdvihnutie závor t3-> t0 uplynutím 2 časových jednotiek

Page 22: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Stavové diagramy objektov v tvare časových automatov

Page 23: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2in

out!

exit!

lower?, y:=0

down!

y>1up!

exit?,z:=0

raise! z=1, lower!

approach?, z:=0

raise?, y:=0

train||gait||controller

train gate

controller

Page 24: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Simulácia dynamiky vývoja stavových diagramov v závislosti

na vzniku udalostí a čase

Page 25: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!,

x>2

y:=0

y>1

z:=0

approach?,

y:=0

train||gait||controller

train gate

controller

x:=0

z:=1

z:=0

Page 26: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2

y:=0

y>1

z:=0

z=1,

approach?, z:=0

y:=0

train||gait||controller

train gate

controller

lower!

lower?,

Page 27: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2

lower?, y:=0

down!

y>1

z:=0

z=1, lower!

approach?, z:=0

y:=0

train||gait||controller

train gate

controller

Page 28: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

in!

lower?, y:=0

down!

y>1

z:=0

z=1, lower!

approach?, z:=0

y:=0

train||gait||controller

train gate

controller

x>2

Page 29: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2in!

out!

lower?, y:=0

down!

y>1

z:=0

z=1, lower!

approach?, z:=0

y:=0

train||gait||controller

train gate

controller

Page 30: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2in!

out!

exit!

lower?, y:=0

down!

y>1

exit?,

z=1, lower!

approach?, z:=0

y:=0

train||gait||controller

train gate

controllerz:=0

Page 31: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2in!

out!

exit!

lower?, y:=0

down!

y>1

exit?,z:=0

raise! z=1, lower!

approach?, z:=0

raise?,

train||gait||controller

train gate

controllery:=0

Page 32: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2in!

out!

exit!

lower?, y:=0

down!

y>1

exit?,z:=0

raise! z=1, lower!

approach?, z:=0

raise?, y:=0

train||gait||controller

train gate

controller

up!

Page 33: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train-gate example

s2

t0

t2

u0

s0

x<5

s1

x<5

s3

x<5

u2

z<1

u1

z<1

t1

y<1

t3

y<2

approach!, x:=0

x>2in

out!

exit!

lower?, y:=0

down!

y>1up!

exit?,z:=0

raise! z=1, lower!

approach?, z:=0

raise?, y:=0

train||gait||controller

train gate

controller

Page 34: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

#include <iostream.h>

int global_time;int d1,d2;enum train_state{s0,s1,s2,s3,s4};enum gate_state{t0,t1,t2,t3};enum contr_state{u0,u1,u2};

class Gate{ gate_state actual_state; //aktuálny stav int control_signal; int clock_y; //lokálna časová premenná public:

Gate(gate_state); void lower(){control_signal=1;} // povel na spustenie závor void raise(){control_signal=0;} // povel na zdvihnutie závor void Change_state(); // funkcia na zmenu stavu void print(){cout <<"gate state ="<<actual_state <<endl;}

};

Page 35: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

class Controller{ int signal; // signal o polohe vlaku contr_state actual_state; // aktuálny stav int clock_z; // lokálny čas public:

Controller(contr_state); Gate *g;

void approach(){signal=1;}; //funkcie pre nastavenie signalu o polohe vlaku void exit(){signal=0;}; void Change_state(); //funkcia pre zmenu stavu void print(){cout <<"controller state ="<<actual_state <<endl;}

};class Train{ float velocity,distance; //rýchlosť vlaku a prejdená vzdialenosť train_state actual_state; //aktuálny stav int clock_x; // lokálny čas public:

Train(train_state, float);void Change_state(); //funkcia pre zmenu stavuController *c;train_state get_state(); //funkcia vracajúca aktuálny stavvoid print(){cout <<"train="<<actual_state <<"\n";}

};

Page 36: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

Train::Train(train_state init_state, float vel){ actual_state=init_state; distance=0; velocity= vel; clock_x=0; }

train_state Train::get_state(){ return actual_state;}

Controller::Controller(contr_state init_state){ actual_state=init_state; signal=3; clock_z=0;}

Gate::Gate(gate_state init_state){ actual_state= init_state; clock_y= 0; control_signal=3; }

Page 37: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

void Train::Change_state(){ distance= velocity*global_time; switch (actual_state){

case s0: clock_x= 0;

if(distance==d1){actual_state=s1;c->approach();};break;case s1:if(clock_x>2)actual_state=s2; //inbreak;case s2:if (clock_x<=5)actual_state=s3; //outbreak;case s3:if(distance>d2){actual_state=s4;c->exit();}break;} clock_x++;

}

Page 38: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

void Controller::Change_state(){ switch (actual_state){ case u0: if(signal==1){ clock_z=0; actual_state=u1; signal=3;} else if(signal==0){ clock_z=0; actual_state=u2; signal=3;} break; case u1: if(clock_z==1){ actual_state=u0; g->lower();} break; case u2: if(clock_z==1){ actual_state=u0; g->raise();} break; }clock_z++;}

Page 39: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

void Gate::Change_state(){ switch (actual_state){

case t0: clock_y= 0;

if(control_signal==1)actual_state=t1;break;case t1:if(clock_y<=1)actual_state=t2; //downbreak;case t2:if (control_signal==0){actual_state=t3;clock_y= 0;}break;case t3:if (clock_y>1)actual_state=t0; //upbreak;}clock_y++;

}

Page 40: Zadanie V nasledovnom programe pridajte do triedy C funkciu pre výpočet

void Start(Train *T, Controller *C, Gate *G){ T->Change_state(); T->print(); C->Change_state(); C->print(); G->Change_state(); G->print(); }main(){ d1=200; d2=700; global_time=0; Train tr(s0,100); Controller con(u0); Gate gt(t0); tr.c= &con; con.g= &gt; do{ Start(&tr, &con, &gt); global_time++; } while (while (global_time<12); return 0;}