aqualopetak Opublikowano 8 Marca 2005 Zgłoś Opublikowano 8 Marca 2005 (edytowane) 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ętleSiedze na tym programem 3 dni i trace już trzeźwy umysł. BARDZO PROSZE O POMOC!!! WSKAZÓWKE GDZIE TKWI BŁĄD!!!!!! POZDRO Edytowane 10 Marca 2005 przez aqualopetak Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 10 Marca 2005 Zgłoś Opublikowano 10 Marca 2005 (edytowane) wyedytuj posta i wstaw kod w tag [ p h p ] Edytowane 10 Marca 2005 przez ayem Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
piotrek_zet Opublikowano 13 Marca 2005 Zgłoś Opublikowano 13 Marca 2005 nie chce mi sie za bardzo przedzierac przez ten kod, powiedz mi jak probujesz odwrocic macierz, to znaczy jaką metodą ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
aqualopetak Opublikowano 13 Marca 2005 Zgłoś Opublikowano 13 Marca 2005 metodą Gaussa Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
piotrek_zet Opublikowano 13 Marca 2005 Zgłoś Opublikowano 13 Marca 2005 //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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...