Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Найти близлежащие точки на плоскости. 
:(
    Опции темы
lNatalyl
Дата 3.10.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.10.2009

Репутация: нет
Всего: нет



Уважаемые программисты, прошу помощи с такой задачей:
Имеется файл "test.search.txt". В нём разнообразные данные наблюдений, которые характеризуют объект. У каждого объекта свои координаты X и Y.
Чтобы было понятней: у первого объекта X=21.325405015, а Y=16.139773998.
Также и у остальных объектов на тех же позициях находятся их координаты.
Целью задания является вывести файл, в котором останутся только те объекты, у которых диапазон координат не более 0.0001, как на абцисах, так и на ординатах. При этом объектов может быть либо несколько, либо ни одного.
Ну вот приведу такой пример, что было проще уловить суть:

значит есть к примеру точки с координатами
A (5.262737 ; 9.356948)
B (5.847205 ; 8.047849)
C (5.262772 ; 9.356861)
D (4.918046 ; 9.168293)
E (5.828826 ; 9.153901)
F (5.828873 ; 9.153989)
Вот исходя из этого видно , что у А и С координаты Х и Y имеют необходимый диапазон различия в 0.0001, также это же неблаюдаем у точек E и F , т.е. они, точки A, B, E, F должны остаться в выводном файле,а остальные отфильтроваться. Таких точек, как А и C, может быть не только 2, а и болеек примеру 3,4,5 и тп.

Вот помогите с такой задачкой, мало разбираюсь. Если что-то необходимо уточнить. то походу дела уточню. 

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  test.search.txt.zip 21,92 Kb
PM MAIL   Вверх
Lipetsk
Дата 3.10.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в форме ;)
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.1.2009
Где: Липецк

Репутация: 1
Всего: 5



по-моему, здесь нужно использовать попарное сравнение, с запоминанием индексов близких точек

PM   Вверх
lNatalyl
Дата 4.10.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.10.2009

Репутация: нет
Всего: нет



так как я в этом деле профан, то честно говоря мне это не очень сильно о чём-то говорит)
PM MAIL   Вверх
ИванМ
Дата 4.10.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



lNatalyl, приведи пример файла "test.search.txt"
или 
Цитата(lNatalyl @  3.10.2009,  17:25 Найти цитируемый пост)
A (5.262737 ; 9.356948)B (5.847205 ; 8.047849)C (5.262772 ; 9.356861)D (4.918046 ; 9.168293)E (5.828826 ; 9.153901)F (5.828873 ; 9.153989)

это и есть файл?
PM MAIL   Вверх
lNatalyl
Дата 4.10.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.10.2009

Репутация: нет
Всего: нет



нет, там он более обширный, это как пример
просто сделать нужно так как описала
PM MAIL   Вверх
Dov
Дата 5.10.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(lNatalyl @  4.10.2009,  20:55 Найти цитируемый пост)
это как пример

Код
#define EPS  0.0001
#define SIZE 100

struct CoordObject
{
    double    x;
    double    y;
    bool      status;
};

bool check(CoordObject * ob, int i, int j)
{
    return i != j && fabs(ob[i].x - ob[j].x) <= EPS && fabs(ob[i].y - ob[j].y) <= EPS;
}

int main()
{
    ifstream           filein ("input.txt");
    ofstream           fileout("output.txt");
    CoordObject        co[SIZE];
    int                i, j, n = 0;

    while(!filein.eof())
    {
        filein >> co[n].x >> co[n].y;
        co[n++].status = true;
    }

    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
            if(check(co, i, j))
                goto next;                

        co[i].status = false;    
next:
        ;
    }

    for(i = 0; i < n; i++)
        if(co[i].status)
            fileout << setprecision(10) << co[i].x << '\t' << co[i].y << endl;

    return 0;
}


Если у тебя, к примеру, есть такой файл:
Цитата
2.325405 8.139773
9.320051 6.138532
9.323070 6.127301
9.319966 6.138492
2.325447 8.139692
2.323295 8.138414
7.325211 1.137612
7.325161 1.137552
2.325382 8.134481
9.322971 6.133613
9.319879 6.138423
1.322551 3.132009
1.322350 3.131733
1.322489 3.131439
7.319789 1.138333
1.322455 3.131375
2.325412 8.139733
7.325223 1.137481
 
то результат будет выглядеть так:
Цитата
2.325405    8.139773
9.320051    6.138532
9.319966    6.138492
2.325447    8.139692
7.325211    1.137612
7.325161    1.137552
9.319879    6.138423
1.322489    3.131439
1.322455    3.131375
2.325412    8.139733
7.325223    1.137481




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
shuttle
Дата 5.10.2009, 05:44 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



Ну и ужас
Код

if(check(co, i, j))
        goto next;                

        co[i].status = false;    
next:


лучше так
Код

if(check(co, i, j))
        co[i].status = false;    


Добавлено через 2 минуты и 5 секунд
блин, не то написал, вот так правильно

Код

if(!check(co, i, j))
        co[i].status = false;    


--------------------
PM MAIL   Вверх
Dov
Дата 5.10.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(shuttle @  5.10.2009,  04:44 Найти цитируемый пост)
Ну и ужас...
...блин, не то написал, вот так правильно

Пеши исчо, пейсатель...  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
ИванМ
Дата 6.10.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



Код

for(i = 0; i < n; i++)
    {
        bool b=false;
        for(j = 0; j < n; j++)
            if(check(co, i, j))
            {
                b=true;
                break;              
            } 
        if(!b) 
          co[i].status = false;    
    }

PM MAIL   Вверх
cardinal
Дата 6.10.2009, 21:40 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 15
Всего: 99



Цитата(Dov @  5.10.2009,  07:38 Найти цитируемый пост)
Пеши исчо, пейсатель...  smile 

Dov, а потому что не надо на скобках экономить...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Dov
Дата 7.10.2009, 19:26 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(cardinal @  6.10.2009,  20:40 Найти цитируемый пост)
Dov, а потому что не надо на скобках экономить...

железная  логика   smile 

з.ы. народ при виде goto сразу в штаны накладывает...   smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
cardinal
Дата 7.10.2009, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 15
Всего: 99



Dov, код должен быть читабельным. Не лень думать где какой цикл или if заканчивается?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
ИванМ
Дата 7.10.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 13
Всего: 23



Цитата(Dov @  7.10.2009,  19:26 Найти цитируемый пост)
народ при виде goto сразу в штаны накладывает

точно сказано.
находят сомнения в каком веке мы живем
PM MAIL   Вверх
Dov
Дата 7.10.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(cardinal @  7.10.2009,  19:17 Найти цитируемый пост)
Dov, код должен быть читабельным. Не лень думать где какой цикл или if заканчивается?


cardinal, я бы с тобой с удовольствием согласился бы, если бы привёл код в таком виде, например:
Код
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
if(check(co, i, j))
goto next;
co[i].status = false;    
next:
;
}


Ну хочешь, я добавлю скобок. Специально для тебя... Вот, пожалуйста:
Код
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(check(co, i, j))
{
goto next;
}
}
co[i].status = false;    
next:
;
}

Так лучше?   smile 

 Это шутка, конечно.  smile 
Ты прав, скобки лишними не бывают, но я привёл форматированый код, и думаю, что там всё должно быть достаточно понятно. В конце концов, там всего-то пяток строчек...   smile 

Цитата(ИванМ @  7.10.2009,  19:21 Найти цитируемый пост)
находят сомнения в каком веке мы живем

 smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
cardinal
Дата 7.10.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 15
Всего: 99



Цитата(Dov @  7.10.2009,  20:01 Найти цитируемый пост)
Ты прав, скобки лишними не бывают, но я привёл форматированый код, и думаю, что там всё должно быть достаточно понятно. В конце концов, там всего-то пяток строчек...   smile 

А если так
Код

for(i = 0; i < n; i++)
{
      co[i].status = false;   
      for(j = 0; j < n; j++)
      {
             if(check(co, i, j))
             {
                   j=n;
                   co[i].status = true; 
             }
      }
}



Это сообщение отредактировал(а) cardinal - 7.10.2009, 22:50


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.