Advertisement
fabis_sparks

Lab2_OS

Dec 4th, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.17 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <ctime>
  4.  
  5.  
  6.  
  7. int CheckElements(int, int); // Проверка матрицы на разреженность
  8. int sumElements(int *, int); // Сумма элементов матрицы
  9. void genMatrix(int, int); // Генерация матрицы
  10.  
  11. void main() {
  12.     setlocale(LC_ALL, "Russian");
  13.     srand(time(NULL));
  14.     int size = 0;
  15.     int notNull = 0;
  16.     std::cout << "Введите размерность матрицы: ";
  17.     std::cin >> size;
  18.     std::cout << "\nВведите количество ненулевых элементов: ";
  19.     std::cin >> notNull;
  20.     if (CheckElements(size, notNull)==0) genMatrix(size, notNull); // Проверим, подходят ли введенные данные для нашей задачи, если нет, то вводим заново.
  21.     else main();
  22.     system("pause");
  23. }
  24.  
  25. int sumElements(int *values, int n)
  26.  
  27. {
  28.     int sum = 0;
  29.     for (int i = 0; i < n; i++)
  30.         sum += values[i];
  31.     return sum;
  32. }
  33. int CheckElements(int size, int notNull) {
  34.     if (notNull>(size*size / 2)) {
  35.         system("cls");
  36.         std::cout << std::endl << "При таких условия матрица не будет разреженной. Кол-во ненулевых элементов должно быть меньше " << (size*size / 2) << "." << std::endl;
  37.         return 1;
  38.     }
  39.     else return 0;
  40. }
  41.  
  42. void genMatrix(int size, int notNull) {
  43.     int **matrix = new int*[size];
  44.     for (int count = 0; count < size; count++)
  45.         matrix[count] = new int[size];
  46.     for (int i = 0; i < size;i++) // Заполнение матрицы нулями
  47.     {
  48.         for (int j = 0; j < size; j++)
  49.             matrix[i][j] = 0;
  50.     }
  51.     int r = 0;
  52.     while (r < notNull)     // заполняем матрицу рандомными ненулевыми элементами
  53.     {
  54.         int p = 0 + rand() % size;
  55.         int f = 0 + rand() % size;
  56.         if (matrix[p][f] == 0)
  57.         {
  58.             r++;
  59.             matrix[p][f] = 1 + rand() % 50;
  60.         }
  61.     }
  62.     std::cout << "\nСгенерированная матрица: " << std::endl;
  63.     for (int i = 0; i < size;i++) // Вывод матрицы
  64.     {
  65.         for (int j = 0; j < size; j++)
  66.             std::cout << matrix[i][j] << "\t";
  67.         std::cout << std::endl;
  68.     }
  69.  
  70.     int* values = new int[notNull]; // Выделяем память под хранение нужных элементов
  71.     int* lines = new int[notNull];  // Организовываем CSS метод хранения
  72.     int* rowIndex = new int[size + 1];
  73.     for (int i = 0; i <= size; i++)
  74.         rowIndex[i] = 1;
  75.     rowIndex[size] = notNull + 1;
  76.     int count = 0;
  77.     for (int j = 0; j < size; j++)
  78.     {
  79.         for (int i = 0; i < size; i++)
  80.         {
  81.             if (matrix[i][j] != 0) // Запоминаем ненулевые элементы
  82.             {
  83.                 values[count] = matrix[i][j];
  84.                 lines[count] = i;
  85.                 if (j + 1 < size)
  86.                     rowIndex[j + 1] = rowIndex[j] + 1;
  87.                 count++;
  88.             }
  89.         }
  90.     }
  91.  
  92.     std::cout << "\n*************************" << std::endl;
  93.     std::cout << "Сумма элементов матрицы равна: " << sumElements(values, notNull) << std::endl;
  94.  
  95.     delete[] values; // Очищаем память
  96.     delete[] lines;
  97.     delete[] rowIndex;
  98.     for (int count = 0; count < size; count++)
  99.         delete[] matrix[count];
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement