Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    37

    Vettore filtro e dimensione

    Buona sera. Sto svolgendo il seguente esercizio

    Si considerino due array vx[ ] e vy[ ] di n elementi di tipo double, allocati dinamicamente e con n inserito da tastiera, riempito di numeri casuali generati secondo la formula:
    (rand()%1500 + 1)/1500.0
    Si supponga che tali array siano relativi alle componenti di velocita'; supporre che i valori siano campionati ogni ogni 10 millisecondi (T=10^-2).
    1. Scrivere una funzione che restituisce i valori delle posizioni nei vettori x[ ] e y[ ], calcolate utilizzando l'integrazione approssimata.
    2. Scrivere una funzione che “filtra” i vettori x[] e y[], copiando, in due nuovi vettori fx[] e fy[],
    solo gli elementi che soddisfano la seguente condizione:
    dist ( (x[i],y[i]) , (x[i+1], y[i+1]) ) > 0.001


    Ho scritto il seguente codice:




    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à.
    Ho provato a rivederlo ma a me sembra essere "corretto". Eppure qualcosa non va

    Volevo inoltre chiedervi se potreste dirmi come fare a "compattare" in un'unica funzione la funzione filter_vector_size e la funzione filter_vector ( che in questo codice ho scritto per comodità separatamente, ma il prof richiede sia fatto tutto in un'unica funzione).

    V i ringrazio!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Compila ?

    Veramente manca l'include di

    math.h

    per la sqrt e il valore restituito dalla funzione

    double filter_vector

    (dato che è una funzione double, quale valore restituisce? Non c'è return ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    37
    grazie mille, oregon! Ora si che va

    per quanto riguarda la funzione filtro e la sua dimensione, come faccio a compattare il tutto in un'unica funzione?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.