Jump to content
Fórum Script Brasil
  • 0

Ponteiros


Junior Winkler Galhardo

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...