SeriousVenom

ArraysLab

Jan 24th, 2020
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.00 KB | None | 0 0
  1. // seminar.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include <iostream>
  5. #include <fstream>
  6. #include <conio.h>
  7. #include "clocale"
  8. #include "stdlib.h"
  9. #include "ctime"
  10. using namespace std;
  11.  
  12. void input(float* a, int n); // Ввод массива
  13. void inputr(float* a, int n); // Ввод рандомного массива
  14. void output(float* a, int n); // Вывод массива
  15. void inMAT(int** a, int m, int n); // Ввод двумерного массива
  16. void inMATr(int** a, int m, int n); // Рандомный двумерный массив
  17. void outMAT(int** a, int m, int n); // Вывод двумерного массива
  18. bool ScanMIN(int** a, int v, int k, int b); // Сканирование строк
  19. bool ScanMAX(int** a, int v, int k, int b); // Сканирование столбцов
  20. void num3(int n);
  21. void num4(int m, int n);
  22. void num5();
  23.  
  24. int main()
  25. {
  26.     setlocale(LC_ALL, "rus");
  27.     srand(time(0));
  28.     int k1;
  29.    
  30.     cout << "1. В массиве найти мин. эл-т. Найти сумму между первым и последним положительными эл-тами. Отсортировать массив, чтобы нули шли вначале" << endl;
  31.     cout << "2. В матрице найти сумму строк где есть хотя-бы 1 отрицательный эл-т, номера строк и столбцов седловых точек матрицы" << endl;
  32.     cout << "3. Считать текст из файла и вывести предложения, не содержащие запятых" << endl;
  33.     cout << "Введите номер задания: ";
  34.     cin >> k1;
  35.  
  36.     if (k1 == 1)
  37.     {
  38.         int n;
  39.         cout << "Введите размерность массива" << endl;
  40.         cin >> n;
  41.  
  42.         num3(n);
  43.     }
  44.  
  45.     if (k1 == 2)
  46.     {
  47.         int m, n;
  48.         cout << "Введите число строк матрицы" << endl;
  49.         cin >> m;
  50.         cout << "Введите число столбцов матрицы" << endl;
  51.         cin >> n;
  52.  
  53.         num4(m, n);
  54.     }
  55.  
  56.     if (k1 == 3)
  57.     {
  58.         num5();
  59.     }
  60. }
  61.  
  62. void input(float* a, int n)
  63. {
  64.     cout << "Введите массив:" << endl;
  65.     for (int i = 0; i < n; i++)
  66.         cin >> a[i];
  67. }
  68.  
  69. void inputr(float* a, int n)
  70. {
  71.     for (int i = 0; i < n; i++)
  72.         a[i] = rand() % 20 - 10;
  73. }
  74.  
  75. void output(float* a, int n)
  76. {
  77.     for (int i = 0; i < n; i++)
  78.         cout << a[i] << "  ";
  79.     cout << endl;
  80. }
  81.  
  82. void inMAT(int** a, int m, int n)
  83. {
  84.     cout << "Введите двумерный массив" << endl;
  85.     for (int i = 0; i < m; i++)
  86.     {
  87.         for (int j = 0; j < n; j++)
  88.         {
  89.             cout << "a[" << i << "][" << j << "]" << " = ";
  90.             cin >> a[i][j];
  91.         }
  92.     }
  93. }
  94.  
  95. void inMATr(int** a, int m, int n)
  96. {
  97.     for (int i = 0; i < m; i++)
  98.     {
  99.         for (int j = 0; j < n; j++)
  100.         {
  101.             a[i][j] = rand() % 20 - 10;
  102.         }
  103.     }
  104. }
  105.  
  106. void outMAT(int** a, int m, int n)
  107. {
  108.     cout << "Двумерный массив:" << endl;
  109.     for (int i = 0; i < m; i++)
  110.     {
  111.         for (int j = 0; j < n; j++)
  112.         {
  113.             printf("%4d", a[i][j]);
  114.         }
  115.         cout << endl;
  116.     }
  117. }
  118.  
  119. bool ScanMIN(int** a, int v, int k, int b)
  120. {
  121.     int min = a[v][k];
  122.     for (int i = 0; i < b; i++)
  123.         if (min > a[v][i])
  124.             return false;
  125.     return true;
  126. }
  127.  
  128. bool ScanMAX(int** a, int v, int k, int b)
  129. {
  130.     int max = a[v][k];
  131.     for (int i = 0; i < b; i++)
  132.         if (max < a[i][k])
  133.             return false;
  134.     return true;
  135. }
  136.  
  137. void num3(int n)
  138. {
  139.     float* a = new float[n], t, t1, f = 0, s = 0, t2, scan;
  140.     cout << "Какой массив вы хотите использовать?" << endl;
  141.     cout << "1. Ввести с клавиатуры" << endl;
  142.     cout << "2. Случайный" << endl;
  143.     cin >> scan;
  144.     if (scan == 1)
  145.         input(a, n);
  146.     if (scan == 2)
  147.         inputr(a, n);
  148.     output(a, n);
  149.     float  min = a[0];
  150.     int j = 0;
  151.  
  152.     for (int i = 1; i < n; i++) // Поиск минимального значения в массиве
  153.     {
  154.         if (a[i] < min)
  155.             min = a[i];
  156.     }
  157.  
  158.     cout << "Минимальное значение массива: " << min << endl;
  159.  
  160.     for (int i = 0; i < n; i++) // Поиск первого положительного эл-та
  161.     {
  162.         if (a[i] > 0)
  163.         {
  164.             f++;
  165.             cout << "Первый положительный элемент: " << a[i] << endl;
  166.             t = a[i];
  167.             t1 = i;
  168.             break;
  169.         }
  170.     }
  171.  
  172.     if (f == 0) // Проверка на наличие положительных эл-тов
  173.     {
  174.         cout << "В массиве нет положительных эл-тов. Невозможно посчитать сумму" << endl;
  175.         return;
  176.     }
  177.  
  178.     int k = t, k1 = t1;
  179.     for (int i = t + 1; i < n; i++) // Поиск последнего положительного эл-та
  180.     {
  181.         if (a[i] > 0)
  182.         {
  183.             k = a[i];
  184.             k1 = i;
  185.         }
  186.     }
  187.  
  188.     cout << "Последний положительный элемент: " << k << endl;
  189.  
  190.     for (int i = t1 + 1; i < k1; i++) // Сумма эл-тов между первым и последним положительным эл-том
  191.     {
  192.         s += a[i];
  193.     }
  194.  
  195.     cout << "Сумма элементов между первым и последними положительными эл-тами: " << s << endl;
  196.  
  197.     for (int i = 0; i < n; i++)
  198.     {
  199.         if (a[i] == 0)
  200.         {
  201.             t2 = a[i];
  202.             a[i] = a[j];
  203.             a[j] = t2;
  204.             j++;
  205.         }
  206.     }
  207.  
  208.     cout << "Отсортированный массив, с нулями в начале:" << endl;
  209.     output(a, n);
  210. }
  211.  
  212. void num4(int m, int n)
  213. {
  214.     int** a, s = 0, t, f = 0, c = 0, scan;
  215.     a = new int* [m];
  216.     for (int i = 0; i < m; i++)
  217.         a[i] = new int[n];
  218.     cout << "Какой массив вы хотите использовать?" << endl;
  219.     cout << "1. Ввести с клавиатуры" << endl;
  220.     cout << "2. Случайный" << endl;
  221.     cin >> scan;
  222.     if (scan == 1)
  223.         inMAT(a, m, n);
  224.     if (scan == 2)
  225.         inMATr(a, m, n);
  226.     outMAT(a, m, n);
  227.  
  228.     for (int i = 0; i < m; i++)
  229.     {
  230.         for (int j = 0; j < n; j++)
  231.         {
  232.             if (a[i][j] < 0)
  233.             {
  234.                 f = 1;
  235.                 t = i;
  236.                 cout << "Отрицательный эл-т " << a[i][j] << " в строке " << t << endl;
  237.                 for (int j = 0; j < n; j++)
  238.                 {
  239.                     s += a[t][j];
  240.                 }
  241.                 cout << "Сумма эл-тов в строке " << t << ": " << s << endl;
  242.                 s = 0;
  243.                 break;
  244.             }
  245.         }
  246.     }
  247.     if (f == 0)
  248.         cout << "В массиве нет отрицательных эл-тов" << endl;
  249.  
  250.     for (int i = 0; i < m; i++)
  251.     {
  252.         for (int j = 0; j < n; j++)
  253.         {
  254.             if (ScanMIN(a, i, j, n) && ScanMAX(a, i, j, m))
  255.             {
  256.                 c++;
  257.                 cout << "Найдена седловая точка с координатами (" << i << " " << j << ")" << endl;
  258.             }
  259.         }
  260.     }
  261.     if (c == 0)
  262.         cout << "Седловых точек нет" << endl;
  263. }
  264.  
  265. void num5()
  266. {
  267.     ifstream file("read.txt");
  268.     char ch;
  269.     string str;
  270.  
  271.     if (!file)
  272.     {
  273.         cout << "Файл не найден" << endl;
  274.         return;
  275.     }
  276.  
  277.     else
  278.     {
  279.         while (file.get(ch))
  280.         {
  281.             str.push_back(ch);
  282.             if (ch == '.')
  283.             {
  284.                 if (str.find(',') == str.npos)
  285.                     cout << str << endl;
  286.                 str.clear();
  287.             }
  288.         }
  289.     }
  290. }
Advertisement
Add Comment
Please, Sign In to add comment