Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2012, 02:31   #1
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
Печаль Поиск ближайшей точки снаружи круга

Программа должна выдавать координаты ближайшей точки снаружи круга.
Программа компилируется но выдает неправильный ответ...
Код:
#include <iostream>
#include <math.h>
using namespace std;
float multsum(float a, float b)
{
	return a*a+b*b;
}
void main()
{
	struct coord
	{
		float x,y;
	};
	float radius;
	short i,n;
	coord ans;
	do
	{
		cout<<"Enter the radius of a circle:";
		cin>>radius;
		cout<<"Enter number of points:";
		cin>>n;
	}
	while (radius<=0 || n<1);
	coord *points=new coord[n];
	radius*=radius;
	cout<<"Enter points' coordinate:\n";
	for(i=0; i<n; i++)
	{
		cout<<i+1<<".\n  x=";
		cin>>points[i].x;
		cout<<"  y=";
		cin>>points[i].y;
	}
	ans=points[0];
	for (i=1;i<n;i++)
		if ((radius<multsum(points[i].x,points[i].y))&&(multsum(points[i].x,points[i].y)<multsum(ans.x,ans.y)))
			ans=points[i];
	if(radius<multsum(ans.x,ans.y))
		cout<<"The nearest point is:\nx="<<ans.x<<" y="<<ans.y<<endl;
	else
		cout<<"There is no points outside the circle"<<endl;
	system ("pause");
}
zorg-kirill вне форума Ответить с цитированием
Старый 20.12.2012, 06:20   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Вроде все правильно. При каких данных ответ неправильный?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 20.12.2012, 08:50   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я тоже не вижу косяков в коде.

zorg-kirill, c чего Вы решили, что программа работает неверно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.12.2012, 02:25   #4
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
По умолчанию

Ну как бы она ответы неправильные выдает(( К примеру: ввести радиус 5, кол-во точек 5, точки (1,2) (2,3) (3,4) (4,5) (5,6) то выдает ответ что нет точек снаружи круга (хотя (4,5) (5,6) лежат снаружи. Код то вроде бы правильно написан, но с результами тестов фигня(((
zorg-kirill вне форума Ответить с цитированием
Старый 21.12.2012, 09:14   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а. точно. так и должно быть. я в уме несколько раз прогнал ваш код и увидел, где у Вас косяк!

вот он:
Цитата:
Код:
ans=points[0];
вы первую точку берёте как подходящую по решению.
А ведь это далеко НЕ ВСЕГДА ТАК!
Вот, в вашем случае, Вы всегда вводите точки в порядке удаления от центра.
Поэтому первая оказывается самой ближней.
и условие:
Цитата:
Код:
if ((radius>multsum(ans.x,ans.y)&&(multsum(points[i].x,points[i].y)<multsum(ans.x,ans.y)))
НЕ ВЫПОЛНЯЕТСЯ! первая точка лежит ближе, чем первая, которая за кругом. поэтому в ans значение нужной точки не присваивается!

я бы рекомендовал написать, например, так:
Код:
        ans=points[0];
        for (i=1;i<n;i++)
	if ((radius<multsum(points[i].x,points[i].y))&&
               ( (multsum(points[i].x,points[i].y)<multsum(ans.x,ans.y))
                 || (radius>multsum(ans.x,ans.y)) )
             ans=points[i];

        if(radius<multsum(ans.x,ans.y))
		cout<<"The nearest point is:\nx="<<ans.x<<" y="<<ans.y<<endl;
	else
		cout<<"There is no points outside the circle"<<endl;
	system ("pause");

Последний раз редактировалось Serge_Bliznykov; 21.12.2012 в 09:16.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.12.2012, 12:43   #6
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
По умолчанию

Спасибо большое, дошло))
zorg-kirill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти расстояние от произвольной точки до ближайшей стороны треугольника. Неправильно находит расстояние zaira001002 Помощь студентам 4 05.11.2012 20:55
Поиск всех путей в лабиринте от точки до точки pavel_abelardo Помощь студентам 12 26.06.2011 00:23
Точки и нахождение ближайшей пары точек Salim Помощь студентам 0 15.06.2009 23:32
поиск седловой точки vasd Общие вопросы Delphi 1 14.05.2009 22:04
Поиск точки (х;у) Slavik Microsoft Office Excel 4 01.05.2009 10:48