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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2013, 21:44   #1
tatiana2472
 
Регистрация: 30.05.2013
Сообщений: 8
По умолчанию Расстояние между точками

Написала программу, показала преподавателю. он сказал что в нектрых точках программа будет работать неправильно ,поищите ошибку, вот код:
Код:
#include <stdio.h>
 #include <math.h>
 #include <stdlib.h>
 void main()
 {float a[999],b[999];
 int n,i,j,k1,k2,k3,k4;
 float max,l,min;
 printf("Vvedi n");
 scanf("%d",&n);
 printf("vvedi x u y");
 for (i=0;i<=n-1;i++)
 scanf("%f %f", &a[i],&b[i]);
 l=sqrt(pow(a[1]-a[0],2)+pow(b[1]-b[0],2));
 max=l;min=l;
 
 for(i=0;i<=n-2;i++)
 for (j=i+1;j<=n-1;j++)
 { l=sqrt(pow(a[i]-a[j],2)+pow(b[i]-b[j],2));
 if (l>=max) {k1=i;k2=j;max=l;};
 if (l<=min) {k3=i;k4=j;min=l;};
}
 
 printf ("max =%d %d  \n min =%d %d",k1,k2,k3,k4);
 }
From Stilet: Код оформляй спецтегом!

Последний раз редактировалось Stilet; 30.05.2013 в 22:16.
tatiana2472 вне форума Ответить с цитированием
Старый 30.05.2013, 21:58   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Во-первых, сравнивать можно не расстояния, а квадраты расстояний (увеличение эффективности программы).
Во-вторых, если между 0 и 1 точками максимальное или минимальное расстояние, то k1 и k2 или k3 и k4 будут иметь неправильные значения.
Хм, снимаю свое "во-вторых", так как нестрогое сравнение должно установить правильно значения.
В-третьих, а если точек больше 999?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 30.05.2013 в 22:00.
BDA вне форума Ответить с цитированием
Старый 30.05.2013, 21:59   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Спасибо за читаемый текст. Используйте в следующий раз тег форума CODE.
1) Программа будет работать неправильно при n>=1000.
2) Программа будет работать неправильно при n<2.
3) Желательно бы знать, что программа должна делать. Максимум и минимум расстояний между различными введёнными точками (с учётом пунктов 1,2 и без учёта возможности переполнения) программа ищет вроде правильно.
Abstraction вне форума Ответить с цитированием
Старый 30.05.2013, 22:18   #4
tatiana2472
 
Регистрация: 30.05.2013
Сообщений: 8
По умолчанию

Сори что забыла записать условия задачи, вот они : дано n точек найти номера точек с максимальным и минимальным расстоянием между точками.
tatiana2472 вне форума Ответить с цитированием
Старый 30.05.2013, 22:19   #5
tatiana2472
 
Регистрация: 30.05.2013
Сообщений: 8
По умолчанию

Напишите ,пожалуйста, поподробней про ваш первый пункт.
tatiana2472 вне форума Ответить с цитированием
Старый 30.05.2013, 22:49   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
 int n,i,j,k1,k2,k3,k4;
 float max,l,min;
 printf("Vvedi n");
 scanf("%d",&n);
 //проверка, что n>1, и нужная реакция
 float a[n],b[n];
Таким образом n может быть больше 1000, хотя, возможно, стоит выделять память динамически.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 30.05.2013, 23:16   #7
tatiana2472
 
Регистрация: 30.05.2013
Сообщений: 8
По умолчанию

Исправила.Созрел новыый вопрос , если минимальное расстояние будут иметь 3 точки как сдлеать чтоб программа выдавала 3 точки?
tatiana2472 вне форума Ответить с цитированием
Старый 30.05.2013, 23:54   #8
tatiana2472
 
Регистрация: 30.05.2013
Сообщений: 8
По умолчанию

Цитата:
Во-первых, сравнивать можно не расстояния, а квадраты расстояний (увеличение эффективности программы).
Тоесть из моего кода убрать sqrt? я так понимаю?
tatiana2472 вне форума Ответить с цитированием
Старый 31.05.2013, 00:10   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
убрать sqrt?
Именно.
Цитата:
чтоб программа выдавала 3 точки?
Придется добавить дополнительные массивы для хранения пар точек.
Код:
typedef struct info
{
    int k1, k2;
} info;
...
info maxs[n * (n - 1)];
info mins[n * (n - 1)];
int max_count = 0, min_count = 0;
...
if (l > max) {
    max_count = 1;
    maxs[0].k1 = i;
    maxs[0].k2 = j;
} else if (fabs(l - max) < eps) {
    maxs[max_count].k1 = i;
    maxs[max_count].k2 = j;
    ++max_count;
} else if (l < min) {
    min_count = 1;
    mins[0].k1 = i;
    mins[0].k2 = j;
} else if (fabs(l - min) < eps) {
    mins[min_count].k1 = i;
    mins[min_count].k2 = j;
    ++min_count;
}
Код не тестировал, но идея такова.
В массивах mins и maxs будут хранится пары номеров точек, между которыми минимальное и максимальное расстояния, а min_count и max_count указывают на количество пар.
Так как вещественные числа нельзя сравнивать на строгое равенство, нужно использовать конструкцию fabs(a-b)<eps, где eps - маленькое число, например, 0.00001.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 31.05.2013 в 00:13.
BDA вне форума Ответить с цитированием
Старый 31.05.2013, 00:34   #10
tatiana2472
 
Регистрация: 30.05.2013
Сообщений: 8
По умолчанию

Спасибо, хоть со структурами пока ещё не приходилось сталкиваться, с горем пополам сделала ,но обьясните что вот это
Цитата:
maxs[0].k1 = i;
maxs[0].k2 = j;
и как потом вывести на экран номера?
tatiana2472 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расстояние между точками bumer7721 Помощь студентам 0 22.03.2012 19:16
СИ Найти наименьшее расстояние между точками savra Помощь студентам 2 19.04.2011 10:16
Расстояние между точками (Delphi) КатюФа Помощь студентам 3 04.05.2010 14:52
расстояние между точками в евклидовой плоскости CrystaLize Помощь студентам 0 30.11.2009 23:47