2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 С++ : найти определитель матрицы 3х3
Сообщение24.11.2007, 14:57 


06/01/06
66
В С++ плохо разбираюсь еще. :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 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Неправильно, что d объявлен как char. Должен быть тоже int.

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

 Профиль  
                  
 
 
Сообщение24.11.2007, 15:11 


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

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

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


29/07/05
8248
Москва
Справка по формату printf

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

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

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

 Профиль  
                  
 
 
Сообщение24.11.2007, 17:02 


06/01/06
66
вот переделала немножко
Код:
#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 
Заслуженный участник


14/12/06
881
PAV писал(а):
Справка по формату printf

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group