Distanza tra due punti in C

di il
3 risposte

Distanza tra due punti in C

Ciao a tutti sono nuovo del forum e ho appena iniziato a programmare. Volevo chiedervi se qualcuno potrebbe aiutarmi con questo semplice esercizio?
Funzioni date
È dato il file "Punto2D.c", allegato alle specifiche, contenente le seguenti strutture e funzioni:
• “isZero”: valuta se un valore float è 0, o prossimo a 0, cioè se la sua distanza da 0 è minore di un errore massimo accettabile.
• “tasto”: genera un messaggio di attesa e attende che venga premuto “Invio”.
• "Punto2D": struttura che gestisce un punto sul piano a due dimensioni.
• "leggiPunto2D": legge un punto da tastiera.

Specifiche È richiesto di definire nel file suddetto le seguenti funzioni:
• "void stampa(?)": dato un punto, stampa sul video il suo valore nel formato "(x, y)".
• "? distanza2(?)": dati due punti, restituisce la loro distanza.
• "? distanzaOr(?)": dato un punto, restituisce la sua distanza dall’origine.
Mi è stato dato inoltre l'inizio dell'esercizio e io finora ho fatto la funzione stampa( forse sbagliata )
/* Punto2D */
#include <stdio.h>
#include <math.h>

/* definizioni di costanti: */
#define EPS 0.001  /* massima tolleranza nel decidere l'uguaglianza tra float */
#define M_PI 3.14159265358979323846264338327 
/* M_PI (Mio Pigreco): servirà per i calcoli sugli angoli */

typedef struct {
    float x, y;
} Punto2D;

Punto2D pEst; /* definizione di pEst come struttura esterna alle funzioni e
		quindi con scope (visibilità) che si estende a tutte le funzioni. 
	      	Serve perché, essendo i parametri passati per valore, una funzione 
		può restituire (con l'istruzione return) un solo valore; 
		quando serve che ne restituisca più d'uno (in questo programma
		le due coordinate di un punto) si definisce una variabile struttura
		pEst esterna: i 2 valori che una funzione inserisce nei campi x e y
		di pEst sono visibili in tutto il programma */ 

/* Legenda per i commenti introduttivi alle funzioni
 IP = Input parameter; 
 OR = Output returned; 
 OP = Output parameter (in questa versione del programma sostituiti da pEst)
 IK = Input da keyboard (da tastiera)
 OV = Output su Video.
*/

/*************************************************/
/*
IP x Numero da valutare se e` circa 0.
IP err Errore massimo tollerato.
OR Indicazione se $x e` "circa 0", cioe` se la sua distanza da 0 e` < $err.
*/
int isZero(float x, float err) {
    return fabs(x) < err;
} /* isZero */

/* OV Messaggio di attesa. */
void tasto(void) {
    fflush(stdin);
    printf("Premere Invio per continuare. ");
    getchar();
} /* tasto */

/*************************************************/

/* IK+OR p Punto da leggere da tastiera. */
/* questa funzione deve restituire due valori, x e y: li inserisce nella struttura esterna pEst */
void leggiPunto2D(void) {
    float x, y;
    printf("Inserisci le coordinate di un punto:\n");
    printf("    Inserisci la x: ");
    scanf("%f", &x);
    pEst.x=x;
    printf("    Inserisci la y: ");
    scanf("%f", &y);
    pEst.y=y;
} /* leggiPunto2D */

/*************************************************/

/*
IP p1 Primo punto.
IP p2 Secondo punto.
OR pM Punto medio tra $p1 e $p2.
*/
/* questa funzione deve restituire due valori, x e y: li inserisce nella struttura esterna pEst */
void puntoMedio(Punto2D p1, Punto2D p2) {
    float x, y;
    x= (p1.x + p2.x) / 2;
    y= (p1.y + p2.y) / 2;
    pEst.x=x;
    pEst.y=y;
} /* puntoMedio */

/*************************************************/

/* QUA INIZIANO LE FUNZIONI CHE È RICHIESTO DI DEFINIRE. */
void stampa(Punto2D x, Punto2D y)
{
	printf("il valore del punto è: (%f,%f)", pEst.x,pEst.y);
}
 
Se mi aiutaste a definire le altre due funzioni ve ne sarei grato perche io proprio non riesco a venirne fuori
Vi ringrazio in anticipo!

3 Risposte

  • Re: Distanza tra due punti in C

    Non si può essere così generici... Parti da un singolo preciso problema che non sai affrontare dopo aver mostrato del codice scritto da te
  • Re: Distanza tra due punti in C

    Eh i miei singoli precisi problemi sono le due funzioni che per le distanze dei punti
    Punto2D distanza2(Punto2D p1, Punto2D p2)
    {
    float x, y;
    Punto2D dis= sqrt((p2.x - p1.x)*(p2.x - p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
    pEst.x=x;
    pEst.x=x;
    printf("la distanza è uguale a: %f", dis);
    }
    Ho fatto questo ma penso sia lontano anni luce
    Quindi se mi aiutassi con la soluzione e a capire perche si fa in quel modo te ne sarei grato.
  • Re: Distanza tra due punti in C

    Intanto la funzione deve restituire la distanza, non una struct Punto2D (cosa che comunque non fa per ora). La distanza la puoi trovare immaginando di avere un triangolo rettangolo che ha per cateti delta x e delta y dei due punti, la cui distanza è l'ipotenusa del triangolo. Applica quindi il teorema di pitagora. Per la distanza dall'origine, la cosa è uguale ma invece di due punti, hai il primo punto che è fisso sull'origine, quindi coordinate 0;0
Devi accedere o registrarti per scrivere nel forum
3 risposte