С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SlashX6
16 / 16 / 1
Регистрация: 16.03.2012
Сообщений: 430
#1

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

29.09.2012, 21:08. Просмотров 270. Ответов 0
Метки нет (Все метки)

Добрый вечер!
Изучаю 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;
}
}
Помогите пожалуйста соединить и заставить работать этот код, а то познаний в С++ мало, а взялся за задание ради интереса и теперь не получается справится...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2012, 21:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Соединить код и заставить работать программу (C++):

Как заставить код работать на x32 и x64? - C++
есть приложение C/C++ как заставить его запускаться на x64 и на x32 одновременно, нужно ли что-то в настройках компилятора менять ? или оно...

CRC32 C++. Не могу заставить работать готовый код - C++
Добрый день. Нашел вот такую ссылку: http://web.archive.org/web/20080303102530/http://c.snippets.org/snip_lister.php?fname=crc_32.c ...

Как заставить программу не выгружаться из памяти и работать дальше? - C++
Возьмем банальный пример клавиатурный шпион или чтонить в этом роде... Проект Win32 application я разместил в конце ВинМайн цикл...

Не работает код. В чём причина? Как "заставить" работать? - C++
Точка входа и т.д. #include &lt;iostream&gt; #include &lt;string&gt; #include &quot;HConsole.h&quot; int main() { HConsole.Write(&quot;Привет&quot;);...

подскажите как заставить правильно работать программу по реализации класса "треугольник" на C++ - C++
lb_1_oop_sam.h #ifndef lb_1_oop_sam_h #define lb_1_oop_sam_h //Структура &quot;треугольник&quot; class triangle { struct point ...

Как заставить работать do while - C++
Печатает пока 100 строк не будут заполнены, нужно при вводе символа n закончить принятие данных и вывести те, которые ввели. Если не...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2012, 21:08
Привет! Вот еще темы с ответами:

не знаю как заставить работать - C++
7,9.cpp:7:10: error: invalid use of non-static data member ‘matrix::two’ long two,one; ^ 7,9.cpp:8:15: error: from...

как заставить С++ и С# работать вместе? - C++
Здравствуйте! Хотелось бы научится писать проги со совмещение С++ и шарпа... Посоветуйте что-то почитать или хотябы покажите код как...

Как заставить работать <algorithm> - C++
Здравствуйте! У меня есть программа которая vector &lt;int&gt; найдет номер максимального элемента! vector &lt;int&gt;::const_iterator MAX =...

Не удаётся заставить работать move присваивание - C++
Вот сокращенный пример: #include &lt;utility&gt; #include &lt;inttypes.h&gt; struct B { void operator=(B) = delete; //Эти операторы ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.