Jednak nie wiem czemu nie mogę "ręcznie" odnieść się do poszczególnych elementów tablicy.
Problem znajduje się w funkcji det.
Nie ma żadnego problemu jeśli za pomocą dwóch forów wyświetlam tablicę, ale już kiedy chcę wyświetlić poszczególne elementy to zaczyna się sypać.
Kod:
#include <stdio.h>
#include <stdlib.h>
double det(int n, double matrix[n][n]);
int main()
{
int n, i=0, j=0;
double test;
FILE *fp;
//Open file
fp=fopen("omatrix.txt", "r");
if(!fp){printf("Nie udalo sie wczytac pliku\n"); exit(404);}
//Check matrix size
fscanf(fp, "%d", &n);
printf("%d\n", n);
//Prepare 2d array and pointer
double mat[n][n];
double (*fmat)[n];
fmat=&mat;
//Fill 2d array
for (i; i<n; i++){
for (j; j<n; j++){
fscanf(fp, "%d", &mat[i][j]);
}
j=0;
}
i=j=0;
//Calculate matrix determinant
test=det(n, fmat);
printf("%f", test);
//Zamkniecie pliku
fclose(fp);
return 0;
}
double det(int n, double matrix[n][n])
{
double sum=0.0;
int i=0, j=0;
for (i; i<n; i++){
for (j; j<n; j++){
printf("%d,%d=", i, j);
printf("%d ", matrix[i][j]);
}
printf("\n");
j=0;
}
if(n==2){
printf("m[0][0]=%d m[0][1]=%d m[1][0]=%d m[1][1]=%d\n", matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1]);
sum = matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0];
return sum;
}
};
Kod:
2 //liczba kolumn/wierszy
0,0=1 0,1=2
1,0=3 1,1=4
m[0][0]=1 m[0][1]=1998121361 m[1][0]=2 m[1][1]=1998163157
0.000000
Kod:
#include <stdio.h>
#include <stdlib.h>
fun(int y[2][2]);
int main()
{
int x[2][2];
int (*xp)[2];
xp=&x;
x[0][0]=1;
x[0][1]=2;
x[1][0]=3;
x[1][1]=4;
printf("%d %d %d %d\n", x[0][0], x[0][1], x[1][0], x[1][1]);
printf("%d %d %d %d\n", xp[0][0], xp[0][1], xp[1][0], xp[1][1]);
fun(xp);
return 0;
}
fun(int y[2][2]){
printf("%d %d %d %d\n", y[0][0], y[0][1], y[1][0], y[1][1]);
}
1 2 3 4
1 2 3 4
1 2 3 4
//Edit przed napisaniem posta
Jeszcze zanim skończyłem pisać posta zauważyłem, że jeżeli rozbiję linijkę:
Kod:
printf("m[0][0]=%d m[0][1]=%d m[1][0]=%d m[1][1]=%d\n", matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1]);
Kod:
printf("m[0][0]=%d\n", matrix[0][0]);
printf("m[0][1]=%d\n", matrix[0][1]);
printf("m[1][0]=%d\n", matrix[1][0]);
printf("m[1][1]=%d\n", matrix[1][1]);
Ale nadal mam problem z obliczeniem wyznacznika.
Zamieniłem początek na:
Kod:
sum = matrix[0][0];
printf("1sum = %d\n", sum);
printf("matrix[1][1] = %d\n", matrix[1][1]);
sum *= matrix[1][1];
printf("2sum = %d\n", sum);
Po tym co zaobserwowałem zastanawiam się czy to może problem środowiska skoro długie linijki mu przeszkadzają.
Z samym wyświetleniem czterech elementów w jednym printf'ie nie było problemu gdy nazwa tablicy była po prostu "y", dopiero gdy nazwa była dłuższa (matrix), to zaczęło się sypać.
No ale i tak muszę jakoś to naprawić, o ile nie sprawdzałem jeszcze co by było gdybym zamienił nazwę tablicy z "matrix" na np. "m", to pytanie co jeśli taka nazwa i tak by z jakiegoś powodu była za długa (bo na przykład musiałbym jakiejś funkcji użyć z dłuższą nazwą).
Jak coś to używam Code::Blocks na 64-bitowym Windows 7
Przepraszam, jeśli błąd jest oczywisty, choroba przeszkadza mi myśleć.
Zakładki