Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
#1

Минимальное из расстояний - C++

27.05.2012, 14:22. Просмотров 269. Ответов 0
Метки нет (Все метки)

Мне нужно найти минимальное из этих расстояний. Я вставила оператор if сразу после подсчета расстояния, а сравниваю с несуразно большим числом. Но вот дальше встает проблема. Куда вставить printf, чтобы выдавалось одно значение, а не три? И можно ли это сделать без массива?

Полный код программы.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void grouping(int n, int m, int m1, int* num, float* mas, float* *pt)//num -- массив номеров точек, которые уже вошли в комбинацию, m1 -- их количество
{
    float min=99999;
    int tmp=0;
    if(m1==0)
    {
        for(int i=0; i<n-m+1; i++)
        {
            num[0]=i;
            grouping(n,m,1,num,mas,pt);
        }
    }
    else if(m==m1)
    {
        
        float x1=0,x2=0,y1=0,y2=0,z1=0,z2=0,mas1=0,mas2=0;
        for(int i=0; i<n; i++)
        {
            for(int k=0;k<m1;k++)//Здесь ищем число i в массиве num
            {
                tmp=num[k];
                if(i==tmp)//Если нашли
                {
                    x1+=mas[i]*pt[i][0];
                    y1+=mas[i]*pt[i][1];
                    z1+=mas[i]*pt[i][2];
                    mas1+=mas[i];
                }               
                else
                {
                    x2+=mas[i]*pt[i][0];
                    y2+=mas[i]*pt[i][1];
                    z2+=mas[i]*pt[i][2];
                    mas2+=mas[i];
                }
            }
        }
        x1/=mas1;
        x2/=mas2;
        y1/=mas1;
        y2/=mas2;
        z1/=mas1;
        z2/=mas2;
        float l=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));//Посчитали расстояние.
        if(l<min)
            min=l;
            
        
        
    }
    
    else 
    {
        int last=num[m1-1];//У нас частицы упорядочены, и если у нас уже была комбинация из 1,3,4 частицы, например, то комбинация из 1,4,3 нас уже не интересует, потому новые частицы имеет смысл присоейдинять к комбинации только начиная с num[m1-1]
        for(int i=last+1; i<n-m+m1; i++)//Если номер будет больше, чем n-m+m1+1, то опять-таки комбинации будут повторяться
        {
            num[m1]=i;
            grouping(n,m,m1+1,num,mas,pt);
        }
    }
    printf("%f",min);
    printf("\n");
}
 
 
//=======================MAIN===============
int main()
{
    
    int N;
    FILE* fil=fopen("tochki.txt","r");
    fscanf(fil,"%d",&N);
    fclose(fil);
    FILE* file=fopen("3tochki.txt","r");
    float* *pt=new float*[N];
    for(int i=0; i<N; i++)
        pt[i]=new float[3];//Создали динамический массив N на 3
    float* mas=new float[N];//Создали динамический массив из N элементов
    for(int i=0; i<N; i++)
    {
        fscanf(file,"%f%f%f",&pt[i][0],&pt[i][1],&pt[i][2]);
    }
    fclose(file);
    FILE* f=fopen("3massa.txt","r");
    for(int i=0; i<N; i++)
        fscanf(f,"%f",&mas[i]);
    fclose(f);
    //int n1=(N+1)/2;
    for(int i=1; i<N-1; i++)
    {
        int* num=new int[i];
        grouping(N,i,0,num,mas,pt);
    }
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 14:22     Минимальное из расстояний
Посмотрите здесь:

Перевода расстояний в дюймах в сантиметры - C++
таблицу перевода расстояний в дюймах в сантиметры для значений 2, 4, 6, ..., 12 дюймов (1 дюйм = 25.4 мм);

Матрица расстояний для невзвешенного графа - C++
Нужно найти радиус, диаметр, центр неориентированного невзвешенного графа Для этого, как я поняла, нужна матрица расстояний. Как её...

Реализация алгоритма А* (поиск кратчайших расстояний на графе) - C++
В общем, уже несколько дней бьюсь над небольшой проблемой: написал поиск кратчайших путей на графе на основе алгоритма А*. Пути...

Вывести на экран таблицу перевода расстояний из дюймом в сантиметры - C++
Вывести на экран таблицу перевода расстояний в дюймах в сантиметры для значений 2, 4, 6, …, 12 дюймов (1 дюйм = 25.4 см) Решить задачу...

Найти сумму расстояний от начала координат до точек гиперболы - C++
Здравствуйте,объясните как делать задачу или покажите похожий пример. Вчера было первое занятие,разбираюсь со вчерашнего дня. С С++...

АТД Графы. Поиск суммы расстояний между городами. - C++
Здравствуйте! Нужна помощь! Всем известная задача и в сети конечно много разнообразных тем! но не одна из них не доведена до...

Найти точку, у которой сумма расстояний до других точек наименьшая - C++
Пользователь вводит координаты точек. Как найти точку, сумма расстояний до других точек наименьшая? Добавлено через 29 минут Никто...

Вывод всех исходных точек в порядке возрастания их расстояний от начала координат - C++
Выведите все исходные точки в порядке возрастания их расстояний от начала координат. Входные данные Программа получает на вход...

Дано n точек в пространстве, упорядочить точки по неубыванию их расстояний до начала координат - C++
Доброго времени суток всем. Прошу помочь с этими заданиям, написать код в c++ 1. Дано n точек в пространстве. Упорядочить точки по...

Определить расстояние от каждой скважины в групповой пункта и сумму этих расстояний - C++
Простите за ошибку


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru