codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
void riempi_vettori (double *v, int size);
void stampa_vettori (double *v, int size);
void posizione ( double *v1, int size, double *xx, double T);
int filter_vector_size (double *xx, int size);
double filter_vector (double *xx, int k, double *fxx);
int main (void) {
int i, n, dimx, dimy,j;
double *vx, *vy, T =0.01, *x, *y, *fx, *fy;
printf ("Inserisci da tastiera la dimensione dei vettori \n");
scanf ("%d", &n);
/* Alloco dinamicamente i vettori */
vx= (double*)malloc(n*sizeof(double));
vy= (double*)malloc(n*sizeof(double));
/* Riempio i vettori */
riempi_vettori (vx,n);
stampa_vettori (vx,n);
riempi_vettori (vy, n);
stampa_vettori (vy, n);
/* Alloco dinamicamente i vettori x e y */
x = (double*)malloc(n*sizeof(double));
y = (double*)malloc(n*sizeof(double));
/* Riempio i vettori con l'integrazione approssimata */
posizione (vx,n,x,T);
posizione (vy,n,y,T);
for (i=0;i<n;i++){
printf ("il valore di x e' x[%d]=%f\n",i,x[i]);
printf ("il valore di y e' y[%d]=%f\n",i,y[i]);
}
dimx = filter_vector_size(x,n);
dimy = filter_vector_size(y,n);
fx=(double*)malloc(dimx*sizeof(double));
fy=(double*)malloc(dimy*sizeof(double));
filter_vector (x,dimx,fx);
filter_vector (y,dimy,fy);
for (i=0;i<dimx;i++){
printf ("la funzione fx e' fx[%d]=%f\n",i,fx[i]);
}
for (j=0;j<dimx;j++){
printf ("la funzione fy e' fy[%d]=%f\n",j,fy[j]);
}
system("pause");
}
void riempi_vettori (double *v, int size) {
int i;
srand(time(NULL));
for(i=0; i<size; i++) {
v[i]=(rand()%1500+1)/1500.0;
}
}
void stampa_vettori (double *v, int size) {
int i;
for(i=0; i<size; i++){
printf (" Stampo vettore v[%d]=%lf \n", i, v[i]);
}
}
void posizione ( double *v1, int size, double *xx, double T ) {
int i;
xx[0]=v1[0]*T;
for (i=1; i<size-1; i++) {
xx[i]=xx[i-1]+v1[i-1]*T;
}
}
int filter_vector_size (double *xx, int size) {
int i, k;
k=0;
for(i=0; i<size; i++) {
if (sqrt((xx[i+1]-xx[i])*(xx[i+1]-xx[i]))>0.001){
k++;
}
}
return k;
}
double filter_vector (double *xx, int k, double *fxx) {
int i;
for (i=0;i<k;i++){
if (sqrt((xx[i+1]-xx[i])*(xx[i+1]-xx[i]))>0.001){
fxx[i]= sqrt((xx[i+1]-xx[i])*(xx[i+1]-xx[i]));
}
}
}
Non vengono segnalati errori di compilazione e al momento dell'esecuzione vengono stampati soltanto i vettori velocità.