Advertisement
Guest User

Rectangle and circle

a guest
Jun 1st, 2016
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.18 KB | None | 0 0
  1. #include <SFML\Graphics.hpp>
  2. #include <iostream>
  3.  
  4. void drawRectangle(double& a, double& b);
  5. void drawCircle(double& size);
  6. std::string drawOptionsAndGetSelected();
  7.  
  8. void executeOptions(std::string& selected);
  9.  
  10. double calculateFieldRect(double& a, double& b);
  11. double calculateFieldCircle(double& radious, double& pi);
  12. double calculatePerimeterRect(double& a, double& b);
  13. double calculatePerimeterCircle(double& radious, double& pi);
  14.  
  15.  
  16. int main()
  17. {
  18.     while (1)
  19.     {
  20.         executeOptions(drawOptionsAndGetSelected());
  21.     }
  22. }
  23.  
  24. void drawRectangle(double & a, double & b)
  25. {
  26.     sf::RenderWindow * window = new sf::RenderWindow;
  27.     sf::RectangleShape * rectShape = new sf::RectangleShape;
  28.     sf::Vector2f rectSize(a, b);
  29.     int scale = 1;
  30.  
  31.     while (rectSize.x > 700 || rectSize.y > 700)
  32.     {
  33.         rectSize /= 2.f;
  34.         scale++;
  35.     }
  36.  
  37.     rectShape->setSize(rectSize);
  38.     rectShape->setFillColor(sf::Color::Green);
  39.  
  40.     window->create(sf::VideoMode(rectSize.x, rectSize.y), "Rectangle", sf::Style::None);
  41.  
  42.     window->clear();
  43.     window->draw(*rectShape);
  44.     window->display();
  45.  
  46.     if (scale > 1)
  47.     {
  48.         std::cout << "Scale: 1:" << scale << "\n";
  49.     }
  50.  
  51.     std::cin.get();
  52.     std::cin.get();
  53.  
  54.     window->close();
  55.  
  56.     delete rectShape;
  57.     delete window;
  58. }
  59.  
  60. void drawCircle(double & radious)
  61. {
  62.     sf::CircleShape * circleShape = new sf::CircleShape;
  63.     sf::RenderWindow * window = new sf::RenderWindow;
  64.     double circleRadious = radious;
  65.     int scale = 1;
  66.  
  67.     while (circleRadious * 2 > 700)
  68.     {
  69.         circleRadious /=  2.;
  70.         scale++;
  71.     }
  72.  
  73.     circleShape->setRadius(circleRadious);
  74.     circleShape->setFillColor(sf::Color::Green);
  75.    
  76.     window->create(sf::VideoMode(circleRadious * 2, circleRadious * 2), "Circle", sf::Style::None);
  77.  
  78.     window->clear();
  79.     window->draw(*circleShape);
  80.     window->display();
  81.  
  82.     if (scale > 1)
  83.     {
  84.         std::cout << "Scale: 1:" << scale << "\n";
  85.     }
  86.  
  87.     std::cin.get();
  88.     std::cin.get();
  89.  
  90.     window->close();
  91.  
  92.     delete circleShape;
  93.     delete window;
  94. }
  95.  
  96. std::string drawOptionsAndGetSelected()
  97. {
  98.     std::string str;
  99.  
  100.     std::cout << "----------//////////||||||||||\\\\\\\\\\\\\\\\\\\\----------\n";
  101.     std::cout << "\t\tCircle and Rectangle\n";
  102.     std::cout << "\t\t\tMENU\n";
  103.     std::cout << "1. Calculate rectangle field.\n";
  104.     std::cout << "2. Calculate rectangle perimeter.\n";
  105.     std::cout << "3. Calculate circle field.\n";
  106.     std::cout << "4. Calculate circle perimeter.\n";
  107.     std::cout << "5. Exit\n";
  108.  
  109.     std::cin >> str;
  110.     return str;
  111. }
  112.  
  113. void executeOptions(std::string& selected)
  114. {
  115.     double *a, *b;
  116.     double *radious;
  117.     double *pi;
  118.    
  119.     switch (selected[0])
  120.     {
  121.     case '1':
  122.         a = new double;
  123.         b = new double;
  124.         std::cout << "Side A:\n";
  125.         std::cin >> *a;
  126.         std::cout << "Side B: \n";
  127.         std::cin >> *b;
  128.  
  129.         std::cout << "Field of rectangle: " << calculateFieldRect(*a, *b) << "\n";
  130.         drawRectangle(*a, *b);
  131.        
  132.         delete a;
  133.         delete b;
  134.         break;
  135.  
  136.     case '2':
  137.         a = new double;
  138.         b = new double;
  139.         std::cout << "Side A:\n";
  140.         std::cin >> *a;
  141.         std::cout << "Side B: \n";
  142.         std::cin >> *b;
  143.  
  144.         std::cout << "Perimeter of rectangle: " << calculatePerimeterRect(*a, *b) << "\n";
  145.         drawRectangle(*a, *b);
  146.        
  147.         delete a;
  148.         delete b;
  149.         break;
  150.  
  151.     case '3':
  152.         radious = new double;
  153.         pi = new double;
  154.         std::cout << "Radious: \n";
  155.         std::cin >> *radious;
  156.         std::cout << "Pi: (3.14)\n";
  157.         std::cin >> *pi;
  158.  
  159.         std::cout << "Field of circle: " << calculateFieldCircle(*radious, *pi);
  160.         drawCircle(*radious);
  161.         delete radious;
  162.         delete pi;
  163.         break;
  164.  
  165.     case '4':
  166.         radious = new double;
  167.         pi = new double;
  168.         std::cout << "Radious: \n";
  169.         std::cin >> *radious;
  170.         std::cout << "Pi: (3.14)\n";
  171.         std::cin >> *pi;
  172.  
  173.         std::cout << "Perimeter of circle: " << calculatePerimeterCircle(*radious, *pi);
  174.         drawCircle(*radious);
  175.         delete radious;
  176.         delete pi;
  177.         break;
  178.  
  179.     case '5':
  180.         exit(0);
  181.         break;
  182.  
  183.     default:
  184.         std::cout << "Error: Bad option selected, try again.\n";
  185.     }
  186. }
  187.  
  188. double calculateFieldRect(double & a, double & b)
  189. {
  190.     return a*b;
  191. }
  192.  
  193. double calculateFieldCircle(double & radious, double & pi)
  194. {
  195.     return radious*radious * pi;
  196. }
  197.  
  198. double calculatePerimeterRect(double & a, double & b)
  199. {
  200.     return 2*a + 2*b;
  201. }
  202.  
  203. double calculatePerimeterCircle(double & radious, double & pi)
  204. {
  205.     return 2*pi*radious;
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement