Ir para conteúdo
Fórum Script Brasil
  • 0

Ponteiros


Junior Winkler Galhardo

Pergunta

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

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...