Найти след матрицы, след матрицы — сумма элементов главной диагонали. Размер матрицы вводит пользователь, матрицу заполнять случайными числами.
Для начала, чтобы хотя-бы представлять у себя в голове решение данной программы, давайте научимся работать с двумерными массивами в С++. На этап сложнее будет использование в программе динамических массивов.
С массивами мы разобрались, а вот каким же образом генерировать случайные числа? Перейдите по ссылке, там подробно описан этот процесс. Также можно почитать справочник по функции 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
Комментарии
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; }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; }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;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; }