Skocz do zawartości
aqualopetak

Błąd W Programie! Nie Wiem Co Jest!

Rekomendowane odpowiedzi

WITAM WSZYSTKICH.

Próbowałem napisać program w C który liczy macierz odwrotną macierzy kwadratowej. Nie wiem co jest dlaczego obliczenia są błędne. Prosze o pomoc. Oto mój program

 

#include<stdio.h>#include<conio.h>main(){ int i,j,k,n,m; float a[10][20],r; printf("Podaj rozmiar macierzy:\n"); scanf("%d",&n); printf("podaj elementy macierzy;\n"); for(i=0;i<n;i++)  for(j=0;j<n;j++)   {    printf("a[%d][%d]=",i,j);    scanf("%f",&r);    a[i][j]=r;    printf("\n");   } clrscr(); printf("\npodana macierz ma postac:\n"); for(i=0;i<n;i++)  {   for(j=0;j<n;j++)    printf("%.1f    ",a[i][j]);   printf("\n");  } //tworzenie macierzy odwrotnej for(i=0;i<n;i++)  for(j=0;j<n;j++)   if(i==j) a[i][j+n]=1;   else a[i][j+n]=0; for(i=0;i<n;i++)  if(a[i][i]==0) //dzielnik   {    k=i+1;    if(a[k][i]!=0)     for(j=i;j<n;j++)      {       r=a[i][j];       a[i][j]=a[k][i];       a[k][j]=r;      }    else     if(k<n-1)k++;     else {    printf("Macierz osobliwa");    getch();    return 0;   }    //dzielenie i-tego wiersza przez aii roznego od zera    for(j=i;j<n;j++)     a[i][j]=a[i][j]/a[i][i];    //odejmowanie od k-tego wiersza wiersza i-tego*a[k][i]    //k=0,1,2,...,i-1,i,...,n-1    for(k=0;k<n;k++)     {      if(k!=i)       for(j=i;j<m;j++)	a[k][j]=a[k][j]-a[i][j]*a[k][i];     }   } //drukowanie macierzy odwrotnej for(i=0;i<n;i++)  {   for(j=n;j<(n*n);j++)    printf("%.1f",a[i][j]);   printf("\n");  } getch(); return 0;}
podejżewam że błąd programu jest w tym momencie

 

for(i=0;i<n;i++)  if(a[i][i]==0) //dzielnik   {    k=i+1;    if(a[k][i]!=0)     for(j=i;j<n;j++)      {       r=a[i][j];       a[i][j]=a[k][i];       a[k][j]=r;      }    else     if(k<n-1)k++;     else {    printf("Macierz osobliwa");    getch();    return 0;   }    //dzielenie i-tego wiersza przez aii roznego od zera    for(j=i;j<n;j++)     a[i][j]=a[i][j]/a[i][i];    //odejmowanie od k-tego wiersza wiersza i-tego*a[k][i]    //k=0,1,2,...,i-1,i,...,n-1    for(k=0;k<n;k++)     {      if(k!=i)       for(j=i;j<m;j++)	a[k][j]=a[k][j]-a[i][j]*a[k][i];     }   }ponieważ program nie wchodzi w tą pętle
Siedze na tym programem 3 dni i trace już trzeźwy umysł.

 

BARDZO PROSZE O POMOC!!! WSKAZÓWKE GDZIE TKWI BŁĄD!!!!!!

 

POZDRO

Edytowane przez aqualopetak

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

//tworzenie macierzy odwrotnej for(i=0;i<n;i++)  for(j=0;j<n;j++)   if(i==j) a[i][j+n]=1;   else a[i][j+n]=0; for(i=0;i<n;i++)  if(a[i][i]==0) //dzielnik   {    k=i+1;    if(a[k][i]!=0)     for(j=i;j<n;j++)      {       r=a[i][j];       a[i][j]=a[k][i];       a[k][j]=r;      }    else     if(k<n-1)k++;     else {    printf("Macierz osobliwa");    getch();    return 0;   }

1317653[/snapback]

przede wszystkim pierwsza sprawa, samym gausem nic nie zrobisz, chyba ze to jest tylko fragment twojego programu, z tego co ja pamietam, to musisz rozwiazac n ukladow rownan z n niewiadomymi z prawymi stronami bedacymi kolejnymi kolumnami macierzy jednostkowej, wiec gauss jest tylko czescia tego programu.

Poza tym to mam drobne zastrzezenie do tego dzielnika jesli na pozycji a jest zero i na pozycji a[i+1] tez jest zero to co sie dzieje w twoim programie ?? bo wydaje mi sie ze nie to co powinno, w przypadku uczywiscie jesli i+1 < n

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...