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

Метод Гаусса в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.96
Shakira
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 11
26.04.2010, 14:06     Метод Гаусса в С++ #1
Подскажите please, как запустить эту программу, через C++???

Решение системы линейных уравнений методом Гаусса.

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
#include<io.h>
#include "stdio.h"
#include "conio.h"
#include <windows.h>
#include <iostream>
#include <time.h>
#include <io.h>
#include <fcntl.h>
#include <string.h>
#include "stdafx.h"
using namespace std;
 
#include <stdio.h> // Описания функций ввода-вывода
#include <math.h> // Описания математических функций
#include <stdlib.h> // Описания функций malloc и free
 
const int n=3;
void ReadData()
{
int n;
double A[n][n];
FILE*f=fopen("l1.txt","rt");
if (f!=0)
printf("CAN'T OPEN FILE\nPlease, f**k off!");
{
 
fscanf(f,"%d",&n);
printf("Sborka matritsi m- na n-:\n");
for (int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
fscanf(f,"%d",&A[i][j]);
printf("%d",A[i][j]);
}
printf("\n");
}
printf("\n\n");
fclose(f);
}
}
 
void Gauss
( double X[n], const double Z[n][n], const double Y[n])
{
ReadData();
double A[n][n]; // матрица коэффицентов Гаусса
double B[n]; // рабочий массив свободных членов
int i,
int j,
int k; // рабочие переменные
for( i = 0; i < n; i++ ) // копирование в рабочую матрицу A
{
for( j = 0; j < n; j++ )
A[i][j] = Z[i][j];
B[i] = Y[i]; // копирование свободных членов
X[i] = 0;
}
for( k = 0; k < n-1; k++ )
for( i = k+1; i < n; i++ ) // преобразование строк
{
double r = A[i][k] / A[k][k];
for( j = k; j < n; j++ )
A[i][j] -= A[k][j] * r;
B[i] -= B[k] * r;
}
X[n-1] = B[n-1] / A[n-1][n-1];
 
for( i = n-2; i >= 0; i-- )
{
double s = 0;
for( j = i+1; j < n; j++ )
s += A[i][j] * X[j];
X[i] = ( B[i] - s ) / A[i][i];
}
 
printf( "\n" );
for( i = 0; i < n; i++ )
{ printf( "\n" );
for( j = 0; j < n; j++ )
printf( "%8.2lf", A[i][j] );
printf( " %8.2lf", B[i] );
}
}
 
/* ------------------------------------------------- */
 
void main( void )
{
ReadData();
double X[n];// корни системы линейных уравнений
short i, j; // рабочие переменные
printf( " matritsa A* matritsa B\n" );
for( i = 0; i < n; i++ ) // цикл строк
{
printf( "\n" ); // новая строка на мониторе
for( j = 0; j < n; j++ )
 
printf( "%8.2lf", A[i][j] );
printf( " %8.2lf", B[i] );
 
}
printf( "\n" );
printf( "stypen4atii vid matritsi \n" );
Gauss( X, A, B ); // решение методом Гаусса
printf( "\n" );
printf( "\n" );
printf( " zna4enia peremennih x1,x1,x3\n" );
printf( "\n X = " );
 
for( i = 0; i < n; i++ )
 
printf( "%8.2lf", X[i] );
printf( "\n" );
printf( "\n" );
printf( "rang=\n" );
 
getch();
}
Добавлено через 3 часа 14 минут
Кто разбирается в программе С++, помогите разобраться, как начать, как эту программу "туда" вбить и что потом "можно" сделать что б она "хотя бы показала ошибки" ????
Я вообще с этой програмой не дружу. (((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2010, 14:06     Метод Гаусса в С++
Посмотрите здесь:

Метод Гаусса C++
Метод Гаусса C++
метод Гаусса C++
метод гаусса C++
C++ Метод Гаусса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NobodyElseButMe
 Аватар для NobodyElseButMe
6 / 6 / 0
Регистрация: 07.02.2010
Сообщений: 33
26.04.2010, 14:46     Метод Гаусса в С++ #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
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
template <class Data> class Matrix
{
Data **matrix, *freemembers;
int *power;
public:
 
 
 
 
Matrix::Matrix(Data **a, Data *b, int n)
{
power = new int (n);
matrix = new Data* [*power];
freemembers = new Data [*power];
  for (int i=0; i<*power; i++)
  {
    matrix[i] = new Data [*power];
    for (int j=0; j<*power; j++)
      matrix[i][j]=a[i][j];
    freemembers[i]=b[i];
  }
};
 
double *Matrix::SqrMatrixSolve()
{
for (int i=0; i<*power-1;i++)
{
  int m=i;
  for (int j=i+1;j<*power;j++)
    if (matrix[m][i]<matrix[j][i])
      m=j;
  Data *max=matrix[m];
  matrix[m]=matrix[i];
  matrix[i]=max;
  max = new Data;
  *max=freemembers[m];
  freemembers[m]=freemembers[i];
  freemembers[i]=*max;
  delete max;
  for (int j=i+1;j<*power;j++)
    matrix[i][j]/=matrix[i][i];
  freemembers[i]/=matrix[i][i];
  matrix[i][i]=1;
  for (int j=i+1; j<*power; j++)
  {
    for (int k=i+1; k<*power; k++)
      matrix[j][k]-=matrix[j][i]*matrix[i][k];
    freemembers[j]-=matrix[j][i]*freemembers[i];
    matrix[j][i]=0;
  }
}
freemembers[*power-1]/=matrix[*power-1][*power-1];
matrix[*power-1][*power-1]=1;
for (int i=*power-2; i>=0;i--)
{
  for (int j=i+1; j<*power;j++)
  {
    matrix[i][j]*=freemembers[j];
    freemembers[i]-=matrix[i][j];
    matrix[i][j]=0;
  }
}
return freemembers;
};
 
Matrix::~Matrix()
{
for (int i=0; i<*power; i++)
  delete [] matrix[i];
delete [] matrix;
delete power;
};
 
};
fazanaka
Горе студент
 Аватар для fazanaka
37 / 37 / 1
Регистрация: 27.01.2010
Сообщений: 270
26.04.2010, 14:50     Метод Гаусса в С++ #3
Для начала тебе нуна поставить
[ссылки удалены]

Потом открываешь, создаешь новый файл, вставляешь, компилируешь... походу думаю разберешься!
NobodyElseButMe
 Аватар для NobodyElseButMe
6 / 6 / 0
Регистрация: 07.02.2010
Сообщений: 33
26.04.2010, 14:52     Метод Гаусса в С++ #4
Неа, не скомпилится. На g++ проверено.
Shakira
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 11
26.04.2010, 15:34  [ТС]     Метод Гаусса в С++ #5
Так за все большое спасибо, но я немножко не пойму две вещи что такое g++, и как компилоровать???
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
26.04.2010, 19:56     Метод Гаусса в С++ #6
fazanaka, ознакомьтесь с правилами форума. Все допустимые ссылки уже давно есть на форуме Бесплатные среды (IDE) для программирования на С/С++

Shakira, вот, исправил ошибки
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
#include <conio.h>
const int n=3;
 
double A[n][n]; // матрица коэффицентов Гаусса
double B[n]; // рабочий массив свободных членов
void ReadData()
{
    FILE*f=fopen("l1.txt","rt");
    if (f!=NULL)
        printf("CAN'T OPEN FILE\nPlease, f**k off!");
    else
    {
 
        fscanf(f,"%d",&n);
        printf("Sborka matritsi m- na n-:\n");
        for (int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                fscanf(f,"%d",&A[i][j]);
                printf("%d",A[i][j]);
            }
            printf("\n");
        }
        printf("\n\n");
        fclose(f);
    }
}
 
void Gauss( double X[n], const double Z[n][n], const double Y[n])
{
    ReadData();
 
    int i, j, k; // рабочие переменные
    for( i = 0; i < n; i++ ) // копирование в рабочую матрицу A
    {
        for( j = 0; j < n; j++ )
            A[i][j] = Z[i][j];
        B[i] = Y[i]; // копирование свободных членов
        X[i] = 0;
    }
    for( k = 0; k < n-1; k++ )
        for( i = k+1; i < n; i++ ) // преобразование строк
        {
            double r = A[i][k] / A[k][k];
            for( j = k; j < n; j++ )
                A[i][j] -= A[k][j] * r;
            B[i] -= B[k] * r;
        }
        X[n-1] = B[n-1] / A[n-1][n-1];
 
        for( i = n-2; i >= 0; i-- )
        {
            double s = 0;
            for( j = i+1; j < n; j++ )
                s += A[i][j] * X[j];
            X[i] = ( B[i] - s ) / A[i][i];
        }
 
        printf( "\n" );
        for( i = 0; i < n; i++ )
        { printf( "\n" );
        for( j = 0; j < n; j++ )
            printf( "%8.2lf", A[i][j] );
        printf( " %8.2lf", B[i] );
        }
}
 
/* ------------------------------------------------- */
 
void main( void )
{
    ReadData();
    double X[n];// корни системы линейных уравнений
    short i, j; // рабочие переменные
    printf( " matritsa A* matritsa B\n" );
    for( i = 0; i < n; i++ ) // цикл строк
    {
        printf( "\n" ); // новая строка на мониторе
        for( j = 0; j < n; j++ )
 
            printf( "%8.2lf", A[i][j] );
        printf( " %8.2lf", B[i] );
 
    }
    printf( "\n" );
    printf( "stypen4atii vid matritsi \n" );
    Gauss( X, A, B ); // решение методом Гаусса
    printf( "\n" );
    printf( "\n" );
    printf( " zna4enia peremennih x1,x1,x3\n" );
    printf( "\n X = " );
 
    for( i = 0; i < n; i++ )
 
        printf( "%8.2lf", X[i] );
    printf( "\n" );
    printf( "\n" );
    printf( "rang=\n" );
 
    getch();
}
Судя по вашему коду, то программа писалась в MS VS. Можете ее скачать по ссылке MS VC++ 9 EE или MS VS 9 EE
Yandex
Объявления
26.04.2010, 19:56     Метод Гаусса в С++
Ответ Создать тему
Опции темы

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