//Para compilar: gcc tad_r2.c principal_r2.c -o prog; ./prog
#include <stdio.h>
#include "tad_r2.h"
//#include "tad_l1.h"
int main() {
float x, y;
Ponto *a = cria(1.0,1.0);
Ponto *b = cria(4.0,4.0);
acessa(a,&x,&y);
printf("Ponto a(%.2f,%.2f)\n",x,y);
acessa(b,&x,&y);
printf("Ponto b(%.2f,%.2f)\n",x,y);
float c = distancia(a,b);
printf("Distancia entre pontos: %.2f\n",c);
//c = distanciaL1(a,b);
//printf("Distancia L1 entre pontos: %.2f\n",c);
libera(a);
libera(b);
return(0);
}
#include <stdlib.h> /* malloc, free, exit */
#include <stdio.h> /* printf */
#include <math.h> /* sqrt */
#include "tad_r2.h"
struct ponto {
float x;
float y;
};
Ponto* cria (float x, float y) {
Ponto* p = (Ponto*) malloc(sizeof(Ponto));
if (p == NULL) {
printf("Memoria insuficiente!\n");
exit(1);
}
p->x = x;
p->y = y;
return p;
}
void libera (Ponto* p) {
free(p);
p = NULL;
}
void acessa (Ponto* p, float* x, float* y) {
*x = p->x;
*y = p->y;
}
void atribui (Ponto* p, float x, float y) {
p->x = x;
p->y = y;
}
//Distancia euclidiana entre dois pontos no R^2
float distancia (Ponto* p1, Ponto* p2) {
float dx = p2->x - p1->x;
float dy = p2->y - p1->y;
return sqrt(dx*dx + dy*dy);
}
/* TAD: Ponto (x,y) */
/* Novo tipo de dados */
typedef struct ponto Ponto;
/* Funções exportadas */
/* Função cria
Aloca e retorna um ponto com coordenadas (x,y)*/
Ponto* cria (float x, float y);
/* Função libera
Libera a memória de um ponto previamente criado.*/
void libera (Ponto* p);
/* Função acessa
Devolve os valores das coordenadas de um ponto*/
void acessa (Ponto *p, float *x, float *y);
/* Função atribui
Atribui novos valores às coordenadas de um ponto*/
void atribui (Ponto* p, float x, float y);
/* Função distancia
Retorna a distância entre dois pontos */
float distancia (Ponto* p1, Ponto* p2);
#include <stdio.h>
#include "tad_r2.h"
float distanciaL1 (Ponto* p1, Ponto* p2) {
float x, y;
Ponto *a = cria(1.0,1.0);
Ponto *b = cria(4.0,4.0);
acessa(a,&x,&y);
float nx = p2->x - p1->x;
float ny = p2->y - p1->y;
return sqrt(dx*dx + dy*dy);
}
float distanciaL1 (Ponto* p1, Ponto* p2);