|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - программа на с++ |
|
C/C++ - программа на с++
|
Новый участник Сообщения: 4 |
Профиль | Отправить PM | Цитировать
привет всем, есть код программы, но я не знаю что какая строка обозначает. если кто может, прокомментируйте пожалуйста каждую строку. заранее спасибо
#include <conio.h> #include <math.h> #include <stdio.h> int main(void) {int nn,i,j; printf("Dimension of the matrix (<=10):"); scanf("%d", &nn); double A[10][10], L[10][10]; //Поэлементный ввод матрицы: for (i=0; i<nn; i++) for (j=0; j<nn; j++) { printf("\nElement [%d,%d]: ", i+1, j+1); float k; scanf("%f", &k); A[i][j] = k; } //Создание единичной матрицы: for (i=0; i<nn; i++) for (j=0; j<nn; j++) if (i!=j) L[i][j]=0; else L[i][j]=1; j = 0; int m=0; int n; do { // Выбор ведущего элемента ниже элемента [j,j-1]: m = j; for (n=j+1; n<nn; n++) if (fabs(A[m][j])<fabs(A[n][j])) m = n; double prm=0; //Переобразования над матрицей А: for (n=0; n<nn; n++) prm = A[j][j]; for (n=0; n<nn; n++) { A[j][n] = double (A[j][n]/prm); L[j][n] = double (L[j][n]/prm); } for (i=0; i<=nn; i++) if (i!=j) { prm = A[i][j]; for (n=j; n<=3; n++) A[i][n] = A[i][n]- double (prm*A[j][n]); for (n=0; n<=3; n++) L[i][n] = L[i][n]- double (prm*L[j][n]); } j++; } while (j<nn); //Вывод на экран обратной матрицы: printf("\nInverse matrix:\n"); for (i=0; i<nn; i++) for (j=0; j<nn; j++) { if (j==0) printf("\n"); else printf("\t"); printf("%f", L[i][j]); } getch(); } |
|
Отправлено: 19:45, 25-05-2011 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Deniskach:
|
|
------- Отправлено: 21:09, 25-05-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Завтра вечером, от нечего делать, и если не опередят, распишу.
Хотя код достаточно прозрачен. Задаются матрицы, формируется единичная матрица (по комментариям) затем над ними производятся какие-то поэлементные действия. Правда, если вглядеться, хлабудень какая-то делается. Поддерживаю вопрос Drongo, Цитата Drongo:
|
|
------- Отправлено: 00:36, 26-05-2011 | #3 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать программа решает задачу, в которой требуется из квадратной матрицы найти обратную. правильность вычисления проветить путем умножения (должна получится единичная матрица)
не спорю воды много, но компилятор dev-с++ 4.9.9.2 не ругается))) большое спасибо за уделенное внимание |
Отправлено: 10:07, 26-05-2011 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Deniskach:
|
||
------- Отправлено: 17:23, 26-05-2011 | #5 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать Цитата:
//Поэлементный ввод матрицы: for (i=0; i<nn; i++) // цикл по строке (столбцу) for (j=0; j<nn; j++) // цикл по столбцу (строке) { printf("\nElement [%d,%d]: ", i+1, j+1); //Ошибка. float k; // объявление перемнной типа float scanf("%f", &k); // считать с консоли число с плавающей точкой k A[i][j] = k; //элемент матрицы } //Создание единичной матрицы: for (i=0; i<nn; i++) for (j=0; j<nn; j++) if (i!=j) // если элемент не на диагонали L[i][j]=0; то присвоить ему значение 0 else // если элемент на главной диагонали L[i][j]=1; //то присвоить ему значение 1 j = 0; int m=0; int n; do // цикл по строке(столбцу) { // Выбор ведущего элемента ниже элемента [j,j-1]: m = j; // m=номер строки (столбца) for (n=j+1; n<nn; n++) // цикл по столбцу (строке) if (fabs(A[m][j])<fabs(A[n][j])) m = n; // сравнение элементов и выбор максимального. m - номер максимального элемента в столбце(строке) double prm=0; //Переобразования над матрицей А: for (n=0; n<nn; n++) //ненужный левый код prm = A[j][j];// элемент главной диагонали for (n=0; n<nn; n++) // цикл по столбцу(строке) { A[j][n] = double (A[j][n]/prm); // деление элементов столбца(строки) на элемент стобца(строки), находящийся на главной диагонали L[j][n] = double (L[j][n]/prm); } for (i=0; i<=nn; i++) // цикл по строке if (i!=j) //если элемент не на главной диагонали { prm = A[i][j]; // присвоение элемента строки(столбца) for (n=j; n<=3; n++) //откуда взялась константа 3? возможно неправильный код. Какой метод используется? A[i][n] = A[i][n]- double (prm*A[j][n]); for (n=0; n<=3; n++) L[i][n] = L[i][n]- double(prm*L[j][n]); } j++; //увеличили номер строки (столбца) } while (j<nn); / |
|
------- Отправлено: 18:28, 26-05-2011 | #6 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Цитата mrcnn:
|
|
Отправлено: 18:55, 26-05-2011 | #7 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать всем большое спасибо.
printf("\nElement [%d,%d]: ", i+1, j+1); Все верно, эта строка для упрощения пониманияо каком столбце и строке в массиве идет речь. Спасибо еще раз!!!!!!!!!!!!! и много много раз еще))) |
Отправлено: 19:41, 26-05-2011 | #8 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать for (n=j; n<=3; n++) //откуда взялась константа 3?
3 взялась из старого кода {int nn=3 раньше почему то было так и без i, j. Видимо я не доглядел //Переобразования над матрицей А: for (n=0; n<nn; n++) //ненужный левый код -- Эту строку я удалил. Еще раз спасибо, особенно mrcnn!!!!!! |
Отправлено: 20:34, 26-05-2011 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Система - программа HP | Frost O.S | Программное обеспечение Windows | 2 | 12-03-2011 16:24 | |
Ошибка - Не запускается программа.. | gadyukin | Microsoft Windows 2000/XP | 1 | 25-03-2009 20:59 | |
Нужна программа, определяющая, каким инсталлятором запакована программа | yaryar | Программное обеспечение Windows | 3 | 24-06-2008 10:56 | |
программа | Rustem | Вебмастеру | 7 | 07-05-2008 11:37 | |
программа на с++ | gh6 | Программирование и базы данных | 4 | 24-10-2006 20:43 |
|