Advertisement
Guest User

Untitled

a guest
Oct 10th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.16 KB | None | 0 0
  1. // Лабораторная работа №2 Вариант 1
  2. // Подключение библиотек
  3. #include <iostream>
  4. #include <fstream>
  5. #include <stdio.h>
  6. #include <iomanip>
  7. #include <new>
  8. #include <climits>
  9. #include <cstdlib>
  10. #include <Windows.h>
  11.  
  12. using namespace std;
  13.  
  14. void first_sposob()
  15. {
  16.     const int n = 4;
  17.     const int m = 5;
  18.     int counter = 0, max, min, min_counter = 0, result, row = 0;
  19.     int arr[n][m] = {3, 7, 8, 0, 1, 4, 2, 9, 1, 4, 7, 6, 5, 2, 7, 6, 1, 9, 3, 0};
  20.  
  21.     //Находим строки с нулевыми элементами
  22.     for (int i = 0; i < n; ++i)
  23.     {
  24.         for (int j = 0; j < m; ++j)
  25.         {
  26.             cout << setw(4) << arr[i][j];
  27.             if (arr[i][j] == 0)
  28.                 counter++;
  29.         }
  30.         cout << "\n\n";
  31.         if (counter > 0)
  32.             row++;
  33.         counter = 0;
  34.     }
  35.  
  36.     min = arr[0][0];
  37.  
  38.     //Находим минимальный элемент
  39.     for (int i = 0; i < n; i++)
  40.     {
  41.         for (int j = 0; j < m; j++)
  42.         {
  43.             if (arr[i][j] < min)
  44.             {
  45.                 min = arr[i][j];
  46.             }
  47.         }
  48.     }
  49.  
  50.     //min_counter понадобится в дальнейшем
  51.     for (int i = 0; i < n; i++)
  52.     {
  53.         for (int j = 0; j < m; j++)
  54.         {
  55.             if (min == arr[i][j])
  56.                 min_counter++;
  57.         }
  58.     }
  59.  
  60.     result = min;
  61.  
  62.     //Находим максимальный повторяющийся элемент
  63.     for (int i = 0; i < n; i++)
  64.     {
  65.         for (int j = 0; j < m; j++)
  66.         {
  67.             max = arr[i][j];
  68.             for (int i = 0; i < n; i++)
  69.             {
  70.                 for (int j = 0; j < m; j++)
  71.                 {
  72.                     if (max == arr[i][j])
  73.                         counter++;
  74.                 }
  75.             }
  76.             if (counter > 1 && result < max)
  77.                 result = max;
  78.             counter = 0;
  79.         }
  80.     }
  81.  
  82.     cout << "\nКоличество строк, не содиржащих ни одного нулевого элемента: " << n - row;
  83.     cout << "\nМаксимальное из чисел, встречающихся в заданной митрице более одного раза: ";
  84.     //Если значение result не изменилось и min_counter равен 1,
  85.     //то есть значение min не повторяется, значит максимального
  86.     //повторяющегося элемента нет. Иначе выводим result.
  87.     (result == min && min_counter == 1) ? cout << "Нет таких элементов!\n"
  88.                                         : cout << result << endl;
  89.  
  90. }
  91.  
  92.  
  93. void second_sposob()
  94. {
  95.     int counter = 0, max, min, min_counter = 0, result, row = 0;
  96.     int n, m;
  97.     ifstream f("in.txt");
  98.     f >> n >> m;
  99.  
  100.     //Выделяем память для массива
  101.     int **arr = new int *[n];
  102.     for (int i = 0; i < n; ++i)
  103.         arr[i] = new int[m];
  104.  
  105.     //Заполняем массив с файла и находим строки с нулевыми элементами
  106.     for (int i = 0; i < n; ++i)
  107.     {
  108.         for (int j = 0; j < m; ++j)
  109.         {
  110.             f >> arr[i][j];
  111.             cout << setw(4) << arr[i][j];
  112.             if (arr[i][j] == 0)
  113.                 counter++;
  114.         }
  115.         cout << "\n\n";
  116.         if (counter > 0)
  117.             row++;
  118.         counter = 0;
  119.     }
  120.  
  121.     min = arr[0][0];
  122.  
  123.     //Находим минимальный элемент
  124.     for (int i = 0; i < n; i++)
  125.     {
  126.         for (int j = 0; j < m; j++)
  127.         {
  128.             if (arr[i][j] < min)
  129.             {
  130.                 min = arr[i][j];
  131.             }
  132.         }
  133.     }
  134.  
  135.     //min_counter понадобится в дальнейшем
  136.     for (int i = 0; i < n; i++)
  137.     {
  138.         for (int j = 0; j < m; j++)
  139.         {
  140.             if (min == arr[i][j])
  141.                 min_counter++;
  142.         }
  143.     }
  144.  
  145.     result = min;
  146.  
  147.     //Находим максимальный повторяющийся элемент
  148.     for (int i = 0; i < n; i++)
  149.     {
  150.         for (int j = 0; j < m; j++)
  151.         {
  152.             max = arr[i][j];
  153.             for (int i = 0; i < n; i++)
  154.             {
  155.                 for (int j = 0; j < m; j++)
  156.                 {
  157.                     if (max == arr[i][j])
  158.                         counter++;
  159.                 }
  160.             }
  161.             if (counter > 1 && result < max)
  162.                 result = max;
  163.             counter = 0;
  164.         }
  165.     }
  166.  
  167.     cout << "\nКоличество строк, не содиржащих ни одного нулевого элемента: " << n - row;
  168.     cout << "\nМаксимальное из чисел, встречающихся в заданной митрице более одного раза: ";
  169.     //Если значение result не изменилось и min_counter равен 1,
  170.     //то есть значение min не повторяется, значит максимального
  171.     //повторяющегося элемента нет. Иначе выводим result.
  172.     (result == min && min_counter == 1) ? cout << "Нет таких элементов!\n"
  173.                                         : cout << result << endl;
  174.  
  175.     for (int i = 0; i < n; i++)
  176.     {
  177.         delete[] arr[i];
  178.     }
  179.  
  180.     delete[] arr;
  181. }
  182.  
  183. int main()
  184. {
  185.     setlocale(LC_ALL, "rus");
  186.     int sposob;
  187.     label:
  188.     cout << "[1] --> размещение массива в статической памяти" << endl;
  189.     cout << "[2] --> размещение массива в динамической памяти(ввод данных с файла)" << endl;
  190.     cout << "Введите способ решения задания: "; cin >> sposob; cout << "\n";
  191.  
  192.     if ((sposob != 1) && (sposob != 2))
  193.     {
  194.         cout << "Неправильная команда!" << endl;
  195.         goto label;
  196.     }
  197.  
  198.     switch (sposob)
  199.     {
  200.     case 1:
  201.         first_sposob();
  202.         break;
  203.     case 2:
  204.         second_sposob();
  205.         break;
  206.     }
  207.  
  208.     system("pause");
  209.     return 0;
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement