Консультация № 110303
20.11.2007, 17:04
0.00 руб.
0 1 1
Здравствуйте!
Совсем не могу понять, как решать задачи с помощью подпрограмм (т.е. как их объявлять и вызывать в порграмме. Помогите пожалуйста решить:
1) Задано две квадратные матрицы n-ого порядка (n<=20). Найти квадрат той из них, в которой сумма элементов главной диагонали наименьшая.
2) Вычислить: x<sub>1</sub>*x<sub>n</sub>+x<sub>2</sub>*x<sub>n-1</sub>+...+x<sub>n</sub>*x<sub>1</sub>? где x<sub>i</sub>-наибольший элемент i-ой строки матрицы А<sub>n*n</sub>.
Borland C++ 3.1
Буду благодарен за любую помощь!

Обсуждение

Неизвестный
21.11.2007, 05:01
общий
это ответ
Здравствуйте, LexXx!
Вот решение вашей задачи. Написано в среде MS VS 2005. Для BC 3.1 заголовочный файл ввода-вывода называется <iostream.h> и using namespace std; использовать не нужно. И функция rand() должная быть кажется другой. Но это все мелочи, а так в целом все позиции вопроса в коде отражены, и использование подпрограмм (функций) максимальное...

Приложение:
#include <stdlib.h>#include <time.h>#include <iostream>using namespace std;#define R_LIMIT 100;int** create_matrix(int size);void delete_matrix(int **A, int size);void input_matrix (int **A, int size);void output_matrix(int **A, int size);int diagonal_summ(int **A, int size);int** matrix_square(int **A, int size);int max_element_in_row(int **A, int row, int size);int product_of_max_elements(int **A, int size);int **create_matrix(int size) { int **A; A = new int*[size]; for(int i=0; i<size; i++) A[i] = new int[size]; return A;}void delete_matrix(int **A, int size) { for(int i=0; i<size; i++) delete[] A[i]; delete[] A;}void input_matrix(int **A, int size) { for(int i=0; i<size; i++) for(int j=0; j<size; j++) A[i][j] = rand()%R_LIMIT;}void output_matrix(int **A, int size) { for(int i=0; i<size; i++) { for(int j=0; j<size; j++) cout << A[i][j] << "\t"; cout << endl; }}int diagonal_summ(int **A, int size) { int summ = 0; for(int i=0; i<size; i++) summ += A[i][i]; return summ;}int** matrix_square(int **A, int size) { int **S_A = create_matrix(size); for(int i=0; i<size; i++) for(int j=0; j<size; j++) for(int k=0; k<size; k++) S_A[i][j] = A[i][k] * A[k][j]; return S_A;}int max_element_in_row(int **A, int row, int size) { int max = A[row][0]; for(int i=0; i<size; i++) if(A[row][i] > max) max = A[row][i]; return max;}int product_of_max_elements(int **A, int size) { int product = 0; for(int i=0; i<size; i++) product += max_element_in_row(A, i, size) * max_element_in_row(A, size - i - 1, size); return product;}int main(int argc, char* argv[]) { int size = 7; int **A = create_matrix(size); int **B = create_matrix(size); srand((unsigned) time(NULL)); input_matrix(A, size); input_matrix(B, size); cout << "Matrix A:" << endl; output_matrix(A, size); cout << endl << "Matrix B:" << endl; output_matrix(B, size); int ds_a = diagonal_summ(A, size); int ds_b = diagonal_summ(B, size); cout << endl << "Summ at main diagonal of matrix A: " << ds_a << endl; cout << "Summ at main diagonal of matrix B: " << ds_b << endl; int **C; if(ds_a > ds_b) { C = matrix_square(A, size); cout << endl << "Square of matrix A:" << endl; } else { C = matrix_square(B, size); cout << endl << "Square of matrix B:" << endl; } output_matrix(C, size); delete_matrix(C, size); cout << endl <<"x1*xn + x2*x(n-1) + ... + xn*x1 in matrix A: " << product_of_max_elements(A, size) << endl; delete_matrix(A, size); delete_matrix(B, size); return 0;}
Форма ответа