Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <ctime>
- int CheckElements(int, int); // Проверка матрицы на разреженность
- int sumElements(int *, int); // Сумма элементов матрицы
- void genMatrix(int, int); // Генерация матрицы
- void main() {
- setlocale(LC_ALL, "Russian");
- srand(time(NULL));
- int size = 0;
- int notNull = 0;
- std::cout << "Введите размерность матрицы: ";
- std::cin >> size;
- std::cout << "\nВведите количество ненулевых элементов: ";
- std::cin >> notNull;
- if (CheckElements(size, notNull)==0) genMatrix(size, notNull); // Проверим, подходят ли введенные данные для нашей задачи, если нет, то вводим заново.
- else main();
- system("pause");
- }
- int sumElements(int *values, int n)
- {
- int sum = 0;
- for (int i = 0; i < n; i++)
- sum += values[i];
- return sum;
- }
- int CheckElements(int size, int notNull) {
- if (notNull>(size*size / 2)) {
- system("cls");
- std::cout << std::endl << "При таких условия матрица не будет разреженной. Кол-во ненулевых элементов должно быть меньше " << (size*size / 2) << "." << std::endl;
- return 1;
- }
- else return 0;
- }
- void genMatrix(int size, int notNull) {
- int **matrix = new int*[size];
- for (int count = 0; count < size; count++)
- matrix[count] = new int[size];
- for (int i = 0; i < size;i++) // Заполнение матрицы нулями
- {
- for (int j = 0; j < size; j++)
- matrix[i][j] = 0;
- }
- int r = 0;
- while (r < notNull) // заполняем матрицу рандомными ненулевыми элементами
- {
- int p = 0 + rand() % size;
- int f = 0 + rand() % size;
- if (matrix[p][f] == 0)
- {
- r++;
- matrix[p][f] = 1 + rand() % 50;
- }
- }
- std::cout << "\nСгенерированная матрица: " << std::endl;
- for (int i = 0; i < size;i++) // Вывод матрицы
- {
- for (int j = 0; j < size; j++)
- std::cout << matrix[i][j] << "\t";
- std::cout << std::endl;
- }
- int* values = new int[notNull]; // Выделяем память под хранение нужных элементов
- int* lines = new int[notNull]; // Организовываем CSS метод хранения
- int* rowIndex = new int[size + 1];
- for (int i = 0; i <= size; i++)
- rowIndex[i] = 1;
- rowIndex[size] = notNull + 1;
- int count = 0;
- for (int j = 0; j < size; j++)
- {
- for (int i = 0; i < size; i++)
- {
- if (matrix[i][j] != 0) // Запоминаем ненулевые элементы
- {
- values[count] = matrix[i][j];
- lines[count] = i;
- if (j + 1 < size)
- rowIndex[j + 1] = rowIndex[j] + 1;
- count++;
- }
- }
- }
- std::cout << "\n*************************" << std::endl;
- std::cout << "Сумма элементов матрицы равна: " << sumElements(values, notNull) << std::endl;
- delete[] values; // Очищаем память
- delete[] lines;
- delete[] rowIndex;
- for (int count = 0; count < size; count++)
- delete[] matrix[count];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement