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

Соединить код и заставить работать программу - C++

Восстановить пароль Регистрация
 
SlashX6
15 / 15 / 1
Регистрация: 16.03.2012
Сообщений: 420
29.09.2012, 21:08     Соединить код и заставить работать программу #1
Добрый вечер!
Изучаю C++ пару дней и столкнулся с проблемой, что никак не могу заставить работать программу. На бумаге решить получилось, а на С++ нет.
На форуме нашёл код для решения СЛАУ методом Гаусса. И не могу заставить работать. Программа в которой пытаюсь сделать это всё - Microsoft Visual C++ 2008 Express Edition.
Вот этот пример который надо решить с 4-мя знаками после запятой и добавит проверку:

0,40x1 + 0,11x2 + 0,18x3 = 0,47
0,28x1 - 0,59x2 + 0,02x3 = 0,01
0,02x1 + 0,24x2 + 0,10x3 = 0,22

Вот код который нашёл. Автор ( McRowan )
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <cstdlib>
#include <cstdlib>
using namespace std;
 
bool CProg()
 {
cout << "\n" << "Продолжим? (1-да) "<<"\t";
char c;
 cin >> c;
return c=='1';
}
 
 int main ()
 {
setlocale (0,"");
do
 {
int i(0), j(0);
 cout << "Введите число неизвестных" << endl;
cin >> n;
int MassivA[20][20], MassivC[20], MassivItog[20][20];
double x[20];
cout << "Введите коэффициенты" << endl;
for ( i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
 cin >> MassivA [i][j];
 cout << endl;
 }
cout << "Введите солбец свободных членов" << endl;
for ( i = 0; i < n; ++i)
 {
cin >> MassivC [i];
 cout << endl;
 } 
//заполняем окончательный массив 
for ( i = 0; i < n; ++i)
 {
for ( j = 0; j < n; ++j)
 MassivItog[i][j] = MassivA [i][j];
for ( j = n; j < n+1; ++j)
 MassivItog[i][j] = MassivC [i];
 }
cout <<"Полная система" << endl;
for ( i = 0; i < n; ++i)
{
for (j = 0; j < n +1; ++j)
{
 cout.setf(ios::left);
 cout.width (7);
 cout << MassivItog [i][j] << '\t';
 }
 cout << endl;
 }
cout << "------------------------------------------------" << endl;
// сортировка на диагональных местах не должно быть "0", нужно соединить с прямым ходом
for (i = 0; i < n - 1 ; ++i)
for (j = 0; j < n+1 ; ++j)
if (MassivItog[i][j] == 0)
if (MassivItog[i+1][j] != 0)
 {
int t = MassivItog[i][j];
 MassivItog[i][j] = MassivItog[i+1][j];
 MassivItog[i+1][j] = t;
 }
//прямой ход
for (i = 0; i < n ; ++i) 
{
int a = MassivItog[i][i];
for (j = i + 1; j < n; ++j)
 {
int b = MassivItog[j][i];
for ( int k = 0; k < n+1; ++k)
MassivItog[j][k] = a * MassivItog[j][k] - b * MassivItog[i][k];
 }
 }
cout << "-------------------------------" << endl;
for ( j = 0; j < n; ++j)
{
for (int k = 0; k < n + 1 ; ++k)
{
 cout.setf(ios::left);
 cout.width (7);
 cout << MassivItog [j][k] << '\t';
 }
 cout << endl;
 }
 
 //вывод матрицы треугольного вида
 cout <<"Матрица приведенная к треугольному виду:"<< endl;
for (j = 0; j < Sys.n; j++)
 {
for (i = 0; i < Sys.n + 1; i++)
{
 cout.setf(ios::left);
 cout.width (7);
 cout << MassivItog[j][i] << '\t';
 }
 cout << endl;
 }
 
//обратный ход еще не осуществлен
 
 
 }
while (CProg());
}
Ответы автора ( UFO94 )
1) Массивы обьявляем так:
C++
1
2
3
4
5
6
7
8
int* *MassivA=new int*[n];
int* MassivC=new int[n];
int* *MassivItog=new int*[n];
for(int i=0; i<n; i++)
{
MassivA[i]=new int[n];
MassivItog[i]=new int[n+1];
}
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
31
32
33
34
35
36
37
38
for(int i=0; i<n; i++)
{
if(MassivItog[i][i]!=0)
{
int a = MassivItog[i][i];
for (j = i + 1; j < n; ++j)
 {
int b = MassivItog[j][i];
for ( int k = 0; k < n+1; ++k)
MassivItog[j][k] = a * MassivItog[j][k] - b * MassivItog[i][k];
 }
}
else
{
bool flag=false;//Этот флаг нам говорит, есть ли строки с не 0 в этом столбце
for(int j=i+1; j<n; j++)
if(MassivItog[j][i]!=0)
{
flag=true;
for(int k=0; k<n+1; k++)
{
int tmp=0;
tmp=MassivItog[i][k];
MassivItog[i][k]=MassivItog[j][k];
MassivItog[j][k]=tmp;
}
break;
}
if(flag==flase)
{
printf("System has no solunions, or it has infinity solutions\n");
system("PAUSE");
return 0;
}
else
i--;
}
}
На обратном проходе у нас уже не могут быть 0 на главной диагонали.
C++
1
2
3
4
5
6
7
8
9
10
for(int i=n-1; i>0; i--)
{
int a=MassivItog[i][i];
for(int j=i-1; j>=0; j++)
{
int b=MassivItog[j][i];
MassivItog[j][n]=a*MassivItog[j][n]-b*MassivItog[i][n];
MassivItog[j][i]=0;
}
}
Помогите пожалуйста соединить и заставить работать этот код, а то познаний в С++ мало, а взялся за задание ради интереса и теперь не получается справится...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2012, 21:08     Соединить код и заставить работать программу
Посмотрите здесь:

как заставить С++ и С# работать вместе? C++
C++ Не работает код. В чём причина? Как "заставить" работать?
Как заставить программу не выгружаться из памяти и работать дальше? C++
FindRersource API не могу заставить работать C++
Как заставить работать <algorithm> C++
подскажите как заставить правильно работать программу по реализации класса "треугольник" на C++ C++
C++ Как заставить код работать на x32 и x64?
CRC32 C++. Не могу заставить работать готовый код C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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