Petro_zzz

new_lesson12

Sep 23rd, 2022
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.50 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. void sername() {
  7.     std::string strs[]{ "Ivanov", "Petrov" };
  8.  
  9.     std::cout << strs[0].length() <<
  10.         " " << strs[0] << std::endl;
  11.  
  12.     char** strs2 = new char* [5];
  13.     strs2[0] = new char[] {"Kulibin" };
  14.     strs2[1] = new char[] {"Larin" };
  15.  
  16.     std::cout << _msize(strs2[0]) / sizeof(char) - 1 <<
  17.         " " << strs2[0] << std::endl;
  18.  
  19.     delete[] strs2[1];
  20.     delete[] strs2[0];
  21.     delete[] strs2;
  22. }
  23.  
  24. // это шаблон
  25. template<typename T>
  26. T my_abs(T x) {
  27.     return (x < 0) ? -x : x;
  28. }
  29.  
  30. // это те перегрузки которые сделает шаблон, написанный выше
  31. int my_abs(int x) {
  32.     return (x < 0) ? -x : x;
  33. }
  34.  
  35. double my_abs(double x) {
  36.     return (x < 0) ? -x : x;
  37. }
  38.  
  39. // тут вызываем фукции реализованные шаблоном
  40. void task1() {
  41.     std::cout << my_abs(5) << " ";
  42.     std::cout << my_abs(5.4) << std::endl;
  43. }
  44.  
  45. // вспоминали статические и динамические массивы
  46. void test_static_dinamic_array() {
  47.     const int n = 0x1A;
  48.     int arr[n];
  49.     cout << n << " " << sizeof(arr) / sizeof(arr[0]) << endl;
  50.  
  51.     int arr2d[n][n]{};
  52.  
  53.     arr2d[4][12] = 1;
  54.     arr2d[12][12] = 1;
  55.  
  56.     for (int k = 0; k < n; k++) {
  57.         for (int m = 0; m < n; m++) {
  58.             cout << arr2d[k][m] << " ";
  59.         }
  60.         cout << endl;
  61.     }
  62.  
  63.     int* darr = arr; // просто указатель на память в стеке
  64.  
  65.     int sz = 7;
  66.     int* dinamic_array = new int[sz]; // динамический массив
  67.  
  68.     // выделили память для хранинея указателей
  69.     int** din_arr2d = new int* [sz];
  70.     // выделли память для хранения набора чисел
  71.     // по каждому указателю
  72.     for (int k = 0; k < sz; k++) {
  73.         din_arr2d[k] = new int[2];
  74.     }
  75.  
  76.  
  77.     // освободили память от хранения наборов чисел
  78.     for (int k = 0; k < sz; k++) {
  79.         delete[] din_arr2d[k];
  80.     }
  81.     // освободили память для хранения указателей на наборы чисел
  82.     delete[] din_arr2d;
  83.     delete[] dinamic_array;
  84. }
  85.  
  86.  
  87. // это тренировались выделить и очистить память для двумерных динамических массивов
  88. void main1() {
  89.     char** arr = new char* [2];
  90.     arr[0] = new char[] {'A', 'B'};
  91.     arr[1] = new char[] {'C', 'D'};
  92.  
  93.     for (int k = 0; k < 2; k++) {
  94.         for (int m = 0; m < 2; m++) {
  95.             cout << arr[k][m] << " ";
  96.         }
  97.         cout << endl;
  98.     }
  99.     delete[] arr[0];
  100.     delete[] arr[1];
  101.     delete[] arr;
  102. }
  103.  
  104. // расстояние посчитали
  105. double distance(double* p1, double* p2) {
  106.     double d1 = (p1[0] - p2[0]);
  107.     double d2 = (p1[1] - p2[1]);
  108.     return sqrt(d1 * d1 + d2 * d2);
  109. }
  110.  
  111. // тут все расчёты для 14 точек на плоскости
  112. void main() {
  113.     int num_points = 14;
  114.     int num_dim = 2;
  115.     double** points = new double*[num_points];
  116.    
  117.     for (int k = 0; k < num_points; k++) {
  118.         points[k] = new double[num_dim] {};
  119.     }
  120.  
  121.     srand(13);
  122.     for (int k = 0; k < num_points; k++) {
  123.         points[k][0] = rand() % 10;
  124.         points[k][1] = rand() % 10;
  125.     }
  126.  
  127.     cout << "Average: " << endl;
  128.     double x = 0, y = 0;
  129.     for (int k = 0; k < num_points; k++) {
  130.         x += points[k][0];
  131.         y += points[k][1];
  132.     }
  133.  
  134.     if (num_points > 0) {
  135.         x /= num_points;
  136.         y /= num_points;   
  137.         cout << "(" << x << "; " << y << ")" << endl;
  138.     }
  139.  
  140.     cout << "Distance to (0; 0): " << endl;
  141.     for (int k = 0; k < num_points; k++) {
  142.         cout << sqrt(pow(points[k][0], 2) +
  143.                points[k][1]*points[k][1]) << endl;
  144.     }
  145.  
  146.     cout << "Distance to ("<< x << "; " << y <<"): " << endl;
  147.     for (int k = 0; k < num_points; k++) {
  148.         cout << sqrt( pow(points[k][0]-x, 2) +
  149.             (points[k][1]-y) * (points[k][1]-y) ) << endl;
  150.     }
  151.  
  152.     cout << "Points: " << endl;
  153.     for (int k = 0; k < num_points; k++) {
  154.         cout << "(" <<points[k][0] << "; " << points[k][1]
  155.             << ")" << endl;
  156.     }
  157.  
  158.     double max_dist = 0, curr_dist;
  159.     int id_k1, id_k2;
  160.     for (int k1 = 0; k1 < num_points; k1++) {
  161.         for (int k2 = k1 + 1; k2 < num_points; k2++) {
  162.             curr_dist = distance(points[k1], points[k2]);
  163.             if (curr_dist > max_dist) {
  164.                 max_dist = curr_dist;
  165.                 id_k1 = k1;
  166.                 id_k2 = k2;
  167.             }
  168.         }
  169.     }
  170.     cout << "Max dist: " << endl;
  171.     cout << "(" << points[id_k1][0] << "; " << points[id_k1][1] << ")" << endl;
  172.     cout << "(" << points[id_k2][0] << "; " << points[id_k2][1] << ")" << endl;
  173.     cout << max_dist << endl;
  174.  
  175.  
  176.  
  177.  
  178.     for (int k = 0; k < num_points; k++) {
  179.         delete[] points[k];
  180.     }
  181.     delete[] points;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment