mirror of
				https://github.com/dancojocaru2000/y3s2-cciot-hw.git
				synced 2025-11-04 07:56:32 +02:00 
			
		
		
		
	Solved Lab1 Slide17
This commit is contained in:
		
							parent
							
								
									e90300843f
								
							
						
					
					
						commit
						0c2d77569a
					
				
					 5 changed files with 284 additions and 0 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					a.exe
 | 
				
			||||||
 | 
					a.out
 | 
				
			||||||
							
								
								
									
										3
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -3,5 +3,8 @@
 | 
				
			||||||
		"MD024": {
 | 
							"MD024": {
 | 
				
			||||||
			"siblings_only": true
 | 
								"siblings_only": true
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"files.associations": {
 | 
				
			||||||
 | 
							"ostream": "cpp"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -63,3 +63,14 @@ public:
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Slide 17
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Problem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Write a program that implements a class hierarchy that can be used to model geometric shapes, based on the following structure:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[shape_start.cpp](./shape_start.cpp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Solution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See [shape_start_sol.cpp](./shape_start_sol.cpp).
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										95
									
								
								Lab1/shape_start.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								Lab1/shape_start.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,95 @@
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <math.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef M_PI
 | 
				
			||||||
 | 
					#define M_PI (3.14159265358979323846)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum BOOL { FALSE, TRUE };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GeneralShape
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        GeneralShape(){};
 | 
				
			||||||
 | 
					        ~GeneralShape(){};
 | 
				
			||||||
 | 
					        virtual long GetArea() = 0;
 | 
				
			||||||
 | 
					        virtual long GetPerim()= 0;
 | 
				
			||||||
 | 
					        virtual void Draw() = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GeneralShape::Draw()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    cout << "drawing mechanism!" << endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Circle : public GeneralShape
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        Circle(int radius):itsRadius(radius){}
 | 
				
			||||||
 | 
					        ~Circle(){}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        int itsRadius;
 | 
				
			||||||
 | 
					        int itsCircumference;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Rectangle : public GeneralShape
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        Rectangle(int len, int width):
 | 
				
			||||||
 | 
					        itsLength(len), itsWidth(width){}
 | 
				
			||||||
 | 
					        ~Rectangle(){}
 | 
				
			||||||
 | 
					        virtual int GetLength() { return itsLength; }
 | 
				
			||||||
 | 
					        virtual int GetWidth() { return itsWidth; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        int itsWidth;
 | 
				
			||||||
 | 
					        int itsLength;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Square : public Rectangle
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        Square(int len);
 | 
				
			||||||
 | 
					        Square(int len, int width);
 | 
				
			||||||
 | 
					        ~Square(){}
 | 
				
			||||||
 | 
					        long GetPerim() {return 4 * GetLength();}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Square::Square(int len):
 | 
				
			||||||
 | 
					Rectangle(len,len)
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Square::Square(int len, int width):
 | 
				
			||||||
 | 
					Rectangle(len,width)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 if (GetLength() != GetWidth())
 | 
				
			||||||
 | 
					  cout << "Error, not a square... a Rectangle??\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int choice;
 | 
				
			||||||
 | 
					 BOOL quit = FALSE;
 | 
				
			||||||
 | 
					 GeneralShape *sp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: ";
 | 
				
			||||||
 | 
					        cin >> choice;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        switch (choice)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            default: quit = TRUE;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (quit) break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cout << endl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										173
									
								
								Lab1/shape_start_sol.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								Lab1/shape_start_sol.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,173 @@
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <math.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef M_PI
 | 
				
			||||||
 | 
					#define M_PI (3.14159265358979323846)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum BOOL { FALSE, TRUE };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GeneralShape {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        GeneralShape(){};
 | 
				
			||||||
 | 
					        ~GeneralShape(){};
 | 
				
			||||||
 | 
					        virtual long GetArea() = 0;
 | 
				
			||||||
 | 
					        virtual long GetPerim()= 0;
 | 
				
			||||||
 | 
					        virtual void Draw() = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GeneralShape::Draw() {
 | 
				
			||||||
 | 
					    cout << "drawing mechanism!" << endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Circle : public GeneralShape {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        Circle(int radius):itsRadius(radius), itsCircumference(2*M_PI*radius){}
 | 
				
			||||||
 | 
					        ~Circle(){}
 | 
				
			||||||
 | 
					        virtual long GetArea();
 | 
				
			||||||
 | 
					        virtual long GetPerim();
 | 
				
			||||||
 | 
					        virtual void Draw();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        int itsRadius;
 | 
				
			||||||
 | 
					        int itsCircumference;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					long Circle::GetArea() {
 | 
				
			||||||
 | 
					    return M_PI * itsRadius * itsRadius;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					long Circle::GetPerim() {
 | 
				
			||||||
 | 
					    return itsCircumference;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Circle::Draw() {
 | 
				
			||||||
 | 
					    cout << "Drawing circle with r=" << itsRadius << ", area=" << GetArea() << ", perim=" << GetPerim() << endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Rectangle : public GeneralShape {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        Rectangle(int len, int width):
 | 
				
			||||||
 | 
					        itsLength(len), itsWidth(width){}
 | 
				
			||||||
 | 
					        ~Rectangle(){}
 | 
				
			||||||
 | 
					        virtual int GetLength() { return itsLength; }
 | 
				
			||||||
 | 
					        virtual int GetWidth() { return itsWidth; }
 | 
				
			||||||
 | 
					        virtual long GetArea();
 | 
				
			||||||
 | 
					        virtual long GetPerim();
 | 
				
			||||||
 | 
					        virtual void Draw();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        int itsWidth;
 | 
				
			||||||
 | 
					        int itsLength;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					long Rectangle::GetArea() {
 | 
				
			||||||
 | 
					    return itsLength * itsWidth;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					long Rectangle::GetPerim() {
 | 
				
			||||||
 | 
					    return (itsLength + itsWidth) * 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rectangle::Draw() {
 | 
				
			||||||
 | 
					    cout << "Drawing rectangle with W=" << itsWidth << ", H=" << itsLength << ", area=" << GetArea() << ", perim=" << GetPerim() << endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Square : public Rectangle {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        Square(int len);
 | 
				
			||||||
 | 
					        Square(int len, int width);
 | 
				
			||||||
 | 
					        ~Square(){}
 | 
				
			||||||
 | 
					        long GetPerim() {return 4 * GetLength();}
 | 
				
			||||||
 | 
					        virtual void Draw();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Square::Square(int len): Rectangle(len,len) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Square::Square(int len, int width): Rectangle(len,width) {
 | 
				
			||||||
 | 
					    if (GetLength() != GetWidth()) {
 | 
				
			||||||
 | 
					        cout << "Error, not a square... a Rectangle??\n";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Square::Draw() {
 | 
				
			||||||
 | 
					    cout << "Drawing square with L=" << GetLength() << ", area=" << GetArea() << ", perim=" << GetPerim() << endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void shapeMenu(GeneralShape& shape) {
 | 
				
			||||||
 | 
					    bool stop {false};
 | 
				
			||||||
 | 
					    int choice {};
 | 
				
			||||||
 | 
					    while (1) {
 | 
				
			||||||
 | 
					        cout << "(1)Draw (2)Get Perimeter (3)Get Area (0)Back: ";
 | 
				
			||||||
 | 
					        cin >> choice;
 | 
				
			||||||
 | 
					        switch (choice) {
 | 
				
			||||||
 | 
					            case 1:
 | 
				
			||||||
 | 
					                shape.Draw();
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 2:
 | 
				
			||||||
 | 
					                cout << shape.GetPerim() << endl;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 3:
 | 
				
			||||||
 | 
					                cout << shape.GetArea() << endl;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            default:
 | 
				
			||||||
 | 
					                stop = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (stop) break;
 | 
				
			||||||
 | 
					        cout << endl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void circleMenu() {
 | 
				
			||||||
 | 
					    int radius;
 | 
				
			||||||
 | 
					    cout << "Radius? ";
 | 
				
			||||||
 | 
					    cin >> radius;
 | 
				
			||||||
 | 
					    Circle c {radius};
 | 
				
			||||||
 | 
					    shapeMenu(c);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void rectMenu() {
 | 
				
			||||||
 | 
					    int width, height;
 | 
				
			||||||
 | 
					    cout << "Width? ";
 | 
				
			||||||
 | 
					    cin >> width;
 | 
				
			||||||
 | 
					    cout << "Height? ";
 | 
				
			||||||
 | 
					    cin >> height;
 | 
				
			||||||
 | 
					    Rectangle r {height, width};
 | 
				
			||||||
 | 
					    shapeMenu(r);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void squareMenu() {
 | 
				
			||||||
 | 
					    int length;
 | 
				
			||||||
 | 
					    cout << "Side Length? ";
 | 
				
			||||||
 | 
					    cin >> length;
 | 
				
			||||||
 | 
					    Square s {length};
 | 
				
			||||||
 | 
					    shapeMenu(s);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					    int choice;
 | 
				
			||||||
 | 
					    BOOL quit = FALSE;
 | 
				
			||||||
 | 
					    GeneralShape *sp;
 | 
				
			||||||
 | 
					    while (1) {
 | 
				
			||||||
 | 
					        cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: ";
 | 
				
			||||||
 | 
					        cin >> choice;
 | 
				
			||||||
 | 
					        switch (choice) {
 | 
				
			||||||
 | 
					            case 1:
 | 
				
			||||||
 | 
					                circleMenu();
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 2:
 | 
				
			||||||
 | 
					                rectMenu();
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 3:
 | 
				
			||||||
 | 
					                squareMenu();
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            default: quit = TRUE;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (quit) break;
 | 
				
			||||||
 | 
					        cout << endl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue