Advertisement
Guest User

2

a guest
May 23rd, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. class Figure {};
  6.  
  7. class Line : public Figure {
  8. public:
  9.     Line(int k, int b) {
  10.         Line::b = b;
  11.         Line::k = k;
  12.     }
  13.     int getK() {
  14.         return k;
  15.     }
  16.     int getB() {
  17.         return b;
  18.     }
  19. private:
  20.     int k, b;
  21. };
  22.  
  23. class Circle : public Figure {
  24. public:
  25.     Circle(int x, int y, int r) {
  26.         Circle::x = x;
  27.         Circle::y = y;
  28.     }
  29.  
  30.     int getX() {
  31.         return x;
  32.     }
  33.  
  34.     int getY() {
  35.         return y;
  36.     }
  37.  
  38.     int getR() {
  39.         return r;
  40.     }
  41. private:
  42.     int x, y, r;
  43. };
  44.  
  45. int main()
  46. {
  47.     setlocale(LC_ALL, "Russian");
  48.  
  49.     float k, b;
  50.     cout << "Уравнение прямой: y = kx + b. Введите:\n";
  51.     cout << "k = ";
  52.     cin >> k;
  53.     cout << "b = ";
  54.     cin >> b;
  55.  
  56.     Line line(k, b);
  57.  
  58.     float r, x, y;
  59.     cout << "\nОкружность задана радиусом и центром окружности. Введите:\n";
  60.     cout << "x = ";
  61.     cin >> x;
  62.     cout << "y = ";
  63.     cin >> y;
  64.     cout << "r = ";
  65.     cin >> r;
  66.  
  67.     Circle cirlce(x, y, r);
  68.  
  69.     if (y == k * x + b) {
  70.         cout << "\nПрямая является диаметром окружности";
  71.     }
  72.     else {
  73.         float d = (pow((2 * k*b - 2 * x - 2 * y*k), 2) - (4 + 4 * k*k)*(b*b - r * r + x * x + y * y - 2 * y*b));
  74.         if (d < 0) {
  75.             cout << "\nПрямая и окружность не пересекаются";
  76.         }
  77.         else {
  78.             float x1 = ((-(2 * k*b - 2 * x - 2 * y*k) - sqrt(d)) / (2 + 2 * k*k));
  79.             float x2 = ((-(2 * k*b - 2 * x - 2 * y*k) + sqrt(d)) / (2 + 2 * k*k));
  80.  
  81.             float y1 = k * x1 + b;
  82.             float y2 = k * x2 + b;
  83.  
  84.             if (x1 == x2) {
  85.                 cout << "\nПрямая и окружность имеют точку касания: (" << x1 << ";" << y1 << ")";
  86.             }
  87.             else {
  88.                 cout << "\nПрямая и окружность пересекаются в точках: (" << x1 << ";" << y1 << ") и (" << x2 << ";" << y2 << ")";
  89.             }
  90.         }
  91.     }
  92.  
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement