Разреженная матрица

Уровень сложности:

Необходимо разработать программу, которая предоставляет удобный функционал для работы с разреженной матрицей. Разреженная матрица — матрица с большим количеством нулевых элементов. Требуется написать следующие функции:

  • Ввода матрицы;
  • Печати матрицы;
  • Суммирования двух матриц;
  • Умножения двух матриц.

Представлять матрицы можно в виде списка или в виде динамического массива.

К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.

E-mail : admin@cppstudio.com

Следующие статьи помогут вам в решении данной задачи:
Автор: Marienko L.
Дата: 13.01.2014
Поделиться:

Комментарии

  1. AndreiST

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    void Input(int **Arr, int sizeMatrix){
        for(int i(0); i<sizeMatrix; i++){
            for (int j(0); j<sizeMatrix; j++){
               cout << "Element matrix [" << i << "][" << j << "]=";
               cin >> Arr[i][j];
            }
        }
    }
    void Print(int **Arr, int sizeMatrix){
        for(int i(0); i<sizeMatrix; i++){
            for (int j(0); j<sizeMatrix; j++){
               cout << Arr[i][j] << " ";
            }
        cout << endl;
        }
    }
    void Sum(int **Arr1, int **Arr2, int **Arr3, int sizeMatrix){
        for(int i(0); i<sizeMatrix; i++){
            for (int j(0); j<sizeMatrix; j++){
               Arr3[i][j]=Arr1[i][j]+Arr2[i][j];
            }
        }
    }
    void Mult(int **Arr1, int **Arr2, int **Arr3, int sizeMatrix){
        for(int i(0); i<sizeMatrix; i++){
            for (int j(0); j<sizeMatrix; j++){
               Arr3[i][j]=(Arr1[i][j])*(Arr2[i][j]);
            }
        }
    }
    
    int main()
    {
        int **Arr1, **Arr2, **Arr3;
        int sizeMatrix;
        int key;
        int flag=0;
        cout << "-------Menu-------" << endl;
        cout << "1-Input matrix" << endl;
        cout << "2-Print matrix" << endl;
        cout << "3-Sum matrix" << endl;
        cout << "4-Multiply matrix" << endl;
        cout << "0-Exit" << endl;
        cout << "------------------" << endl;
        while(1){
            cout << "You choice ";
            cin >> key;
                switch (key){
                    case 1:{
                        cout << "Input size matrix ";
                        cin >> sizeMatrix;
    
                        cout << "Matrix 1:" << endl;
                        Arr1=new int*[sizeMatrix];
                        for(int i(0); i<sizeMatrix; i++){Arr1[i]=new int[sizeMatrix];}
                        Input(Arr1, sizeMatrix);
    
                        cout << "Matrix 2:" << endl;
                        Arr2=new int*[sizeMatrix];
                        for(int i(0); i<sizeMatrix; i++){Arr2[i]=new int[sizeMatrix];}
                        Input(Arr2, sizeMatrix);
    
                        flag=1;
                        break;
                    }
                    case 2:{
                        if(flag==1){
                            cout << "----Matrix 1---- " << endl;
                            Print(Arr1, sizeMatrix);
                            cout << "----Matrix 2---- " << endl;
                            Print(Arr2, sizeMatrix);
                        }
                        else
                            cout << "Enter matrix choice 1!" << endl;
                        break;
                    }
                    case 3:{
                        if(flag==1){
                            Arr3=new int*[sizeMatrix];
                            for(int i(0); i<sizeMatrix; i++){Arr3[i]=new int[sizeMatrix];}
    
                            Sum(Arr1, Arr2, Arr3, sizeMatrix);
                            cout << "Sum matrix 1 & matrix 2" << endl;
                            Print(Arr3, sizeMatrix);
    
                            for (int i(0); i<sizeMatrix; i++)
                                delete [] Arr3[i];
                            delete [] Arr3;
                        }
                        else
                            cout << "Enter matrix choice 1!" << endl;
                        break;
                    }
                    case 4:{
                        if(flag==1){
                            Arr3=new int*[sizeMatrix];
                            for(int i(0); i<sizeMatrix; i++){Arr3[i]=new int[sizeMatrix];}
    
                            Mult(Arr1, Arr2, Arr3, sizeMatrix);
                            cout << "Multiplex matrix 1 & matrix 2" << endl;
                            Print(Arr3, sizeMatrix);
    
                            for (int i(0); i<sizeMatrix; i++)
                                delete [] Arr3[i];
                            delete [] Arr3;
                        }
                        else
                            cout << "Enter matrix choice 1!" << endl;
                        break;
                    }
                    case 0:{
                        exit(1);
                    }
                }
        }
            for (int i(0); i<sizeMatrix; i++)
            delete [] Arr1[i];
        delete [] Arr1;
    
        for (int i(0); i<sizeMatrix; i++)
            delete [] Arr2[i];
        delete [] Arr2;
    
        return 0;
    }
  2. YourSpace_tym

    // ConsoleApplication3.cpp : Defines the entry point for the console application.
    // created by YourSpace_tym
    
    #include "stdafx.h"
    #include "iostream"
    
    using namespace std;
    
    void menu() {
    	cout << endl;
    	cout << "1 - input arrays" << endl;
    	cout << "2 - print arrays" << endl;
    	cout << "3 - sum arrays" << endl;
    	cout << "4 - multiply arrays" << endl;
    	cout << "0 - exit" << endl;
    	cout << endl;
    }
    
    void input(int ** array, int n, int k) {
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < k; j++) {
    			cout << "Array[" << i << "][" << j << "] : ";
    			cin >> array[i][j];
    		}
    	}
    }
    
    void print(int ** array, int n, int k) {
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < k; j++) {
    			cout << array[i][j] << ' ';
    		}
    		cout << endl;
    	}
    }
    
    void sum(int ** array1, int ** array2, int ** array3, int n, int k) {
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < k; j++) {
    			array3[i][j] = array1[i][j] + array2[i][j];
    		}
    	}
    	cout << endl;
    	cout << "New array (array1 + array2) : " << endl;
    	print(array3, n, k);
    }
    
    void multiply(int ** array1, int n1, int k1, int ** array2, int n2, int k2, int ** array3) {
    	for (int i = 0; i < n1; i++) {
    		for (int j = 0; j < k2; j++) {
    			array3[i][j] = 0;
    			for (int p = 0; p < n2; p++) {
    				array3[i][j] += array1[i][p] * array2[p][j];
    			}
    		}
    	}
    	cout << endl;
    	cout << "New array (array1 * array2) : " << endl;
    	print(array3, n1, k2);
    }
    
    int main()
    {
    	int ** array_f;
    	int ** array_s;
    	int choose = -1;
    	int r_first, c_first;
    	int r_second, c_second;
    	cout << "First array : " << endl;
    	cout << "Rows : ";
    	cin >> r_first;
    	cout << "Columns : ";
    	cin >> c_first;
    	cout << endl;
    	cout << "Second array : " << endl;
    	cout << "Rows : ";
    	cin >> r_second;
    	cout << "Columns : ";
    	cin >> c_second;
    	array_f = new int*[r_first];
    	for (int i = 0; i < r_first; i++) {
    		array_f[i] = new int[c_first];
    	}
    	array_s = new int*[r_second];
    	for (int i = 0; i < r_second; i++) {
    		array_s[i] = new int[c_second];
    	}
    	while (choose != 0) {
    		menu();
    		cout << "Your choose : ";
    		cin >> choose;
    		if (choose == 0) break;
    		while (choose != 1 && choose != 2 && choose != 3 && choose != 4) {
    			cout << "Incorrect, your choose : ";
    			cin >> choose;
    		}
    		switch (choose) {
    		case 1: cout << "First array : ";
    			cout << endl;
    			input(array_f, r_first, c_first);
    			cout << endl;
    			cout << "Second array : ";
    			cout << endl;
    			input(array_s, r_second, c_second);
    			break;
    		case 2: cout << endl;
    			cout << "Array 1 : " << endl;
    			print(array_f, r_first, c_first);
    			cout << endl;
    			cout << "Array 2 : " << endl;
    			print(array_s, r_second, c_second);
    			break;
    		case 3:  if (r_first == r_second && c_first == c_second) {
    			int ** sum_ar = new int*[r_first];
    			for (int i = 0; i < r_first; i++) {
    				sum_ar[i] = new int[c_first];
    			}
    			cout << endl;
    			sum(array_f, array_s, sum_ar, r_first, c_second);
    		}
    				 else cout << "Try again : size of first must be equal with size of second array " << endl;
    				 break;
    		case 4: if (c_first == r_second) {
    			int ** multiplier = new int*[r_first];
    			for (int i = 0; i < r_first; i++) {
    				multiplier[i] = new int[c_second];
    			}
    			multiply(array_f, r_first, c_first, array_s, r_second, c_second, multiplier);
    		}
    				else cout << "Try again : number of columns in first array must be equal with number of rows in second array " << endl;
    				break;
    		}
    	}
        return 0;
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.