Advertisement
Loloped

Lera Dombrovskaya

Dec 8th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1. // Задание 23 https://pp.vk.me/c837335/v837335867/142e0/B0zd45pBjIA.jpg
  2.  
  3. #include "stdafx.h"
  4.  
  5. #include <iostream>
  6. #include <conio.h>
  7. #include <clocale>
  8. #include <math.h>
  9.  
  10. using namespace std;
  11.  
  12. double getDistance(double x1, double y1, double x2, double y2) // Найти расстояние между двумя точками на плоскости
  13. {
  14.     return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
  15. }
  16.  
  17. double getPerimeter(double **myArray, int a, int b, int c)
  18. {
  19.     return getDistance(myArray[a][0], myArray[a][1], myArray[b][0], myArray[b][1]) + getDistance(myArray[a][0], myArray[a][1], myArray[c][0], myArray[c][1]) + getDistance(myArray[c][0], myArray[c][1], myArray[b][0], myArray[b][1]);
  20. }
  21.  
  22. void findTrio(double **myArray, int capacity) // Найти три искомые точки
  23. {
  24.     double maxPerimeter = -1;
  25.     double currentPerimeter = -1;
  26.  
  27.     int p1 = 0;
  28.     int p2 = 0;
  29.     int p3 = 0;
  30.  
  31.     for (int n = 0; n < capacity - 2; n++)
  32.         for (int m = n + 1; m < capacity - 1; m++)
  33.             for (int l = m + 1; l < capacity; l++)
  34.             {
  35.                 currentPerimeter = getPerimeter(myArray, n, m, l);
  36.                 if (maxPerimeter < currentPerimeter)
  37.                 {
  38.                     maxPerimeter = currentPerimeter;
  39.                     p1 = n;
  40.                     p2 = m;
  41.                     p3 = l;
  42.                 }
  43.             }
  44.  
  45.     printf_s("Искомые точки:\n%4.2f %4.2f\n%4.2f %4.2f\n%4.2f %4.2f\n", myArray[p1][0], myArray[p1][0], myArray[p2][0], myArray[p2][1], myArray[p3][0], myArray[p3][1]);
  46.     printf_s("\nИх периметр равен: %4.2f", maxPerimeter);
  47. }
  48.  
  49. int main()
  50. {
  51.     int capacity; // Сколько точек
  52.     const int dimension = 2; // Двумерное пространство (плоскость)
  53.  
  54.     setlocale(LC_CTYPE, "rus"); // Выводимый текст будет на кириллице
  55.     printf_s("Укажите, сколько точек будет определено:\n");
  56.     scanf_s("%d", &capacity);
  57.  
  58.     // динамическое создание двумерного массива вещественных чисел
  59.     double **pointsArray = new double*[capacity]; // число строк в массиве
  60.     for (int count = 0; count < capacity; count++)
  61.         pointsArray[count] = new double[dimension]; // число пять столбцов
  62.  
  63.     printf_s("\nВведите точки в формате \"x y\" (без кавычек):\n");
  64.     for (int i = 0; i < capacity; i++) // Заполнение массива
  65.         for (int j = 0; j < dimension; j++)
  66.         {
  67.             scanf_s("%lf", &pointsArray[i][j]);
  68.         }
  69.  
  70.     printf_s("\nВаши точки: \n");
  71.     for (int i = 0; i < capacity; i++) // вывод массива
  72.     {
  73.         for (int j = 0; j < dimension; j++)
  74.             printf_s("%4.2f ", pointsArray[i][j]);
  75.         printf_s("\n");
  76.     }
  77.     printf_s("\n");
  78.  
  79.     findTrio(pointsArray, capacity);
  80.  
  81.     _getch(); // Приложение не закроется после выполнения
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement