int main () {
ponto p[4];
reta a, b;
float x, y, z;
int i, v_plano, c;
// ENTRADA DE DADOS **************************************************
for (i = 0; i < 4; i++) {
printf ("%do. Ponto Informe x: ", (i+1));
scanf ("%f", &x);
printf ("%do. Ponto Informe y: ", (i+1));
scanf ("%f", &y);
if (i > 1) {
printf ("%do. Ponto Informe z: ", (i+1));
scanf ("%f", &z);
}
if (i == 0) { // FORMA PARA DEFINIR UM PONTO 2d
setx (&p[i], x);
sety (&p[i], y);
setp2d (&p[i]);
}
if (i == 1) { // FORMA PARA DEFINIR UM PONTO 2d
setponto (&p[i], x, y); // OU setponto2d (&p[i], x, y)
}
if (i == 2) { // FORMA PARA DEFINIR UM PONTO 3d
setponto3d (&p[i], x, y, z);
}
if (i == 3) { // FORMA PARA DEFINIR UM PONTO 3d
setx (&p[i], x);
sety (&p[i], y);
setz (&p[i], z);
}
}
Pergunta
Junior Winkler Galhardo
O código tá apresentando esse erro, mas não identifico o porquê
#include <stdio.h>
#include <math.h>
typedef struct {
float x, y, z;
int p2d; // se 1 é 2d caso contrário 3d
} ponto;
// FUNÇÕES/OPERAÇÕES PARA DEFINIÇÃO DO PONTO (ENTRADA DE VALORES NO PONTO)
void setx (ponto *p, float x) {
p->x = x;
}
void sety (ponto *p, float y) {
p->y = y;
}
void setz (ponto *p, float z) {
p->z = z;
}
void setp2d (ponto *p) {
p->p2d = 1;
}
void setp3d (ponto *p) {
p->p2d = 0;
}
void setponto2d (ponto *p, float x, float y) {
p->x = x;
p->y = y;
p->p2d = 1;
}
void setponto3d (ponto *p, float x, float y, float z) {
p->x = x;
p->y = y;
p->z = z;
p->p2d = 0;
}
void setponto (ponto *p, float x, float y) {
setponto2d (p, x, y);
}
// FUNÇÕES/OPERAÇÕES PARA RETORNO (SAÍDA) DE VALORES DO PONTO
float getx (ponto *p) {
return p->x;
}
float gety (ponto *p) {
return p->y;
}
float getz (ponto *p) {
return p->z;
}
int getp2d (ponto *p) {
return p->p2d;
}
// FUNÇÕES/OPERAÇÕES PARA MANIPULAÇÃO (SAÍDA) DO PONTO
int isp2d (ponto *p) {
if (p->p2d) // (p->2d != 0)
return 1;
else
return 0;
}
int isp3d (ponto *p) {
if (!p->p2d) // (p->2d == 0)
return 0;
else
return 1;
// OU
// if (p->p2d) return 0; else return 0;
}
//////////////////////////////////////////////////////////////////////////////////////
typedef struct {
ponto p1, p2;
} reta;
void setreta (reta *r, ponto *p1, ponto *p2) {
r->p1 = *p1;
r->p2 = *p2;
}
void setretaponto1 (reta *r, ponto *p) {
r->p1 = *p;
}
void setretaponto2 (reta *r, ponto *p) {
r->p2 = *p;
}
ponto *getretaponto1 (reta *r) {
return &(r->p1);
}
ponto *getretaponto2 (reta *r) {
return &(r->p2);
}
float getretaponto1x (reta *r) {
return (r->p1.x);
}
float getretaponto1y (reta *r) {
return (r->p1.y);
}
float getretaponto2x (reta *r) {
return (r->p2.x);
}
float getretaponto2y (reta *r) {
return (r->p2.y);
}
int ispontoreta (reta *r, ponto *p) {
ponto a=r->p1;
ponto b=r->p2;
float a1, b1, c1, resultado;
a1= (a->y - b->y);
b1= (b->x - a->x);
c1=(a->x * b->y) - (b->x * a->y);
resultado = (a1 * p->x) + (b1 * p->y) + c1;
if(!resultado)
return 0;
else
return 1;
}
float distancia(ponto *p, ponto *p2 ){
float resultado1,resultado2,raiz;
resultado1=(p->x-p2->x);
resultado2=(p2->y-p->y);
resultado1=resultado1*resultado1;
resultado2=resultado2*resultado2;
raiz=resultado1+resultado2;
raiz=sqrt(raiz);
return raiz;
};
//////////////////////////////////////////////////////////////////////////////////////
int main () {
ponto p[4];
reta a, b;
float x, y, z;
int i, v_plano, c;
// ENTRADA DE DADOS **************************************************
for (i = 0; i < 4; i++) {
printf ("%do. Ponto Informe x: ", (i+1));
scanf ("%f", &x);
printf ("%do. Ponto Informe y: ", (i+1));
scanf ("%f", &y);
if (i > 1) {
printf ("%do. Ponto Informe z: ", (i+1));
scanf ("%f", &z);
}
if (i == 0) { // FORMA PARA DEFINIR UM PONTO 2d
setx (&p[i], x);
sety (&p[i], y);
setp2d (&p[i]);
}
if (i == 1) { // FORMA PARA DEFINIR UM PONTO 2d
setponto (&p[i], x, y); // OU setponto2d (&p[i], x, y)
}
if (i == 2) { // FORMA PARA DEFINIR UM PONTO 3d
setponto3d (&p[i], x, y, z);
}
if (i == 3) { // FORMA PARA DEFINIR UM PONTO 3d
setx (&p[i], x);
sety (&p[i], y);
setz (&p[i], z);
}
}
setp2d (&p[2]); // Transformando o 3o ponto em 2d
setreta (&a, &p[0], &p[1]); // Definindo Reta1
setretaponto1 (&b, &p[0]); // Definindo Reta2
setretaponto2 (&b, &p[2]); // Definindo Reta2
// SAÍDA DE DADOS *************************************************
printf ("\n");
for (i = 0; i < 4; i++) {
if (isp2d (&p[i]))
printf ("%do. Ponto (%f,%f)\n", (i+1), getx(&p[i]), gety(&p[i]));
else
printf ("%do. Ponto (%f,%f,%f)\n", (i+1), getx(&p[i]), gety(&p[i]), getz(&p[i]));
}
printf ("\n");
printf ("Reta A Ponto1 (%f,%f)\n", getretaponto1x(&a), getretaponto1y(&a));
printf ("Reta A Ponto2 (%f,%f)\n", getx(getretaponto2 (&a)), gety(getretaponto2 (&a)));
printf ("\n");
printf ("Reta B Ponto1 (%f,%f)\n", getx(getretaponto2 (&b)), gety(getretaponto2 (&b)));
printf ("Reta B Ponto2 (%f,%f)\n", getretaponto2x(&b), getretaponto2y(&b));
printf ("\n");
if (ispontoreta (&a, getretaponto2(&b)))
printf ("Reta B Ponto2 (%f,%f) faz parte Reta A\n",
getretaponto2x(&b), getretaponto2y(&b));
printf("A distancia entre os 2 pontos é %f",distancia(&p[0],&p[1]));
system ("pause");
return 0;
}
ERROS:
131 8 C:\Users\usuario\Desktop\DistanciaPontoJunior.c [Error] invalid type argument of '->' (have 'ponto')
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.