След матрицы

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

Найти след матрицы,  след матрицы — сумма элементов главной диагонали. Размер матрицы вводит пользователь, матрицу заполнять случайными числами.

Для начала, чтобы хотя-бы представлять у себя в голове решение данной программы, давайте научимся работать с двумерными массивами в С++. На  этап сложнее будет использование в программе динамических массивов.

С массивами мы разобрались, а вот каким же образом генерировать случайные числа? Перейдите по ссылке, там подробно описан этот процесс. Также можно почитать справочник по функции rand, в котором даже есть пример исходного кода. Результат работы программы показан ниже:

// trace_matrix.cpp: определяет точку входа для консольного приложения.

#include <stdafx.h>
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;

int main(int argc, char* argv[])
{
    srand(time(NULL));
    setlocale(LC_ALL, "rus");
    int number_rows,// строки 
        number_columns; // столбцы
    cout << "Введите количество строк матрицы: ";
    cin >> number_rows;
    cout << "Введите количество столбцов матрицы: ";
    cin >> number_columns;

    // динамическое создание двумерного массива 
    float **ptrarray = new float* [number_rows]; 
    for (int count = 0; count < number_rows; count++)
        ptrarray[count] = new float [number_columns]; 

    for (int counter_rows = 0; counter_rows < number_rows; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
        {
            ptrarray[counter_rows][counter_columns] = rand() % 100; // заполнение массива случайными числами
            cout << setw(2) << ptrarray[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
        }
        cout << endl;
    }
    cout << endl;

    int trace = 0; // след матрицы
    for (int counter_rows = 0; counter_rows < number_rows; counter_rows++)
        for (int counter_columns = 0; counter_columns < number_columns; counter_columns++)
            if (counter_rows == counter_columns)
                trace += ptrarray[counter_rows][counter_columns]; // считаем след матрицы

    // удаление двумерного динамического массива
    for (int count = 0; count < number_rows; count++) 
        delete []ptrarray[count];

    cout << "След матрицы: " << trace << endl;
    system("pause");
    return 0;
}


Результат:

CppStudio.com
Введите количество строк матрицы: 5
Введите количество столбцов матрицы: 5
61  16  39  79  99  
66  42  71   5  68  
80  64  34  12  44  
63  64  40  21   3  
17  31  99  41  72  

След матрицы: 230
Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 11.09.2012
Поделиться:

Комментарии

  1. odto11

    odto11

    #include <ctime> // в ней функция time
    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "\t\tСлед матрицы\n";
    
        srand(time(NULL)); // Инициализируем генератор случайных чисел.
        int X = 0;
        int n = 0;
        cout << "Введите количество стобцов и строк: ";
        cin >> n; // Считываем с клавиатуры n
        int **a = new int* [n]; // Создаем массив указателей
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                a[i] = new int[n];
            }
        }
        // А дальше работа как с обычным массивом.
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                a[i][j] = rand() % 100; // Каждый элемент случайному числу от 0 до 100
                cout << a[i][j] << " "; // Вывести элементы на консольку
                if(a[i]==a[j])
                {
                    X += a[i][j];
                }
            }
            cout << endl; // Двумерный массив. Строка кончилась, переводим строку и на консоли
        }
        cout << "След матрицы: " << X << endl;
        // Удаление массива
        for (int i = 0; i < n; i++)
        {
            delete[]a[i]; // Удаляем каждый элемент
        }
        delete [] a; // А потом массив
        return 0;
    }
  2. fishb0ne

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
        srand(time(0));
        int m, n, sum = 0;
        do
        {
            cout<<"Введите количество строк матрицы: ";
            cin>>m;
        } while (m <= 0);
        do
        {
            cout<<"Введите количество столбцов матрицы: ";
            cin>>n;
        } while (n <= 0);
        int **ptrmas = new int* [n];
        for (int i = 0; i < n; i++)
            ptrmas[i] = new int [m];
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                ptrmas[i][j] = rand() % 100;
                cout<<setw(5s)<<ptrmas[i][j];
                if (i == j) sum += ptrmas[i][j];
            }
            cout<<endl;
        }
        cout<<"\nСлед матрицы: " << sum;
        for (int i = 0; i < n; i++)
            delete [] ptrmas[i];
        delete [] ptrmas;
        return 0;
    }
  3. Mikhail Sergeev

    	int sum (0);
    	int **mass;
    	int h(0), b(0);
    
    	cout << "Введите количество строк: ";
    	cin >> h;
    	cout << "Введите количество столбцов: ";
    	cin >> b;
    
    	mass = new int *[h];
    
    		for (int i(0); i != h; i++){
    
    			mass[i] = new int [b];
    		}
    
    
    	for (int i(0); i != h; i++){
    
    		for (int j(0); j != b; j++){
    
    			mass[i][j] = rand()%200+100;
    			cout << mass [i][j] << " ";
    		}
    		cout << endl;
    	}
    
    	for (int i(0); i != h ; i++){
    		for (int j (0); j != b; j++){
    
    			if ( i == j ){
    
    			sum+=mass[i][j];
    			}
    		}
    	}
    
    	cout << "След матрицы составляет: " << sum << endl;
  4. colt

    Гараздо более простое решение без массивов и указателей:

    #include "stdafx.h"
    #include "iostream"
    #include "windows.h"
    #include "cstdlib"
     
    using namespace std;
    int intDim, intSumm, intValue;
    
     
    int _tmain(int argc, _TCHAR* argv[])
    {  
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
     
        while(true)
        {  
            system("CLS");
    		cout<<"Введите размерность матрицы: ";
    		cin>>intDim;	
    		cout<<"\n";
    		intSumm=0;
    		for (int i=0;i<intDim;i++)
    		{
    			for (int j=0;j<intDim;j++)
    			{
    			intValue=rand()%100;
    			if (i==j) intSumm+=intValue;
    			cout<<intValue<<"\t";
    			}
    			cout<<"\n";
    		}
    		cout<<"\n";
    		cout<<"След матрицы: "<<intSumm<<"\n";
    		system("PAUSE");
        }
        return 0;
    }

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

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