Форум программистов, компьютерный форум CyberForum.ru

Решение СЛАУ методом Крамера - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.94
Erwin
1 / 1 / 0
Регистрация: 12.03.2011
Сообщений: 8
12.03.2011, 22:23     Решение СЛАУ методом Крамера #1
Доброго времени суток!
Пишу курсовую по методу Крамера. Вроде ничего сложного, но программированием я занимаюсь не часто, скачал с нета реферат по теме с исходником. Вставил в прогу защиту от ввода в поток из цифр буквенных символом, приукрасил немножко...
Так как опыта мало, посмотрите плз, может что коряво написано, где улучшить можно. Жду критики))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
 
void Kramer(double C[3][3],double D[3][1]);     //метод Крамера
void AddA();                                    //ввод матрицы 
void AddB();                                    //ввод столбца свободных членов
 
int i,j;
double A[3][3],B[3][1];
char z='y'; 
 
void main()
{
setlocale(LC_ALL,"Russian");
cout<<"\t\t\t\t\t\tКУРСОВОЙ ПРОЕКТ\n\t\t\t\t\t\tпо дисциплине: ЧИСЛЕННЫЕ МЕТОДЫ\n\t\t\t\t\t\tна тему: решение СЛАУ методом Крамера\n\n\n" <<endl;
while (z=='y') 
{ 
AddA();
AddB();
 
cout<<"\n\nДанная система выглядит так\n\n";        //показ СЛАУ
if(A[0][1]>=0 && A[0][2]>=0)
cout<<A[0][0]<<"x1"<<"+"<<A[0][1]<<"x2"<<"+"<<A[0][2]<<"x3"<<"="<< B[0][0]<<endl;
if(A[0][1]>=0 && A[0][2]<0)
cout<<A[0][0]<<"x1"<<"+"<<A[0][1]<<"x2"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[0][2]>=0 && A[0][1]<0)
cout<<A[0][0]<<"x1"<<A[0][1]<<"x2"<<"+"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[0][1]<0 && A[0][2]<0)
cout<<A[0][0]<<"x1"<<A[0][1]<<"x2"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[1][1]>=0 && A[1][2]>=0)
cout<<A[1][0]<<"x1"<<"+"<<A[1][1]<<"x2"<<"+"<<A[1][2]<<"x3"<<"="<< B[1][0]<<endl;
if(A[1][1]>=0 && A[1][2]<0)
cout<<A[1][0]<<"x1"<<"+"<<A[1][1]<<"x2"<<A[1][2]<<"x3"<<"="<<B[1][0] <<endl;
if(A[1][2]>=0 && A[1][1]<0)
cout<<A[1][0]<<"x1"<<A[1][1]<<"x2"<<"+"<<A[1][2]<<"x3"<<"="<<B[1][0] <<endl;
if(A[1][1]<0 && A[1][2]<0)
cout<<A[1][0]<<"x1"<<A[1][1]<<"x2"<<A[1][2]<<"x3"<<"="<<B[1][0]
<<endl;
if(A[2][1]>=0 && A[2][2]>=0)
cout<<A[2][0]<<"x1"<<"+"<<A[2][1]<<"x2"<<"+"<<A[2][2]<<"x3"<<"="<< B[2][0]<<endl;
if(A[2][1]>=0 && A[2][2]<0)
cout<<A[2][0]<<"x1"<<"+"<<A[2][1]<<"x2"<<A[2][2]<<"x3"<<"="<<B[2][0] <<endl;
if(A[2][2]>=0 && A[2][1]<0)
cout<<A[2][0]<<"x1"<<A[2][1]<<"x2"<<"+"<<A[2][2]<<"x3"<<"="<<B[2][0] <<endl;
if(A[2][1]<0 && A[2][2]<0)
cout<<A[2][0]<<"x1"<<A[2][1]<<"x2"<<A[2][2]<<"x3"<<"="<<B[2][0]<<endl;
cout<<"\n\n";
cout<<"С помощью расширенной матрици мы можем представить данную систему так:\n\n";//расширенная матрица
cout<<A[0][0]<<"\t"<<A[0][1]<<"\t"<<A[0][2]<<"\t"<<"|"<<"\t"<<B[0][0]<<endl;
cout<<A[1][0]<<"\t"<<A[1][1]<<"\t"<<A[1][2]<<"\t"<<"|"<<"\t"<<B[1][0]<<endl;
cout<<A[2][0]<<"\t"<<A[2][1]<<"\t"<<A[2][2]<<"\t"<<"|"<<"\t"<<B[2][0]<<endl;
cout<<"\n\n";
Kramer(A,B);                                //вызов функции
cout<<"\nДля ввода новой маотрици нажмите 'y', для выхода -'n' \n\n"; 
cin>>z; 
} 
}
void Kramer(double C[3][3],double D[3][1])
{
double det,det1,det2,det3,x1,x2,x3;
cout<<"\t\tОПРЕДЕЛИТЕЛИ\n\n";
 
det=C[0][0]*C[1][1]*C[2][2]+C[1][0]*C[2][1]*C[0][2]+C[0][1]*C[1][2]*C[2][0]-C[0][2]*C[1][1]*C[2][0]-C[1][0]*C[0][1]*C[2][2]-C[0][0]*C[2][1]*C[1][2];
cout<<"Опререлитель="<<det<<"\n\n";//определитель
if (det!=0)
{
det1=D[0][0]*C[1][1]*C[2][2]+D[1][0]*C[2][1]*C[0][2]+C[0][1]*C[1][2]*D[2][0]-C[0][2]*C[1][1]*D[2][0]-D[1][0]*C[0][1]*C[2][2]-D[0][0]*C[2][1]*C[1][2];
cout<<"Определитель1="<<det1<<"\t";//определитель 1
 
det2=C[0][0]*D[1][0]*C[2][2]+C[1][0]*D[2][0]*C[0][2]+D[0][0]*C[1][2]*C[2][0]-C[0][2]*D[1][0]*C[2][0]-C[1][0]*D[0][0]*C[2][2]-C[0][0]*D[2][0]*C[1][2];
cout<<"Определитель2="<<det2<<"\t";//определитель 2
 
det3=C[0][0]*C[1][1]*D[2][0]+C[1][0]*C[2][1]*D[0][0]+C[0][1]*D[1][0]*C[2][0]-D[0][0]*C[1][1]*C[2][0]-C[1][0]*C[0][1]*D[2][0]-C[0][0]*C[2][1]*D[1][0];
cout<<"Определитель3="<<det3<<"\n\n";//определитель 3
x1=det1/det;
x2=det2/det;
x3=det3/det;
cout << "\t\tРЕШЕНИЕ\n\n";
cout<<"x1="<<x1<<"\t"<<"x2="<<x2<<"\t"<<"x3="<<x3<<endl;
}
else 
{
cout<<"\n\nСистема не имеет решений, так как определитель равен нулю.\n\nДля продолжения нажмите любую клавишу"<<endl;
_getch();
}
}
void AddA()
{
cout<<"\nВведите коэффициенты при переменных x1,x2,x3 в 1-oм,2-oм,3-eм уравнениях"<<"\n\n";
for(i=0;i<3;i++)//ввод матрици коэффициентов
for(j=0;j<3;j++)
cin>>A[i][j]; 
while (cin.fail()) 
    {   
        if(cin.good()==true)
            {;break;}
        else
        {
        cin.clear();
        cin.sync();
        cout << "Введен неверный символ, повторите ввод матрицы\n\n";
        AddA();
        }
    }
}
void AddB()
{
cout<<"\nВведите свободные члены в 1-oм,2-oм,3-eм уравнениях\n\n";
for (i=0;i<3;i++)// ввод столбца свободных членов
cin>>B[i][0];
while (cin.fail()) 
    {   
        if(cin.good()==true)
            {;break;}
        else
        {
        cin.clear();
        cin.sync();
        cout << "Введен неверный символ, повторите ввод столбца свободных членов\n\n";
        AddB();
        }
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
12.03.2011, 22:51     Решение СЛАУ методом Крамера #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
if(A[0][1]>=0 && A[0][2]>=0)
cout<<A[0][0]<<"x1"<<"+"<<A[0][1]<<"x2"<<"+"<<A[0][2]<<"x3"<<"="<< B[0][0]<<endl;
if(A[0][1]>=0 && A[0][2]<0)
cout<<A[0][0]<<"x1"<<"+"<<A[0][1]<<"x2"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[0][2]>=0 && A[0][1]<0)
cout<<A[0][0]<<"x1"<<A[0][1]<<"x2"<<"+"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[0][1]<0 && A[0][2]<0)
cout<<A[0][0]<<"x1"<<A[0][1]<<"x2"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[1][1]>=0 && A[1][2]>=0)
cout<<A[1][0]<<"x1"<<"+"<<A[1][1]<<"x2"<<"+"<<A[1][2]<<"x3"<<"="<< B[1][0]<<endl;
if(A[1][1]>=0 && A[1][2]<0)
cout<<A[1][0]<<"x1"<<"+"<<A[1][1]<<"x2"<<A[1][2]<<"x3"<<"="<<B[1][0] <<endl;
if(A[1][2]>=0 && A[1][1]<0)
cout<<A[1][0]<<"x1"<<A[1][1]<<"x2"<<"+"<<A[1][2]<<"x3"<<"="<<B[1][0] <<endl;
if(A[1][1]<0 && A[1][2]<0)
cout<<A[1][0]<<"x1"<<A[1][1]<<"x2"<<A[1][2]<<"x3"<<"="<<B[1][0]
<<endl;
if(A[2][1]>=0 && A[2][2]>=0)
cout<<A[2][0]<<"x1"<<"+"<<A[2][1]<<"x2"<<"+"<<A[2][2]<<"x3"<<"="<< B[2][0]<<endl;
if(A[2][1]>=0 && A[2][2]<0)
cout<<A[2][0]<<"x1"<<"+"<<A[2][1]<<"x2"<<A[2][2]<<"x3"<<"="<<B[2][0] <<endl;
if(A[2][2]>=0 && A[2][1]<0)
cout<<A[2][0]<<"x1"<<A[2][1]<<"x2"<<"+"<<A[2][2]<<"x3"<<"="<<B[2][0] <<endl;
if(A[2][1]<0 && A[2][2]<0)
cout<<A[2][0]<<"x1"<<A[2][1]<<"x2"<<A[2][2]<<"x3"<<"="<<B[2][0]<<endl;
cout<<"\n\n";
cout<<"С помощью расширенной матрици мы можем представить данную систему так:\n\n";//расширенная матрица
cout<<A[0][0]<<"\t"<<A[0][1]<<"\t"<<A[0][2]<<"\t"<<"|"<<"\t"<<B[0][0]<<endl;
cout<<A[1][0]<<"\t"<<A[1][1]<<"\t"<<A[1][2]<<"\t"<<"|"<<"\t"<<B[1][0]<<endl;
cout<<A[2][0]<
здесь можно все циклами писать
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
12.03.2011, 22:58     Решение СЛАУ методом Крамера #3
Jesus Christ
это программой то сложно назвать
Erwin
1 / 1 / 0
Регистрация: 12.03.2011
Сообщений: 8
12.03.2011, 23:01  [ТС]     Решение СЛАУ методом Крамера #4
Цитата Сообщение от alex_x_x Посмотреть сообщение
Jesus Christ
это программой то сложно назвать
Ну...)) Я понимаю, что примитив, но результат выдает)
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
12.03.2011, 23:03     Решение СЛАУ методом Крамера #5
Erwin, IE тоже результат выдает) но гугл это делает быстрее))
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
12.03.2011, 23:07     Решение СЛАУ методом Крамера #6
Аффтар, будь я на месте твоего препода, я б тебя при попытке такое сдать задушил
Erwin
1 / 1 / 0
Регистрация: 12.03.2011
Сообщений: 8
12.03.2011, 23:12  [ТС]     Решение СЛАУ методом Крамера #7
Цитата Сообщение от Хохол Посмотреть сообщение
Аффтар, будь я на месте твоего препода, я б тебя при попытке такое сдать задушил
Я же писал, что исходник не мой) Вот спрашиваю, где можно улучшить, но походу настроения такие, что нужно переписывать весь код)

А препаду моему все равно какой код, тем более, что предмет не программирование.

 Комментарий модератора 
Следите за речью.
На форуме запрещены мат и производные
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
12.03.2011, 23:12     Решение СЛАУ методом Крамера #8
Примените циклы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2011, 23:14     Решение СЛАУ методом Крамера
Еще ссылки по теме:

Решение СЛАУ методом отражений C++
Решение СЛАУ методом отражений C++
C++ Решение слау методом релаксации
Утечка памяти (решение СЛАУ методом Крамера, матрицы, malloc) C++
C++ СЛАУ методом Крамера

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
12.03.2011, 23:14     Решение СЛАУ методом Крамера #9
Ну если совсем все равно - пытайтесь сдать. Иначе - немедленно уничтожить.
Yandex
Объявления
12.03.2011, 23:14     Решение СЛАУ методом Крамера
Ответ Создать тему
Опции темы

Текущее время: 23:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru