2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 С++ : найти определитель матрицы 3х3
Сообщение24.11.2007, 14:57 
В С++ плохо разбираюсь еще. :oops: В инете нашла много алгоритмов для нахождения определителя матрицы. Но все не то. У меня задача из главы "простейшие программы". Найти определитель матрицы 3х3 нужно по определению определителя.
Сидела думала, правильно или нет. Вот что у меня получилось:
Код:
#include <iostream.h>
#include <stdio.h>
# include <stdlib.h>
#define n 3
int a [n][n];
void main()
{
int i,j;
char d;


   for(i=0;i<n;i++)
     for(j=0;j<n;j++)
        {printf("Введите элемент матрицы [%d][%d] ",i+1,j+1);scanf("%d",&a[i][j]);}
     

     d=((a[0][0]*a[1][1]*a[2][2]) + (a[0][1]*a[1][2]*a[2][0])+ (a[1][0]*a[0][2]*a[2][1]) - (a[2][0]*a[1][1]*a[0][2]) - (a[0][0]*a[2][1]*a[1][2]) - (a[1][0]*a[0][1]*a[2][2]));
       printf("определитель равен = %d\n", d);

}

и еще не получается никак матрицу вывести по строкам. Она у меня или вся в строчку выходи или вся в один столбик. Может подскажет кто? В книжке про это ничего не сказано. А вывод массива показан на a[N]. А как мне мой а[n][n] вывести, чтоб красиво было? :roll:

 
 
 
 
Сообщение24.11.2007, 15:06 
Аватара пользователя
Неправильно, что d объявлен как char. Должен быть тоже int.

Матрицу можно вывести так же в двойном цикле: во внутреннем цикле печатаете числа одно за другим, а после каждого прохода внутреннего цикла печатаете перевод на следующую строку. Еще удобно прои печати фиксировать минимальный размер поля, чтобы числа стояли строго одно под другим и было красиво.

 
 
 
 
Сообщение24.11.2007, 15:11 
PAV писал(а):
Еще удобно прои печати фиксировать минимальный размер поля, чтобы числа стояли строго одно под другим и было красиво.

А где можно прочитать об этом? Не знаю как фиксировать минимальный размер поля, а очень хочется, чтоб красиво было. :wink:

 
 
 
 
Сообщение24.11.2007, 15:42 
Аватара пользователя
Справка по формату printf

Если кратко, то попробуйте при выводе написать что-то вроде %7d и посмотрите, что получится.

Кстати, вводить матрицу по одному значению довольно неудобно. Возможно, было бы проще использовать что-то вроде
Код:
scanf("%d %d %d", &i1, &i2, &i3);

При этом еще нужно проверять значение, которое возвращает scanf. В нормальном случае оно должно быть равно количеству успешно считанных полей, т.е. 3. Если нет - то значит что-то не так, эту ситуацию стоит обработать особо. Например, вывести сообщение об ошибке и предложить ввести строку еще раз.

 
 
 
 
Сообщение24.11.2007, 17:02 
вот переделала немножко
Код:
#include<conio.h>
#include <iostream.h>
#include <stdio.h>
# include <stdlib.h>
#define n 3
int a [n][n];
void main()
{
int i,j;
int d;


for(i=0;i<n;i++)
for(j=0;j<n;j++)
{printf("Введите элемент матрицы [%d][%d] ",i+1,j+1); scanf("%d",&a[i][j]);}

clrscr();
cout<<"Ваша матрица:\n";
   for(i=0;i<n;i++)
{
for(j=0;j<n;j++)

printf("%7d",a[i][j]);
puts("\n");
}


d=((a[0][0]*a[1][1]*a[2][2]) + (a[0][1]*a[1][2]*a[2][0])+ (a[1][0]*a[0][2]*a[2][1]) - (a[2][0]*a[1][1]*a[0][2]) - (a[0][0]*a[2][1]*a[1][2]) - (a[1][0]*a[0][1]*a[2][2]));
printf("определитель равен = %d\n", d);

}

Теперь матрицу красиво выводит :)

 
 
 
 
Сообщение04.12.2007, 09:14 
PAV писал(а):
Справка по формату printf

Это на C...
На C++ лучше воспользоваться или манипулятором setw, или тем же printf, но из библиотеки boost (boost.org/libs/format/index.html).

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group