Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - программа на с++

Ответить
Настройки темы
C/C++ - программа на с++

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 25-05-2011
Описание: Пожалуйста используйте тег кода - [code] знак # на панели ввода
привет всем, есть код программы, но я не знаю что какая строка обозначает. если кто может, прокомментируйте пожалуйста каждую строку. заранее спасибо

Код: Выделить весь код
#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

 

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Deniskach:
если кто может, прокомментируйте пожалуйста каждую строку »
А что делает программа?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 21:09, 25-05-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Завтра вечером, от нечего делать, и если не опередят, распишу.
Хотя код достаточно прозрачен.
Задаются матрицы, формируется единичная матрица (по комментариям) затем над ними производятся какие-то поэлементные действия. Правда, если вглядеться, хлабудень какая-то делается.
Поддерживаю вопрос Drongo,
Цитата Drongo:
А что делает программа? »
Без этого сложно понять, правильно работает программа или нет.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 00:36, 26-05-2011 | #3


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


программа решает задачу, в которой требуется из квадратной матрицы найти обратную. правильность вычисления проветить путем умножения (должна получится единичная матрица)
не спорю воды много, но компилятор dev-с++ 4.9.9.2 не ругается)))
большое спасибо за уделенное внимание

Отправлено: 10:07, 26-05-2011 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Deniskach:
программа решает задачу, в которой требуется из квадратной матрицы найти обратную. правильность вычисления проветить путем умножения (должна получится единичная матрица)
не спорю воды много, но компилятор dev-с++ 4.9.9.2 не ругается))) »
Я почему спросил, что делает программа, ведь если вы автор кода, что мешает самому откомментировать код?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 17:23, 26-05-2011 | #5


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата:
printf("\nElement [%d,%d]: ", i+1, j+1);
Это ошибка - нет смысла добавлять единицы к счетчикам.

Код: Выделить весь код
//Поэлементный ввод матрицы:
 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
Код: Выделить весь код
//Переобразования над матрицей А:
    for (n=0; n<nn; n++)
левый код - не нужен

Код: Выделить весь код
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); /

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:28, 26-05-2011 | #6


Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата mrcnn:
printf("\nElement [%d,%d]: ", i+1, j+1); »
Вообще-то, ИМХО, это для вывода привычной обычному человеку нумерации (не с нуля, как в си, а с 1). Так что ошибки здесь нет.

Отправлено: 18:55, 26-05-2011 | #7


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


всем большое спасибо.
printf("\nElement [%d,%d]: ", i+1, j+1); Все верно, эта строка для упрощения пониманияо каком столбце и строке в массиве идет речь.
Спасибо еще раз!!!!!!!!!!!!! и много много раз еще)))

Отправлено: 19:41, 26-05-2011 | #8


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - программа на с++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - программа 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




 
Переход