Ok, a więc tak:
Mając zestaw podręcznych "narzędzi" podanych w poniższym kodzie :-) Próbuję wszystko złożyć w sensowną całość.
// ------------- FUNKCJA OBLICZA ROZMIAR MACIERZY --------------
int jaki_rozmiar(FILE* plik)
{
int x,asd;
// Wczytanie pierwszego znaku z pliku, a otrzymać rozmiar macierzy
fscanf(plik,"%d",&asd);
return asd;
}
// ------------ FUNKCJA ALOKUJACA PAMIEC DLA MATRIX -----------
double** matrix_alloc(int rozmiar)
{
double** matrix;
int i = 0;
matrix = (double**)malloc(rozmiar*sizeof(double *));
for(i=1;i<rozmiar;i++)
{
matrix[i] = (double*)malloc(rozmiar*sizeof(double));
}
}
// -------------- FUNKCJA NISZCZACA PAMIEC DLA MATRIX ----------
void zwolnienie_pamieci(double** matrix, int rozmiar)
{
int i = 0;
for(i = 0;i<rozmiar;i++)
{
free(matrix[i]);
}
free(matrix);
}
// ----------------- ZAPELNIANIE TABLICY DYNAMICZNEJ DANYMI Z PLIKU ------
double** macierz_do_tablicy(FILE* plik,double** matrix, int rozmiar)
{
int iWiersz,iKolumna;
iWiersz = 0;
iKolumna = 0;
for(iWiersz=1;iWiersz<rozmiar;iWiersz++)
{
for(iKolumna=0;iKolumna<rozmiar;iKolumna++)
{
fscanf(plik, "%f", &matrix[iWiersz][iKolumna]);
printf("%f", matrix[iWiersz][iKolumna]);
}
}
return matrix;
}
// ------------------ FUNKCJA POKAZUJE MACIERZ -------------------
void pokaz_macierz(double** matrix, int rozmiar)
{
int iWiersz,iKolumna;
iWiersz = 0;
iKolumna = 0;
for(iWiersz=1;iWiersz<rozmiar;iWiersz++)
{
for(iKolumna=0;iKolumna<rozmiar;iKolumna++)
{
printf("%f", matrix[iWiersz][iKolumna]);
}
}
}
W ramach main() napisałem coś takiego:
int main()
{
int alokacja = 0;
FILE *plik;
// --------------------- OPERACJE NA PLIKU ---------------------------------
if ((plik = fopen("plik.txt", "r")) == NULL) // sprawdzam czy plik poprawnie się otworzył
{
printf("Nie moge otworzyć pliku. \n");
}
else
{
int rozmiar = jaki_rozmiar(plik);
printf("rozmiar macierzy: %d\n", rozmiar);
alokacja = matrix_alloc(rozmiar);
macierz_do_tablicy(plik, alokacja, rozmiar);
}
fclose(plik);
I przy wywoływaniu funkcji z parametrami
double** matrix
mam już kłopot. Ten parametr będzie tą dynamiczną tablicą, którą próbuję nieudolnie zaalokować? I jakoś logicznie nie mogę rozgryźć zwracanego typu - double**
(wskaźnik do wskaźnika), ale to już mniej ważne. :-) Początkujący, także wybaczcie :-(
**EDIT:**
Aha, i jeszcze coś...
Patrząc na strukture pliku w pierwszym poście. Wszelkie operacje na tablicy dwuwymiarowej rozpoczynam od pierwszego wiersza, skoro zerowy jest tylko i wyłącznie dla wczytania rozmiaru przyszłej tablicy. W funkcjach *matrix_alloc, macierz_do_tablicy, pokaz_macierz* w pętlach rozpocząłem od iWiersz = 1. Zagra to tak? Wyedytowałem to w kodzie jakby co.