Newsgroup: it.comp.lang.c
Titolo: Funzioni sin e cos non definite??!!

Salve a tutti, è la prima volta che scrivo qua e vi ringrazio sin d'ora per
l'attnzione che mi dedicherete...
Ho scritto un picco programma che esegue il Chaos Game...
Premetto che ho provato a compilare sotto RedHat 8.0A
Volendo generare un punto casuale nel cerchio unitario e per definire i
vertici di un poigono regolare ho bisogno delle funzioni seno e coseno.
sul mio manuale cartaceo di C ("C++ - Seconda Edizione" - Ed. McGraw Hill -
H. Schildt) c'è scritto che queste funzioni sono disponibili includendo la
libreria "math.h", in un primo tempo ho seguito questo consiglio, ma il
compilatore mi diceva che le funzioni sin e cos non erano definite... allora
sono andato a vedere in /usr/include e ho visto che esisteva anche
"tgmath.h", ho dato un'occhiata e ho visto che in esso venivano devinite
tutte le funzioni trigonometriche piu' molte altre...
allora ho incluso la libreria ma il risultato non è cambiato di una
virgola...
Vi allego il codice... ditmi se ho commesso qualche errore grossolano...
Grazie
INIZIO_CODICE_CHAOS_GAME.C
#include <stdlib.h>
#include <stdio.h>
// Questa Inclusione è ridondante
#include <math.h>
#include <tgmath.h>
#include <time.h>
#define N_V 4 // Numero di Vertici
#define DIM 2 // Numero di Dimensioni dello Spazio
#define T_MAX 10000 // Numero di iterazioni
double V[N_V][DIM];
double C[T_MAX][DIM];
double P[DIM];
double theta, r;
double A,B;
int i,j,t;
int main(void){
  srand(time(NULL));
  /* Dichiara i Vertici */
  for (i=0;i < N_V;i++){
    V[i][0] = cos(2*M_PI*i/N_V); /* Qua compare cos() */
    V[i][1] = sin(2*M_PI*i/N_V); /* Qua compare sin() */
      }
  /* Questi sono i Vertici di un triangolo equilatero */
  //  V[0][0]=0.0;
  //  V[0][1]=1.0;
  //  V[1][0]=0.8660254038;
  //  V[1][1]=-0.5;
  //  V[2][0]=-0.8660254038;
  //  V[2][1]=-0.5;
  /* Genera un punto casuale nel Cerchio Unitario*/
  theta = (double)(2*M_PI)*rand()/(RAND_MAX+1.0);
  r = (double)rand()/(RAND_MAX+1.0);
  P[0]=r * cos(theta); /* Qua compare cos() */
  P[1]=r * sin(theta); /* Qua compare sin() */
  /* Esegue T_MAX cicli del Gioco
     ruotando il vertice in maniera casuale */
  for(t=0; t<T_MAX; t++){
    i=(int)((3.0)*((double)rand())/(RAND_MAX));
    for(j=0; j<DIM; j++){
      C[t][j]=(P[j]+V[i][j])/2.0;
      printf("%f ", P[j]);
      P[j]=C[t][j];
    }
    printf("\n");
  }
}
FINE_CODICE

lascia perdere tgmath....
#include<math.h> basta e avanza...
piuttosto ti sei ricordato di linkare la
libria matematica ?
cioe' di usare lo switch -lm quando invochi il
compilatore ?
Se il tuo programma si chiama
pippo.c
allora se usi funzioni matematiche (in generale,
se includi math.h)
devi compilare come minimo con
gcc pippo.c -lm -o pippo
-lm dice al linker di linkare la libreria matematica
dove sono effettivamente definite le funzioni
matematiche. In math.h ci sono solo gli header
delle funzioni, non il codice per eseguirle.
ciao,
e.

 gcc pippo.c -lm -o pippo
non basta:
gcc pippo.c -lm
?
mi va bene anche un eseguible "a.out"
grazie er aver erudito la mia sbadataggine!

 gcc pippo.c -lm
si certo. Ma non ho mai prodotto un a.out
in piu' di 10 anni di programmazione. Mi ripugnano.
E poi in ogni caso ho sempre anche
qualche altro switch di ottimizzazione,
tipo
-O6 -fomit-frame-pointer
etc.etc.
ciao,
e.


Tante Grazie adesso va tutto... nel codice che ho mandato c'è un'altro bug
comunque...
nel ciclo:
  for(t=0; t<T_MAX; t++){
    i=(int)((3.0)*((double)rand())/(RAND_MAX));
    for(j=0; j<DIM; j++){
      C[t][j]=(P[j]+V[i][j])/2.0;
      printf("%f ", P[j]);
      P[j]=C[t][j];
    }
bisogna sostituire a 3.0, N_V.
inoltre se a 2.0 (nella divisione) sostituite un numero piu' grande viene
piu' carino (provate con 6.0)
Se vi fa piacere compilatelo e reindirizzate lo stdoutput (fategli calcolare
almeno 10000 punti) su un file, e visulizzatelo con gnuplot (plot "dati"
with dots)... vedrete dei semplici frattali.
(consiglio 6 vertici)
Saluti e Grazie ancora!

 -O6 -fomit-frame-pointer
IIRC -O6 con gcc ormai non ha piu` senso, e` mantenuto solo per
retrocompatibilita` o simili...
-- 
RiK0
Non credo negli schemi non vincenti.