ďťż

Ł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
  •