1 Востаннє редагувалося navchalkin (01.05.2015 21:36:00)

Тема: Знайти найближчу точку до початку координат

Недавно почали вчити Сі, і дали ось таку задачу:
На площині задано 3 точки (х1, у1; х2, ...). Визначити, яка з них ближча до початку координат.
Я написав програму, але працює вона неправильно. Можливо, замість розгалужень є інший алгоритм пошуку меншої змінної?
(за функцію вводу я знаю: можна було записати в одному "scanf", просто я вже пробував різні конфігурації, бо не працювало)
Внизу на зображенні видно, що воно неправильно рахує :)

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

int main(int argc, char *argv[])
{
  int x1,x2,x3,y1,y2,y3;
  float m,n,b;
  printf("Press x\n");
  scanf("%d",&x1);
  scanf("%d",&x2);
  scanf("%d",&x3);
  printf("Press y\n");
  scanf("%d",&y1);
  scanf("%d",&y2);
  scanf("%d",&y3);
  m=sqrt(x1*x1-y1*y1);
  n=sqrt(x2*x2-y2*y2);
  b=sqrt(x3*x3-y3*y3);
  printf("-- [0;0]: %f, %f, %f\n",m,n,b);
  {
  if(m<n&&m<b)
              {
              printf("Point 1\n");                                 
              }
  else if(n<m&&n<b)
              {
              printf("Point 2\n");                                 
              }
  else if(b<n&&b<m)
              {
              printf("Point 3\n");                                 
              }                         
              }
  system("PAUSE");
  return 0;
}
}
Post's attachments

компілятор.png 32.8 kb, 258 downloads since 2015-05-01 

2 Востаннє редагувалося #Sparta (01.05.2015 21:40:55)

Re: Знайти найближчу точку до початку координат

А чому різниця квадратів?

 m=sqrt(pow(x1,2)-pow(y1,2));
 n=sqrt(pow(x2,2)-pow(y2,2));
 b=sqrt(pow(x3,2)-pow(y3,2));

До речі, рекомендую використовувати структурні типи даних для моделювання точки на площині :)
Я розумію, що ви , можливо, цього ще не вчили , але загугліть , або почитайте в посібнику - дуже зручна штука.
І значно зекономить вам час і зменшить розмір коду.

І ще 1. Навіщо фігурні дужки перед іфом(if)?

Подякували: navchalkin1

3

Re: Знайти найближчу точку до початку координат

Тут проблема в використанні цілих чисел для відстаней, тоді як вони можуть мати й дробову частину, яка при перетворенні до цілого відкидається. Спробуйте оголосити float m,n,b;

Подякували: navchalkin1

4

Re: Знайти найближчу точку до початку координат

P.Y. написав:

Тут проблема в використанні цілих чисел для відстаней, тоді як вони можуть мати й дробову частину, яка при перетворенні до цілого відкидається. Спробуйте оголосити float m,n,b;

Емм, я ж оголосив цим змінним тип з плаваючою крапкою   :)

5

Re: Знайти найближчу точку до початку координат

А чому різниця квадратів?

І це теж. Має бути сума квадратів координат.

Щодо попереднього мого зауваження: замість відстаней можна порівнювати квадрати відстаней (тобто, обійтись без знаходження коренів — якщо  a>b≥0, то й a2>b2) — тоді m, n, b можна залишити цілими.

Подякували: navchalkin, Yola2

6

Re: Знайти найближчу точку до початку координат

...Навіщо фігурні дужки перед іфом(if)?

Гг, то я пробував, можливо помилки не буде :)

7

Re: Знайти найближчу точку до початку координат

Емм, я ж оголосив цим змінним тип з плаваючою крапкою

Хм. Кудись я не туди дивився, мабуть.

Подякували: navchalkin1

8

Re: Знайти найближчу точку до початку координат

#Sparta написав:

А чому різниця квадратів?

 m=sqrt(pow(x1,2)-pow(y1,2));
 n=sqrt(pow(x2,2)-pow(y2,2));
 b=sqrt(pow(x3,2)-pow(y3,2));

До речі, рекомендую використовувати структурні типи даних для моделювання точки на площині :)
Я розумію, що ви , можливо, цього ще не вчили , але загугліть , або почитайте в посібнику - дуже зручна штука.
І значно зекономить вам час і зменшить розмір коду.

І ще 1. Навіщо фігурні дужки перед іфом(if)?

овв, точно, різниця квадратів -- це було помилкою :) то просто спати пора йти, баняк не варить :D

Подякували: #Sparta1

9

Re: Знайти найближчу точку до початку координат

P.Y. написав:

А чому різниця квадратів?

І це теж. Має бути сума квадратів координат.

Щодо попереднього мого зауваження: замість відстаней можна порівнювати квадрати відстаней (тобто, обійтись без знаходження коренів — якщо  a>b≥0, то й a2>b2) — тоді m, n, b можна залишити цілими.

хм, теж ідея :)

10

Re: Знайти найближчу точку до початку координат

овв, точно, різниця квадратів -- це було помилкою :) то просто спати пора йти, баняк не варить :D

Буває :)
Все - таки) Спробуйте почитати про структурні типи данних.

Подякували: navchalkin1

11

Re: Знайти найближчу точку до початку координат

Ось готова програма, з норм зовнішнім виглядом, як на мене  :D

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

int main(int argc, char *argv[])
{
  int x1,x2,x3,y1,y2,y3;
  float m,n,b;
  printf("Enter x (3 points)\n");
  scanf("%d%d%d",&x1,&x2,&x3);
  printf("Enter y (3 points)\n");
  scanf("%d%d%d",&y1,&y2,&y3);
  m=sqrt(x1*x1+y1*y1);
  n=sqrt(x2*x2+y2*y2);
  b=sqrt(x3*x3+y3*y3);
  printf("The distance from [0;0]: %f, %f, %f\n\n",m,n,b);
  printf("==============================\n");
  if(m<n&&m<b)
              {
              printf("           Point 1\n");                                 
              }
  else if(n<m&&n<b)
              {
              printf("           Point 2\n");                                 
              }
  else if(b<n&&b<m)
              {
              printf("           Point 3\n");                                 
              }      
  printf("==============================\n\n");                                 
  system("PAUSE");
  return 0;
}
Подякували: koala1