1 / 40

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

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; }

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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; • } • int C:: get(){return x;} • Riešenie:

  2. 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;}

  3. 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;}

  4. #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.

  5. 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; }

  6. 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; // rectarea: 12 cout << “rect1 area: " << rect1.area()<< endl; // rect1 area: 30 return 0; }

  7. 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;}

  8. 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; // rectarea: 12 cout << “rect area: " << rect_p2->area()<< endl; // rectarea: 12 delete rect_p1; return 0;}

  9. 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;}

  10. 5. Implementujte triedu umožňujúcu tvoriť zreťazený zoznam jej objektov. V hlavnej funkcii vytvorte v cykle zoznam 10 objektov. classBox{ 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;}

  11. 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;}

  12. 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;}

  13. 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; }

  14. 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 Teacherby 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.

  15. #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;} };

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

  17. class Course { char *number; // course number as string char *time; // time slot as string Student *students; // pointer to students in class public: 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];}

  18. 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 offered public: 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"); }

  19. 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; }

  20. 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.

  21. 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

  22. Stavové diagramy objektov v tvare časových automatov

  23. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 up! x>2 in exit! down! t3 out! s3 s2 t2 y<2 x<5 x<5 raise?, y:=0 controller approach?, z:=0 exit?,z:=0 u2 u1 u0 z<1 z<1 raise! z=1, lower! train||gait||controller

  24. Simulácia dynamiky vývoja stavových diagramov v závislosti na vzniku udalostí a čase

  25. Train-gate example train gate approach!, x:=0 y:=0 s1 s0 t0 t1 x<5 y<1 y>1 x>2 t3 s3 s2 t2 y<2 x<5 x<5 y:=0 controller approach?, z:=0 z:=0 u2 u1 u0 z<1 z<1 z:=1 train||gait||controller

  26. Train-gate example train gate approach!, x:=0 lower?, s1 y:=0 s0 t0 t1 x<5 y<1 y>1 x>2 t3 s3 s2 t2 y<2 x<5 x<5 y:=0 controller approach?, z:=0 z:=0 u2 u1 u0 z<1 z<1 lower! z=1, train||gait||controller

  27. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 x>2 down! t3 s3 s2 t2 y<2 x<5 x<5 y:=0 controller approach?, z:=0 z:=0 u2 u1 u0 z<1 z<1 z=1, lower! train||gait||controller

  28. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 x>2 in! down! t3 s3 s2 t2 y<2 x<5 x<5 y:=0 controller approach?, z:=0 z:=0 u2 u1 u0 z<1 z<1 z=1, lower! train||gait||controller

  29. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 x>2 in! down! t3 out! s3 s2 t2 y<2 x<5 x<5 y:=0 controller approach?, z:=0 z:=0 u2 u1 u0 z<1 z<1 z=1, lower! train||gait||controller

  30. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 x>2 in! exit! down! t3 out! s3 s2 t2 y<2 x<5 x<5 y:=0 controller approach?, z:=0 z:=0 exit?, u2 u1 u0 z<1 z<1 z=1, lower! train||gait||controller

  31. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 x>2 in! exit! down! t3 out! s3 s2 t2 y<2 x<5 x<5 raise?, y:=0 controller approach?, z:=0 exit?,z:=0 u2 u1 u0 z<1 z<1 raise! z=1, lower! train||gait||controller

  32. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 x>2 in! exit! up! down! t3 out! s3 s2 t2 y<2 x<5 x<5 raise?, y:=0 controller approach?, z:=0 exit?,z:=0 u2 u1 u0 z<1 z<1 raise! z=1, lower! train||gait||controller

  33. Train-gate example train gate approach!, x:=0 lower?, y:=0 s1 s0 t0 t1 x<5 y<1 y>1 up! x>2 in exit! down! t3 out! s3 s2 t2 y<2 x<5 x<5 raise?, y:=0 controller approach?, z:=0 exit?,z:=0 u2 u1 u0 z<1 z<1 raise! z=1, lower! train||gait||controller

  34. #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;} };

  35. 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 stavu Controller *c; train_state get_state(); //funkcia vracajúca aktuálny stav void print(){cout <<"train="<<actual_state <<"\n";} };

  36. 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; }

  37. 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; //in break; case s2: if (clock_x<=5) actual_state=s3; //out break; case s3: if(distance>d2){ actual_state=s4; c->exit();} break; } clock_x++; }

  38. 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++; }

  39. 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; //down break; case t2: if (control_signal==0){ actual_state=t3; clock_y= 0;} break; case t3: if (clock_y>1) actual_state=t0; //up break; } clock_y++; }

  40. 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; }

More Related