Страница 1 из 1

Помогите с Методом Гаруса

Добавлено: 05 ноя 2009, 16:31
StrongBrick
Помогите с Методом Гаруса на языке Си а не С++ я в данный момент учусь и мне нужно сдать Гаусса! Нам преподаватели очень хорошо объясняют (из цикла запишите, а потом разберётесь) просто лекции, когда начались нам не сказали на чём писать программы которые довались вовремя лекций узнал только потом когда началась практика, но поезд уже ушел и сейчас пытаюсь изучить весь материал, изученный ранние (вообще язык с нуля просто-напросто пытаюсь понять). Хотя может быть проблема и во мне. Литературу у нас в городе по Си найти практически невозможно а литературу из инета я не могу долго читать на компе Проблемы со зрением, распечатал несколько текстов оказалась сложными, по крайней мере, для меня.

Выкладываю часть программы написанной на Си (с помощью сторонних людей).

Код: Выделить всё

#include <math.h>
#include <stdio.h>
#include <conio.h>
#define N 10
main()
{int n, i ,j ;

    float  mas[N][N], tmp; 
    //n=3;
    printf ("\n vedi razmer=");scanf ("%d",&n);
    printf ("\n razmer mat=%d", n);
    i=0; j=0;
    for (i=0;i<n;i++)
      for (j=0;j<n+1;j++)
       {  printf ("\n  In Mass[%d][%d]=",i,j);
          scanf ("%f",&mas [i][j]);
          printf ("\n razmer mat=%f", mas [i][j]);
       }
       
    for (i=0;i<n;i++)
    { printf ("\n");
      for (j=0;j<n+1;j++)
       { 
          printf ("  %f", mas [i][j]);
       }    
    }
    //normirovka 
    tmp = mas [0][0];
    for (j=0;j<n+1;j++)
    {mas [0][j] = mas [0][j]/ tmp;
   
     
     }
     
      for (i=0;i<n;i++)
    { printf ("\n");
      for (j=0;j<n+1;j++)
       { 
          printf ("  %f", mas [i][j]);
       }    
    }
    getch();
    }

Re: Помогите с Методом Гаруса

Добавлено: 09 ноя 2009, 09:35
atavin-ta
Проблема не в тебе, а в том, что ты смог найти. Этот код как раз и предназначен для того, чтобы окончательно запустать того, кто это будет читать.

Код: Выделить всё

#include <math.h>
#include <stdio.h>
#include <conio.h>
void Gaus (double **a, double *&x, int n)
{
 int i,j,k;
 double z;
 for (i=0; i<n-1; ++i)
 {
  for (j=i+1; j<n; ++j)
  {
    z=a[j][i]/a[i][i];
    for (k=i; k<=n; ++k)
   {
     a[j][k]-=a[i][k]*z;
   }
  }
 }
 x=new double [n];
 for (i=n-1; i>=0; --i)
 {
  for (k=i; k<n-1; ++k)
  {
   a[i][n]-=x[k]*a[i][k];
  }
  x[i]=a[i][n]/a[i][i]l;
 }
}
void main ()
{
 int i,j,n;
 double **a;
 double *x;
 cin>>n;
 a=new  *double [n];
 for (i=0; i<n; ++i)
 {
  a[i]=new double [n+1];
  for (j=0; j<n; ++j)
  {
   cin>>a[i][j];
  }
  cin>>a[i][n];
 }
 gous(a,x,n);
 for (i=0; i<n; ++i)
 {
  cout<<x[i];
 }
}
. И никаких гвоздёв.

Re: Помогите с Методом Гаруса

Добавлено: 09 ноя 2009, 10:42
airyashov
atavin-ta писал(а): #include <math.h>
#include <stdio.h>
#include <conio.h>
нет iostream.h
void Gaus (double **a, double *&x, int n)
{
int i,j,k;
double z;
for (i=0; i<n-1; ++i)
{
for (j=i+1; j<n; ++j)
{
z=a[j]/a;
for (k=i; k<=n; ++k)
{
a[j][k]-=a[k]*z;
}
}
}
x=new double [n];
for (i=n-1; i>=0; --i)
{
for (k=i; k<n-1; ++k)
{
a[n]-=x[k]*a[k];
}
x=a[n]/al;
}
}
void main ()
{
int i,j,n;
double **a;
double *x;
cin>>n;
a=new *double [n];
for (i=0; i<n; ++i)
{
a[i]=new double [n+1];
for (j=0; j<n; ++j)
{
cin>>a[i][j];
}
cin>>a[i][n];
}
gous(a,x,n);
for (i0; i<n; ++i)
{
cout<<x[i];
}
}

да тут не меньше гвоздей

Re: Помогите с Методом Гаруса

Добавлено: 09 ноя 2009, 10:52
atavin-ta
Забыл воткнуть эту голову. Иострим тоже нужен. Но я не прячу смысл операций за кучей преобразований из строчной формы в числовую и обратно, форматирующими символами и тому подобной фигнёй. А это и есть гвозди. Те что остались - не мои, а страуструпа - язык то его. Ну ещё очепятки есть. Щас уже исправил. Но прямо так не делай. Нужны ещё проверки действительности указателей. Кроме того, всё, что можно, надо переносить в методы классов.