Ĺadny brzuch
Mam ponizsza funkcje ktora oblicza mi srodki ciezkosci elementow:
srodek_ciezkosci oblicz_srodki_ciezkosci (siatka_t siatka, srodek_ciezkosci srodek) { /* nsd - liczba wymiarow (w testowanych siatkach 2: x, y) np - liczba wezlow (nie wykorzystuje do rysowania) ne - liczba elementow nne - liczba wezlow w jednym elemencie */ int d; /* licznik wymiarow */ int n; /* licznik wezlow w obrebie elementu */ int e; /* licznik elementow */ /* zaalokowanie pamieci dla tablicy przechowujacej wspolrzedne wezlow pojedynczego elementu */ double punkty[][] = malloc((grid->nsd)*(grid->nne)*sizeof(double)); /* zaalokowanie pamieci dla struktury przechowujacej wspolrzedne srodkow ciezkosci wszystkich elementow */ for (d = 0; d< grid->nsd; d++) { srodek->x = malloc(3*(grid->ne)*sizeof(double)); } for (e = 0; e < grid->ne; e++) { /* e - element, ne - liczba elementow */ for (d = 0; d < grid->nsd; d++) { /* d - wymiar, nsd - liczba wymiarow */ double tmp = 0; /* do obl sumy wsp. wezlow */ for (n = 0; n < grid->nne; n++) { /* n - wezel, nne - liczba wezlow w elemencie */ tmp += punkty[n][d]; /* albo [d][n] */ } *(srodek->x + (grid->ne) * e + d) = tmp / 3; } } return srodek; }
W ponizszej linijce wpisuje sobie wynik do struktury srodek:
*(srodek->x + (grid->ne) * e + d) = tmp / 3;
I teraz moj problem:
Przy probie odczytu ze struktury w innej funkcji mam blad: invalid type argument of `->'
Wartosci ze struktury srodek odczytuje w nastepujacej funkcji:
int rysuj_srodki_ciezkosci (siatka_t siatka, srodek_ciezkosci srodki) { /* nsd - liczba wymiarow ne - liczba elementow */ int d; /* licznik wymiarow */ int e; /* licznik elementow */ /* wskaznik do pliku z danymi dla programu gnuplot */ FILE *fp2; /* utworzenie pliku 'lamana.dat' z danymi dla programu gnuplot */ if ((fp2 = fopen ("lamana.dat", "w")) == NULL) { messg ("Nie mozna otworzyc pliku 'lamana.dat'\n"); return 1; } /* zapisanie do pliku danych dla gnuplota wspolrzednych srodkow ciezkosci */ for (e = 0; e < siatka->ne; e++) { for (d = 0; d < siatka->nsd; d++) { fprintf (fp2, "%f ", srodki->x + 2 * e + d); } } fclose (fp2); return 0; }
I w linii:
fprintf (fp2, "%f ", srodki->x + 2 * e + d);
mam wspomniany błąd: invalid type argument of `->'
(wpisalem 2 zamiast grid->ne zeby uproscic zdiagnozowanie bledu).
Jeszcze zawartosc pliku naglowkowego (moze tu jest blad ?):
typedef struct { double *x; } srodek_ciezkosci; srodek_ciezkosci oblicz_srodki_ciezkosci(siatka_t siatka, srodek_ciezkosci srodek);
Prosze o pomoc kogos kto zna sie na wskaznikach w C lepiej niz ja. Probowalem juz na kilka sposobow i nie wiem co powoduje blad.
srodek nie jest wskaznikiem wiec powinno byc raczej: srodek.x
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
srodek_ciezkosci oblicz_srodki_ciezkosci (siatka_t siatka, srodek_ciezkosci srodek) { /* nsd - liczba wymiarow (w testowanych siatkach 2: x, y) np - liczba wezlow (nie wykorzystuje do rysowania) ne - liczba elementow nne - liczba wezlow w jednym elemencie */ int d; /* licznik wymiarow */ int n; /* licznik wezlow w obrebie elementu */ int e; /* licznik elementow */ /* zaalokowanie pamieci dla tablicy przechowujacej wspolrzedne wezlow pojedynczego elementu */ double punkty[][] = malloc((grid->nsd)*(grid->nne)*sizeof(double)); /* zaalokowanie pamieci dla struktury przechowujacej wspolrzedne srodkow ciezkosci wszystkich elementow */ for (d = 0; d< grid->nsd; d++) { srodek->x = malloc(3*(grid->ne)*sizeof(double)); } for (e = 0; e < grid->ne; e++) { /* e - element, ne - liczba elementow */ for (d = 0; d < grid->nsd; d++) { /* d - wymiar, nsd - liczba wymiarow */ double tmp = 0; /* do obl sumy wsp. wezlow */ for (n = 0; n < grid->nne; n++) { /* n - wezel, nne - liczba wezlow w elemencie */ tmp += punkty[n][d]; /* albo [d][n] */ } *(srodek->x + (grid->ne) * e + d) = tmp / 3; } } return srodek; }
W ponizszej linijce wpisuje sobie wynik do struktury srodek:
*(srodek->x + (grid->ne) * e + d) = tmp / 3;
I teraz moj problem:
Przy probie odczytu ze struktury w innej funkcji mam blad: invalid type argument of `->'
Wartosci ze struktury srodek odczytuje w nastepujacej funkcji:
int rysuj_srodki_ciezkosci (siatka_t siatka, srodek_ciezkosci srodki) { /* nsd - liczba wymiarow ne - liczba elementow */ int d; /* licznik wymiarow */ int e; /* licznik elementow */ /* wskaznik do pliku z danymi dla programu gnuplot */ FILE *fp2; /* utworzenie pliku 'lamana.dat' z danymi dla programu gnuplot */ if ((fp2 = fopen ("lamana.dat", "w")) == NULL) { messg ("Nie mozna otworzyc pliku 'lamana.dat'\n"); return 1; } /* zapisanie do pliku danych dla gnuplota wspolrzednych srodkow ciezkosci */ for (e = 0; e < siatka->ne; e++) { for (d = 0; d < siatka->nsd; d++) { fprintf (fp2, "%f ", srodki->x + 2 * e + d); } } fclose (fp2); return 0; }
I w linii:
fprintf (fp2, "%f ", srodki->x + 2 * e + d);
mam wspomniany błąd: invalid type argument of `->'
(wpisalem 2 zamiast grid->ne zeby uproscic zdiagnozowanie bledu).
Jeszcze zawartosc pliku naglowkowego (moze tu jest blad ?):
typedef struct { double *x; } srodek_ciezkosci; srodek_ciezkosci oblicz_srodki_ciezkosci(siatka_t siatka, srodek_ciezkosci srodek);
Prosze o pomoc kogos kto zna sie na wskaznikach w C lepiej niz ja. Probowalem juz na kilka sposobow i nie wiem co powoduje blad.
srodek nie jest wskaznikiem wiec powinno byc raczej: srodek.x