codice:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
void riempi_vettore (double *v, int size);
void stampa_vettore (double *a, int size);
int dimensione_vel (double *ax, double *ay, double *az, int size, double T);
void calcola_vel (double *ax, double *ay, double *az, int size, double *vx, double *vy, double *vz, double T);
int conteggio ( double *vx , double *vy, double *vz, int size, double s);
int main(void) {
double *acc_x, *acc_y, *acc_z, T;
double *vel_x, *vel_y, *vel_z, s;
int n, dim, cont;
T = 0.01;
printf ("Inserisci n da tastiera \n");
scanf ("%d",&n);
/* Alloco dinamicamente i vettori */
acc_x=(double*)malloc(n*sizeof(double));
acc_y=(double*)malloc(n*sizeof(double));
acc_z=(double*)malloc(n*sizeof(double));
/* Riempi vettori */
riempi_vettore (acc_x, n);
stampa_vettore (acc_x, n);
riempi_vettore (acc_y, n);
stampa_vettore (acc_y, n);
riempi_vettore (acc_z, n);
stampa_vettore (acc_z, n);
/* Calcolo dimensione dei vettori velocità */
dim = dimensione_vel ( acc_x, acc_y, acc_z, n, T);
/* Alloco dinamicamente i vettori */
vel_x = (double*)malloc(dim*sizeof(double));
vel_y = (double*)malloc(dim*sizeof(double));
vel_z = (double*)malloc(dim*sizeof(double));
/* Calcolo velocità */
calcola_vel ( acc_x, acc_y, acc_z, n, vel_x, vel_y, vel_z, T);
printf("Inserisci un valore s di soglia\n");
scanf("%lf" , &s);
cont=conteggio(vel_x, vel_y, vel_z, dim, s);
printf("La velocita' supera il valore di soglia %d volte\n" , cont);
system("pause");
}
void riempi_vettore (double *v, int size) {
int i;
srand(time(NULL));
for(i=0;i<size;i++) {
v[i]=(rand()/(float)RAND_MAX)*2.0-1.0;
}
}
void stampa_vettore (double *a, int size) {
int i;
for(i=0; i<size; i++) {
printf ("a[%d]=%lf \n", i, a[i]);
}
}
int dimensione_vel (double *ax, double *ay, double *az, int size, double T) {
int i, j;
j=0;
for (i=0; i<size; i++) {
if((fabs(ax[i])>T )||fabs(ay[i]>T)||fabs(az[i]>T)){
j++; }
}
return j;
}
void calcola_vel (double *ax, double *ay, double *az, int size, double *vx, double *vy, double *vz, double T) {
int i, j;
for(i=1; i<size; i++){
if((fabs(ax[i])>T )||fabs(ay[i]>T)||fabs(az[i]>T)){
vx[i]=vx[i-1]+ax[i-1]*T;
vy[i]=vy[i-1]+ay[i-1]*T;
vz[i]=vz[i-1]+az[i-1]*T;
}
printf("vel_x[%d]=%lf\n" , i, vx[i]);
printf("vel_y[%d]=%lf\n" , i, vy[i]);
printf("vel_z[%d]=%lf\n" , i, vz[i]);
}
}
int conteggio ( double *vx , double *vy, double *vz, int size, double s){
int i, cont;
cont=0;
for(i=0; i<size; i++){
if((vx[i]*vx[i]+vy[i]*vy[i]+vz[i]*vz[i])>=s*s){
cont++;
}
}
return (cont);
}