Странное уравнение печати - PullRequest
0 голосов
/ 31 марта 2012

У меня есть 2 указателя на некоторые структуры Point.Я хотел вычислить расстояние между двумя точками (мне не нужно вычислять его корень), поэтому у меня есть это:

    w[0]=X[l];
    w[1]=X[l+1];
    d=m(w[0]->x-w[1]->x)+m(w[0]->y-w[1]->y);
    printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x);

Ввод: X [l] = (0,1), X [l + 1] = (2,0) Вывод: --TEST 0 2 -1

Почему это так?Редактировать:


Это было частью функции find, которая находит 2 точки с наименьшим расстоянием между ними.В основном у меня есть это:

X=(Punkt**)malloc(sizeof(Punkt*)*n);
Y=(Punkt*)malloc(sizeof(Punkt)*n);
int x,y;
for(int i=0;i<n;++i) {
    scanf("%d %d",&x,&y);
    Y[i].x=x;
    Y[i].y=y;
    X[i]=(Punkt*)malloc(sizeof(Punkt*));
    X[i]=&Y[i];
}
Quicksort(X,0,n-1);
Punkt **wynik=find(0,n-1);
printf("%d %d\n%d %d",wynik[0]->x,wynik[0]->y,wynik[1]->x,wynik[1]->y);

Я проверил Quicksort, он работает как надо.Функция m: #define m (a) ((a) * (a)) Ошибка только в функции find в этой части.Это работает, но я не хочу создавать переменные для каждой координаты.

int trash1=w[0]->x;
int trash2=w[1]->x;
printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x,trash1-trash2);

Вход: 2 балла (0,1) (2,0) Выход: --TEST 0 2 -1 -2

1 Ответ

2 голосов
/ 01 апреля 2012

Я пытаюсь воспроизвести то, что вы испытываете.Используя это, я получаю 0 - 2 = - 2 как результат:( Другими словами, невозможно воспроизвести. )

#include <stdio.h>
#include <stdlib.h>

#define m(a) ((a)*(a))

typedef struct pkt {
    int x;
    int y;
} Punkt;

int main(void)
{
    Punkt **X;
    Punkt  *Y;
    Punkt  *w[2];
    int x, y;
    int n = 2;
    int i;

    X = malloc(sizeof(Punkt*) * n);
    Y = malloc(sizeof(Punkt) * n);

    printf("Enter 2 integer point pairs: ");
    for(i = 0; i < n; ++i) {
        scanf("%d %d", &x, &y);
        Y[i].x = x;
        Y[i].y = y;
        X[i] = &Y[i];
    }

    i = 0;
    w[0] = X[i];
    w[1] = X[i + 1];
    i = m(w[0]->x - w[1]->x) + m(w[0]->y - w[1]->y);

    printf("D: m(%d - %d) + m(%d - %d) = "
           "%d + %d = "
           "%d\n",
             w[0]->x,  w[1]->x,    w[0]->y,  w[1]->y,
           m(w[0]->x - w[1]->x), m(w[0]->y - w[1]->y),
           i);

    printf("TEST: %d - %d = %d\n",
            w[0]->x,
            w[1]->x,
            w[0]->x - w[1]->x);

    free(X);
    free(Y);

    return 0;
}

Образец:

$ ./pq
Enter 2 integer point pairs: 0 1 2 0
D: m(0 - 2) + m(1 - 0) = 4 + 1 = 5
TEST: 0 - 2 = -2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...