Username77177

Dahl-Programming-Lab6-16

Nov 28th, 2019
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. //Var 16
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     //!Задача 1
  10.     cout << "Задача 1. В матрице X(5×5) определите произведение положительных элементов главной диагонали." << endl;
  11.     // Start Variables
  12.     int multiple = 1; //Перемножение элементов матрицы
  13.     int firstmatrice[5][5]; //Сама матрица
  14.     //Solve
  15.     srand(time(0)); //Генерация сида для rand()
  16.     for (int i = 0; i < 5; i++)
  17.     {
  18.         cout << "\t\t";
  19.         for (int j = 0; j < 5; j++)
  20.         {
  21.             firstmatrice[i][j] = (rand() % 21) - 5; // Заполнение случайными числами [-5;15]
  22.             cout << firstmatrice[i][j] << " ";
  23.         }
  24.         cout << endl;
  25.         //Умножение
  26.         if (firstmatrice[i][i] > 0)
  27.         {
  28.             multiple *= firstmatrice[i][i];
  29.         }
  30.     }
  31.     cout << "Умножение всех положительных элементов = " << multiple << endl;
  32.  
  33.     //!Задача 2
  34.     cout << "\n\nЗадача 2. Дан двумерный массив из пятнадцати строк и двух столбцов. Найти номера двух соседних строк," << endl;
  35.     cout << "сумма элементов в которых минимальна." << endl;
  36.     int secondmatrice[15][2];
  37.     int indexes[2] = {0, 1}; //Индексы наименьших строк (сначала идёт 1 и 2 по договоренности ниже)
  38.     int sum, f = 0, s = 0; //Переменная суммы, суммы первой, второй строки (можно и без них, но для читабельности)
  39.     //? Заполнение матрицы значениями
  40.     for (int row = 0; row < 15; row++)
  41.     {
  42.         for (int column = 0; column < 2; column++)
  43.         {
  44.             secondmatrice[row][column] = rand() % 15 + 1; //? [1;15]
  45.             cout << "\t\t" << secondmatrice[row][column] << " ";
  46.         }
  47.         cout << "\n";
  48.     }
  49.         /* Нужно начальное выражение для сравнения
  50.         Пусть им будет первые 2 строки */
  51.     sum = secondmatrice[0][0] + secondmatrice[0][1] + secondmatrice[1][0] + secondmatrice[1][1]; //Сумма элементов первых двух строк
  52.     for (int row = 1; row < 15; row++) //! Начинается с 1, ибо будет выход за пределы массива
  53.     /*
  54.      Проверяем 1 и предыдущую строку, 2 и 1, 3 и 2.. 15 и 14
  55.     */
  56.     {
  57.         for (int column = 0; column < 2; column++)
  58.         {
  59.             f += secondmatrice[row - 1][column]; // Сумма элементов первой строки
  60.             s += secondmatrice[row][column]; //Аналогично тому, что выше, только со 2-й
  61.         }
  62.  
  63.         if (f + s < sum) //Если сумма рандомной строки будет меньше чем сумма первых двух, то они заменят сумму, а индексы изменятся
  64.         {
  65.             sum = f + s;
  66.             indexes[0] = row;
  67.             indexes[1] = row - 1;
  68.         }
  69.         f = 0, s = 0; // Обнуляем переменные для того, чтобы сумма в них не накапливалась с предыдущей итерации
  70.     }
  71.  
  72.     //Вывод данных
  73.     cout << "Индексы: " << indexes[0] << "," << indexes[1] << "\nСумма: " << sum << endl;
  74.  
  75.     //!Задача 3
  76.     cout << "Задача 3. Дан двумерный массив размером 7х7, заполняется случайными элементами." << endl;
  77.     cout << "Найти наименьшее из значений элементов, расположенных в местах, где находятся нули так,\n";
  78.     cout << "как показано на рисунке:\n";
  79.     cout << "\t\t0 0 0 0 0 0 0\n";
  80.     cout << "\t\t0 0 0 0 0 0 0\n";
  81.     cout << "\t\t0 0 0 0 0 0 0\n";
  82.     cout << "\t\t0 0 0 0 0 0 0\n";
  83.     cout << "\t\t0 0 0   0 0 0\n";
  84.     cout << "\t\t0 0       0 0\n";
  85.     cout << "\t\t0           0\n";
  86.     int thirdmatrice[7][7];
  87.     for (int i = 0; i < 7; i++) //?Заполнение
  88.     {
  89.         cout << "\t\t";
  90.         for (int j = 0; j < 7; j++)
  91.         {
  92.             thirdmatrice[i][j] = (rand() % 21) - 5; // Заполнение случайными числами [-5;15]
  93.             cout << thirdmatrice[i][j] << " ";
  94.         }
  95.         cout << endl;
  96.     }
  97.     int minimal = thirdmatrice[0][0]; // Пусть минимальное значение сначала будет элемент массива с индексом (0;0)
  98.     int step = 1; //? Шаг (Нужен для "чтения" в виде пирамиды
  99.     for (int i = 6; i >= 0; i--)
  100.     {
  101.         if (i < 4)
  102.         {
  103.             for (int j = 0; j < step; j++) //Поиск в начале
  104.             {
  105.                 if (thirdmatrice[i][j] < minimal); minimal = thirdmatrice[i][j];
  106.             }
  107.             for (int j = 6; j > 6-step; j++) //Поиск в конце
  108.             {
  109.                 if (thirdmatrice[i][j] < minimal); minimal = thirdmatrice[i][j];
  110.             }
  111.            
  112.             step++;
  113.         }
  114.         else
  115.         {
  116.             for (int j = 0; j < 7; j++)
  117.             {
  118.                 if (thirdmatrice[i][j]<minimal) //? Если настоящий элемент меньше первого, или любого другого, то он станет минимальным значением
  119.                 {
  120.                     minimal = thirdmatrice[i][j];
  121.                 }
  122.                
  123.             }
  124.            
  125.         }
  126.        
  127.     }
  128.     cout<<"Минимальный = "<<minimal<<endl;
  129.    
  130. }
Advertisement
Add Comment
Please, Sign In to add comment