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

Системы линейных уравнений методом Гаусса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передача данных между двумя приложениями. http://www.cyberforum.ru/cpp-beginners/thread571956.html
Суть проблемы такова: есть приложение на с#, производящее вычисления, результатом является массив данных. Есть прога на с++ + QT, умеющая визуализировать подобные данные. Вопрос: можно ли как-то передать данные (массив интов) из проги на с# в прогу на с++ в реальном времени (т.е., например, без записи в файл и чтения)?
C++ sdl отрисовка поля Хочется понять принцип отрисовки поля средствами sdl. Допустим нужно поле 3х3, ячейки поля квадратные поэтому использую SDL_Rect, где хранить координаты Х,Y в векторе или массиве? В конечном счете размер поля будет вводить сам юзер. И как реализовать цикл для создания вектора/массива с этими самыми координатами... первая мысль была постоянно увеличивать координату Х, на ширину ячейки поля, и... http://www.cyberforum.ru/cpp-beginners/thread571934.html
Запись класса в файл C++
Приветствую. Я хочу записать битовую форму класса, но столкнулся с делемой. Насколько мне известно, есть две группы функций записи битов в файл: 1) _wsopen_s _read _write _filelength _tell _lseek
C++ НЕконсольные приложения
Не умею создавать не консольные приложения. Ну совсем. Никто не учил, сам не понимаю. Где я могу почитать информацию о создании вин32 проектов. Можно пожалуйста литературу? И желательно более понятную и адекватную) Спасибо заранее)
C++ Хеш-таблица методом цепочек http://www.cyberforum.ru/cpp-beginners/thread571891.html
Здравствуйте, помогите написать хеш таблицу методом цепочек. Не могу понять, как все это сделать, перечитал кучу информации, никак понять не могу. Мне нужно чтобы был класс хеш таблица. Если не написать, так хотя бы объясните что моя программа будет включать в себя. Я так понял будет структура, что то вроде: struct item{ int key; int data; item* next; }; А дальше что, класс...
C++ Закольцевать и отсортировать двунаправленный список создать двунаправленный список с числами из диапазона от - 50 до + 50. после создания списка преобразовать его в кольцо. предусмотреть возможность движения по кольцу в обе стороны с отображением места положения текущего элемента. в конце работы восстановить начальный список. написать программу сортировки и поиска в двунаправленном списке. отсортировать список и вывести его на экран. найти элемент... подробнее

Показать сообщение отдельно
KPN
4 / 4 / 1
Регистрация: 23.03.2012
Сообщений: 40

Системы линейных уравнений методом Гаусса - C++

12.05.2012, 16:48. Просмотров 45021. Ответов 9
Метки (Все метки)

День(ночь, утро, вечер) добрый(-ая, -ое)
вопрос про метод Гаусса, как его реализовать на С++???
что-то совсем запутался...

вот что сделал:
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
#include<iostream>
using namespace std;
 
int main()
{
   int i, j, n, m;
//создаем массив
   cout << "введи число уравнений: ";
         cin >> n;
         cout << "введи число неизвестных: ";
         cin >> m;
         m+=1;
    int **matrix = new int *[n];
         for (i=0; i<n; i++)
             matrix[i] = new int [m];
 
//инициализируем
   cout << "vvedi element" << endl;
    for (i = 0; i<n; i++)
        for (j = 0; j<m; j++)
            cin >> matrix[i][j];
 
 //выводим массив
    cout << "matrix: " << endl;
      for (i=0; i<n; i++)
       {
          for (j=0; j<m; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
       }
    cout << endl;
 
//Метод Гаусса
//Прямой ход, приведение к верхнетреугольному виду
 
 
/*Обратный ход,
методом исключения неизвестных
в обратном порядке решаем уравнения
*/
 
 
 
 
//Выводим решения
 
     delete[] matrix;
return 0;
}
на форуме нашел подобную тему, но там со статическим массивом( нужно с динамическим)
вот как там реализовано:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 for (i=0; i<N; i++)
   {
     tmp=matrix[i][i];
       for (j=N;j>=i;j--)
           matrix[i][j]/=tmp;
         for (j=i+1;j<N;j++)
        {
           tmp=matrix[j][i];
             for (k=N;k>=i;k--)
           matrix[j][k]-=tmp*matrix[i][k];
        }
    }
/*обратный ход*/
  xx[N-1] = matrix[N-1][N];
   for (i=N-2; i>=0; i--)
     {
         xx[i] = matrix[i][N];
         for (j=i+1;j<N;j++) xx[i]-=matrix[i][j]*xx[j];
     }
пробовал это совсестить с тем что я написал, не работает... при выводе решений пишет одни нули.

хелп, что не так делаю???

Добавлено через 8 часов 0 минут
сделал вот так:
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
#include<iostream>
using namespace std;
 
int main()
{
   int i, j, n, m;
//создаем массив
   cout << "введи число уравнений: ";
         cin >> n;
         cout << "введи число неизвестных: ";
         cin >> m;
         m+=1;
    int **matrix = new int *[n];
         for (i=0; i<n; i++)
             matrix[i] = new int [m];
 
//инициализируем
   cout << "vvedi element" << endl;
    for (i = 0; i<n; i++)
        for (j = 0; j<m; j++)
            cin >> matrix[i][j];
 
//выводим массив
    cout << "matrix: " << endl;
      for (i=0; i<n; i++)
       {
          for (j=0; j<m; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
       }
    cout << endl;
 
//Метод Гаусса
 
    float tmp, xx[m];
    int k;
 
    for (i=0; i<n; i++)
     {
       tmp=matrix[i][i];
         for (j=n;j>=i;j--)
             matrix[i][j]/=tmp;
           for (j=i+1;j<n;j++)
          {
             tmp=matrix[j][i];
               for (k=n;k>=i;k--)
             matrix[j][k]-=tmp*matrix[i][k];
          }
      }
  /*обратный ход*/
    xx[n-1] = matrix[n-1][n];
     for (i=n-2; i>=0; i--)
       {
           xx[i] = matrix[i][n];
           for (j=i+1;j<n;j++) xx[i]-=matrix[i][j]*xx[j];
       }
 
       for (i=0; i<n; i++)
           cout << xx[i] << " ";
       cout << endl;
 
    delete[] matrix;
 
   return 0;
}
ответ выводится не верный.
где неправильно???

вот рабочий код:
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
#include<iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N    3
#define N1    N+1
using namespace std;
float matrix[N][N1]={{2,-1,3,2},
                                  {1,-2,1,3},
                                  {3,-1,3,4}};
 
float epsilon=0.001;
 
void ShowMatrix(void)
{
cout << "SLAU:" << endl;
  int i,j;
    for (i=0 ;i<N; i++)
      {
        for (j=0; j<N; j++)
          printf("%+3.3f*x%d",matrix[i][j],i+1);
        printf("=%3.3f\n",matrix[i][N]);
      }
}
 
int main()
{
  float tmp, xx[N1];
  short int i, j, k;
 
  ShowMatrix();
 
/*Метод Гаусса*/
/*прямой ход*/
  for (i=0; i<N; i++)
   {
     tmp=matrix[i][i];
       for (j=N;j>=i;j--)
           matrix[i][j]/=tmp;
         for (j=i+1;j<N;j++)
        {
           tmp=matrix[j][i];
             for (k=N;k>=i;k--)
           matrix[j][k]-=tmp*matrix[i][k];
        }
    }
/*обратный ход*/
  xx[N-1] = matrix[N-1][N];
   for (i=N-2; i>=0; i--)
     {
         xx[i] = matrix[i][N];
         for (j=i+1;j<N;j++) xx[i]-=matrix[i][j]*xx[j];
     }
/*вывод решения*/
printf("\nMetod Gaussa:\n");
  for (i=0; i<N; i++)
    printf("x%d=%3.3f\n", i+1, xx[i]);
 
 return 0;
}
но здесь со статическим массивом.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru