Praticamente sto svolgendo molti esercizi per farmi entrare in testa la funzione filter_vector.
Quando il testo dell'esercizio chiedere di creare nuovi vettori, sotto particolari condizioni, partendo dai vettori iniziali, e di allocarli dinamicamente, ho difficoltà a crearli in quanto per allocarli dinamicamente mi occorre sapere la dimensione di questi nuovi vettori. Quindi mi occorrerebbe determinare la dimensione dei nuovi vettori per poterli allocare dinamicamente. Ma non riesco a scrivere una funzione che mi calcoli e restituisca il valore della dimensione di questi vettori sotto delle condizioni ( per esempio se in_vector[i]> soglia allora posso contare un elemento nel nuovo vettore...).
Il programma sembra partire correttamente modificando il ciclo for:
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);
                                                }