prosze o sprawdzenie programu

guardianangel
Użytkownik
Użytkownik
Posty: 57
Rejestracja: 30 sie 2007, o 12:48
Płeć: Kobieta
Lokalizacja: Piekary Śląskie
Podziękował: 3 razy
Pomógł: 3 razy

prosze o sprawdzenie programu

Post autor: guardianangel »

#include
#include
main()
{
FILE *fp;
double a[200][200],b[200],s,e1,max;
int n,i,j,k,t;

fp=fopen("dane","r");

fscanf(fp,"%d",&n);
printf("n=%d
",n);

for(i=0;i
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

prosze o sprawdzenie programu

Post autor: soku11 »

Z tego co moge powiedziec, to ze dziala. Skompilowalo sie u mnie bez blednie. Jednak nie mam zielonego pojecia co ten program robi, wiec nic innego nie moge powiedziec. BTW. Warto formatowac kod i nalezy pamietac o sprawdzania poprawnosci itwarcia pliku, tj:

Kod: Zaznacz cały

#include<stdio.h>
#include<math.h>

int main()
{
  FILE *fp;
  double a[200][200],b[200],s,e1,max;
  int n,i,j,k,t;

  fp=fopen("dane","r");

  if(!fp)
  {
    printf("Brak pliku!");
    return 0;
  }

  fscanf(fp,"%d",&n);
  printf("n=%d
",n);

  for(i=0;i<n;i++)
  {
    for(j=0;j<n;j++)
    {
      fscanf(fp,"%lf",&a[i][j]);
      printf("%5.1f ",a[i][j]);
    }
    fscanf(fp,"%lf",&b[i]);
    printf("%5.1f
",b[i]);
  }

  for(k=0;k<n-1;k++)
  {
    max=fabs(a[k][k]);
    t=k;
    for(i=k+1;i<n;i++)
    if((e1=fabs(a[i][k]))>max)
    {
      max=e1;
      t=i;
    }
    if(max<1e-35)
    {
      printf("Dzielenie przez zero krok %d
",k);
      return 0;
    }
    for(j=k;j<n;j++)
    {
      s=a[k][j];
      a[k][j]=a[t][j];
      a[t][j]=s;
    }
    s=b[k];
    b[k]=b[t];
    b[t]=s;
    for(j=k+1;j<n;j++)
    a[k][j]=a[k][j]/a[k][k];

    b[k]=b[k]/a[k][k];

    for(i=k+1;i<n;i++)
    {
      for(j=k+1;j<n;j++)
        a[i][j]=a[i][j]-a[i][k]*a[k][j];
      b[i]=b[i]-a[i][k]*b[k];
    }
  }

  b[n-1]=b[n-1]/a[n-1][n-1];

  for(i=n-2;i>=0;i--)
  {
    s=0.0;
    for(j=i+1;j<n;j++)
    s+=a[i][j]*b[j];
    b[i]-=s;
  }

  for(i=0;i<n;i++)
    printf("x[%d]=%5.1f
",i,b[i]);

  return 0;
}

POZDRO
ODPOWIEDZ