Struct array e funcion

di il
4 risposte

Struct array e funcion

/*Sviluppare una function C che,
dato come parametro di input un
array di tipo struct punto {double x; double y; }e il suo size,
determina e restituisce come parametri di output
gli indici dei due punti che hanno distanza minima tra loro.
I campi x e y contengono l’ascissa e l’ordinata, rispettivamente, di un punto.*/

/*Sviluppare una function C che,
dato come parametro di input un
array di tipo struct punto {double x; double y; }e il suo size,
determina e restituisce come parametri di output
gli indici dei due punti che hanno distanza minima tra loro.
I campi x e y contengono l’ascissa e l’ordinata, rispettivamente, di un punto.*/
#include <stdio.h>
#include <math.h>
#define DIM 100
typedef struct
{
 double x;
 double y;
}Punto;

int distanzaF( Punto, Punto);

  main(){
 int i,A,dim;
Punto p1,p2;
Punto vettore[DIM];

/* QUANTI NUMERI VUOI USARE DI DIM*/
printf("\ninserire la dimensione dell'array: ");
scanf("%d",&dim);
 
 /* inseriamo i numeri*/
for (i=0;i<dim;i++){
 printf("inserire la 1 coppia: ");
 scanf("%d",&vettore[i].x);
 scanf("%d",&vettore[i].y);
 printf("inserire la seconda coppia: ");
 scanf("%d",&p2.x);
 scanf("%d",&p2.y);}
 
 /*  VEDIAMO COSA HAI SALVATO */
 printf("\np1.x=%d \np1.y=%d\np2.x=%d\np2.y=%d",p1.x,p1.y,p2.x,p2.y);
 /* RICHIAMO LA FUNCTION E ME LA STAMPO*/
a=distanzaF(p1,p2);
printf("la distanza=%d", a);
  }
  /* MI SCRIVO LA FUNZIONE DELLA FUNCTION*/
   int distanzaF( Punto p1,Punto p2)
   {

   return sqrt(pow((p2.x-p1.x),2) + pow((p2.y-p1.y),2));
   }

   
perchè non riesco a memorizzare nel vettore x1= il valore desiderato?
mi assegna numeri grande ed esagerati di consegenza non funge

4 Risposte

  • Re: Struct array e funcion

    Considera di riformulare ciò che hai scritto, perché, ahimè, non è chiarissimo (a partire dal fatto che non ci sono vettori x o x1 nel tuo codice).
    In ogni caso l'errore più evidente è %d dentro printf. %d seve per gli interi, ma tu qui hai dei double quindi devi usare %f (se sai l'inglese questa pagina ti sarà utile).
  • Re: Struct array e funcion

    #include <math.h>
    #include <stdio.h>
    typedef struct
    {
    double x;
    double y;
    }Punto;
    double  distanzaF(Punto p1, Punto p2);
    main()
    {
        double x,y;
         int i,n,j,a;
         int dist;
         int minDist;
    Punto p1, p2;
    Punto vettore[4];
    printf("\ninserire la dimensione dell'array: ");
    scanf("%d",&n);
    printf("\ninserire le cordinate: ");
    
    for (i=0;i<n;i++)
        {
        printf("Cordinata punto %d x y:", i + 1);
        scanf("%lf %lf",&vettore[i].x, &vettore[i].y);
        printf("\n");
        }
    minDist = 0;
    for(i = 0; i < n; i++)     
        {
        for(j = i + 1; j < n; j++)   
         {
            dist =distanzaF(vettore[i], vettore[j]);
            if(minDist == 0) minDist = dist;
            else if(dist < minDist)       
             {
                    minDist = dist;
                    p1 = vettore[i];
                    p2 = vettore[j];
           }
         }
       }
    printf("Punto 1: x=%lf y=%lf -- Punto 2: x=%lf y=%lf: \n", p1.x, p1.y, p2.x, p2.y);
    printf("la distanza minima è:%d",dist);
    }
    
    
    double  distanzaF(Punto p1, Punto p2)
    {
        return sqrt((pow(p2.x - p1.x,2) + pow(p2.y - p1.y,2)));
    
    }
    
  • Re: Struct array e funcion

    Per come leggo la traccia, la consegna dell'esercizio mi sembra diversa.
    La funzione (che non hai implementato) dovrebbe avere quattro parametri, due in input e due in output, con un prototipo di questo tipo:
    int indici_punti_piu_prossimi(
        Punto *i_vp, unsigned int i_qp, unsigned int *o_ip1, unsigned int *o_ip2 );
    Dove...
    i_vp = input vettore punti
    i_qp = input quantità punti
    o_ip1 = output indice primo punto
    o_ip2 = output indice secondo punto

    In *o_ip1 e *o_ip2, sempre per come leggo la traccia, non andrebbero inseriti i punti trovati, bensì la loro posizione nel vettore (l'indice).
  • Re: Struct array e funcion

    Antonio, la distanza è un double !
Devi accedere o registrarti per scrivere nel forum
4 risposte