Рассчитать целые точки по кругу - PullRequest
1 голос
/ 27 октября 2011

Я написал небольшую программу, но ответ, который она дает, всегда неправильный, вот код

double radiusc;
double xcenter;
double ycenter;

bool onthecircle(int x,int y);


int main(void)
{
    int inputwait;

    printf("Please enter x coordinate of your center point: ");
    scanf("%d",&xcenter);

    printf("Please enter y coordinate of your center point: ");
    scanf("%d",&ycenter);

    printf("Please enter the radius of the circle: ");
    scanf("%d",&radiusc);

    double left_x = xcenter - radiusc;
    double left_y = ycenter;

    double down_x = xcenter;
    double down_y = ycenter - radiusc;

    if(left_x >= floor(left_x))
    {
        left_x = floor(left_x);
        int (left_x);
    }
    else
    {
        left_x = floor(left_x) + 1;
        int (left_x);
    }

    for(left_x; left_x<=xcenter; left_x++)
    {
        for(left_y;left_y>ycenter-radiusc;left_y--)
        {
            if(onthecircle(left_x,left_y))
                printf("Jest na kole: %d , %d \n", left_x,left_y);
        }
    }

    scanf("%i",&inputwait);

    return 0;
}

bool onthecircle(int x,int y)
{
    double t1= x - xcenter;
    double t2 = x - ycenter;

    if ((t1*t1 + t2*t2) > (0,9 *radiusc*radiusc) &&
        (t1*t1 + t2*t2) < (1,1 *radiusc*radiusc))
        return 1;
    else
        return 0;

}

Когда я отлаживаю, набираю 0,0 в качестве моего центра и r = 1, это даетЕсли у меня точка 0 и какое-то большое число, вместо сохранения 1 в качестве значения для r он получает случайное огромное число, и я понятия не имею, почему.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

В дополнение к найденной проблеме Эд, 0,9 не является допустимой константой с плавающей точкой;Вы хотите 0.9.(Настройки локали могут влиять на представления ввода и вывода; они не влияют на синтаксис языка.)

Запятая в (0,9 *radiusc*radiusc) является оператором запятой, а не десятичной точкой;Вы умножаете квадрат радиуса на 9.

И вам не хватает #include <stdio.h> и #include <math.h> (для floor() в верхней части вашей программы (ваш компилятор может позволить вам уйти)с этим, но это , а не необязательно).

И формат в ваших printf вызовах неверен, вам нужно "%f" или "%g" для `double '.

Подробнее:

Использование double в качестве переменной управления циклом сомнительно. Вызов scanf("%i",&inputwait); для ожидания ввода перед завершением программы без запроса - пользовательский-Hostile. Нет необходимости использовать глобальные переменные. Я не знаю, что int (left_x); должен должен делать; я думаю, что он анализируется как объявление (переменной, которую вы никогда не используете), икруглые скобки излишни. Использование вами имени типа bool означает, что вы компилируете свой код как C ++ или что у вас есть либо #include <stdbool.h>, либо определение bool, которое вы не удосужились показатьнас.

Это примерно столько же отладки, сколько я готов сделать сейчас. Fix эти ошибки и попробуйте снова.

2 голосов
/ 27 октября 2011

Ваш формат scanf неверен; %d для десятичных целых чисел. Вы хотите %lf для double.

Тем не менее, почему вы не используете ввод / вывод в стиле C ++, то есть <iostream>, cout, cin и т. Д.? Это похоже на некрасивое сочетание C и C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...