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

    Esercizio in C: allocazione dinamica di vettori

    Si consideri un vettore a[ ] di n elementi allocato dinamicamente e con n inserito da
    tastiera, riempito di numeri casuali generati secondo la formula (rand()%1500)+1.
    Supporre che ogni coppia di elementi (a[i], a[i+1]) costituiscano le coordinate (x,y) di un
    punto all'interno di uno spazio bidimensionale. Eseguire le seguenti funzionalita':
    1. Scrivere una funzione che copia, in due vettori di interi x[ ] e y[ ] (allocati
    dinamicamente) gli elementi di a[ ] a coppie;
    2. Scrivere una funzione “distanza” che calcola la distanza tra due punti, note le loro
    coordinate (x0, y0) e (x1, y1);
    3. Creare il vettore di reali dist[ ] (allocato dinamicamente) in cui ogni elemento iesimo e' la distanza tra il punto iesimo e il punto (i+1)esimo, supposto pero' che
    tale distanza sia minore di un valore di soglia inserito da tastiera.


    Ragazzi, quello che ho scritto sopra è il testo di un esercizio che sto provando a svolgere(utilizzando il dev c++).
    Ho provato a svolgere i tre punti, ma qualcosa non va ( non so dove siano gli errori...) durante la fase di compilazione.
    VI riporto il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    void riempi_vettore (float *v, int size);
    void copia_funzione (float *a, float *x, float *y, int size);
    
    int main (void) {
        int n, dist_size,i;
        float *a, *x, *y, soglia, *dista;
        
        
        
        printf ("Inserisce da tastiera la dimensione del vettore \n");
        scanf("%d", &n);
        
        a=(float*)malloc(n*sizeof(float));
        riempi_vettore ( a, n);
        copia_funzione ( a, x, y, n);
        
        printf (" Inserire un valore di soglia \n");
        scanf ("%f", &soglia);
        
        dist_size = crea_vettore ( x, y,  n, dista,  soglia);
         for (i = 0; i < dist_size;i++)
            printf ("dista[%d] = %f\n", i, dista[i]);
        
        
        system("pause");
    }
    
    void riempi_vettore (float *v, int size){
         int i;
         
         for (i=0; i<size; i++) {
             v[i]=(rand()%1500)+1;
             printf (" stampa vettore v[%d]=%f \n", i, v[i]);
             }
         }
    
    void copia_funzione ( float *a, float *x, float *y, int size){
         int i,j;
         for (i=0, j=0;i<size;j++, i++) {
             x[j]=a[i];
             y[j]=a[i+1];
             printf ("  Gli elementi dei vettori sono x[%d]=%f, y[%d]=%f \n", j,x[j], j, y[j]);
             }
         
         }
    
    double distanza ( int x0, int y0, int x1, int y1){
           
           return (sqrt((x0-x*1)*(x0-x1)+(y0-y1)*(y0-y1)));
           }
    float crea_vettore ( float *x, float *y, int size, float *dist, float soglia) {
          int i, j;
          float distance;
          j=0;
          for (i=0; i<size; i++) {
              
              distance = distanza (x[i], y[i], x[i+1], y[i+1]);
              
              if (distance < soglia) {
                           dist[j]=distance;
                           j++;
                           }
                           return j;
          }
    }
    Il riempimento del vettor a[]con valori casuali ( attraverso la funzione riempi) va bene, tutto funziona.
    I problemi principali nascono ne momento in cui devo creare i due vettori x e y con i valori di a...
    Potreste spiegarmi come si deve procedere, qual è il ragionamento per poterli riempire?

    Vi ringrazio.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Nella funzione copia_funzione non allochi dinamicamente lo spazio per l'array e questo provoca il crash.All'interno del main dovresti prevedere una malloc di almeno n/2 elementi dato che,da quel che ho capito,gli elementi presenti nel primo vettore devono essere spartiti fra gli altri due vettori.

    P.s. Potresti usare dei nomi un pò più significativi

    P.p.s. Fossi in te inizierei col rivedermi la funzione copia_funzione che dal punto di vista logico non credo faccia quello che deve.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    37
    ok, lo farò. grazie marco :-)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.