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

Ошибка в процедуре - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как понять код? http://www.cyberforum.ru/cpp-beginners/thread793411.html
#include <string.h> int main() { char str = "abcdef"; int slen = strlen(str); for(int i=0;i<slen/2;i++) { str = str + str; str = str - str; str = str...
C++ Нужны комментарии к коду с указателями Добавить комментарии к коду так, что бы можно было понять что и как используется. #include <iostream> #include <cmath> #include <cstdlib> #include <ctime> using namespace std; void sum(... http://www.cyberforum.ru/cpp-beginners/thread793400.html
C++ Хеадер и исходник
Имеется к примеру класс: class Call{ public: print(const char *text); }; Записано это в хеадер. Вопрос. Как сделать так, чтобы можно было описать методы класса в исходнике? К примеру...
Обработка элементов вектора на С++ C++
Дан вектор - одномерный числовой массив. Определить количество элементов массива, расположенных между макимальным и «центральным» элементами массива (предполагается, что число элементов -...
C++ Как проверить строку массива на наличее отрицательного члена http://www.cyberforum.ru/cpp-beginners/thread793372.html
Как проверить строку массива на наличее отрицательного члена?
C++ Не работает цикл Доброго времени суток. Только начал изучать этот язык в институте, а там уже лабы требуют, и я в ужасе пытаюсь их успевать делать) Дали задание: что сделал я: #include <iostream.h> #include... подробнее

Показать сообщение отдельно
Kota1921
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 5
24.02.2013, 02:52  [ТС]
Извиняюсь упустил сейчас поправлю, просто забыл их скопировать из исходного кода.

Добавлено через 7 минут
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <math.h>
#include <locale.h>
using namespace std;
 
struct cir
{
    int x,y;
    float rad;
};
 
 
//получение координат центра и радиуса
cir vvod()
{
    cir cir1;
    printf("Vvedite koordinatu X ");
    scanf("%i",&cir1.x);
    printf("Vvedite koordinatu Y ");
    scanf("%i",&cir1.y);
    printf("Vvedite radius ");
    scanf("%f",&cir1.rad);
    return(cir1);
 
}
 
 
//длинна окружности
double dlinna(double length)              //вычесление длинны окружности
{
    length=2*M_PI*length;
    return length;
}
 
//внешняя круговая оболочка
cir obl(cir cir1, cir cir2)
{
    cir cirresult;         //средний круг
 
    cirresult.x=(cir2.x-cir1.x)/2;         //середина отрезка по Х
    cirresult.y=(cir2.y-cir1.y)/2;         //середина отрезка по Y
    cirresult.rad=(cir1.rad+cir2.rad)/2;   //средний радиус
    return(cirresult);
}
 
//включение одного круга в другой
int vkluch(cir cir1, cir cir2)
    {
    float rast;
    if (cir1.rad>cir2.rad)
       {
       rast=sqrt(pow((cir2.x-cir1.x),2)+pow((cir2.y-cir1.y),2));
       if (cir1.rad>rast)
          {
          return(1);
          }
       else
          {
          return(0);
          }
       }
    else
       {
       return(0);
       }
    }
 
int peresech(cir cir1, cir cir2)
    {
    if ((pow((cir1.x-cir2.x),2)+pow((cir1.y-cir2.y),2))<=(pow((cir1.rad+cir2.rad),2)))
        {
        return(1);
        }
    else
        {
        return(0);
        }
    }
 
int main()
{
    int size,                           //размер набора
        i,j,k,n;                        //счетчики
    double min;                          //наименьший круг из набора
 
    setlocale(LC_CTYPE,"Russian");      //подключение кирилицы
 
    printf("Vvedite razmer nabora ");
    scanf("%i",&size);                   //количество кругов в наборе
 
    cir *mass;                      //массив набора кругов
        mass = new cir[size];
    for (i=0; i<size; i++)
        {
        mass[i]=vvod();                  //ввод данных о круге
        }
    system("CLS");
 
    cir sred[(size-1*size-2)%2];         //массив сдерних кругов
    k=0;                                 //обнуление k-счетчика
    for (i=0; i<size; i++)
        {
        for (j=0; j<size; j++)
            {
            if ((i!=j) && (i<j) && (peresech(mass[i],mass[j])))     //если индексы неравны и второй индех больше и есть пересечение
               {
               sred[k]=obl(mass[i],mass[j]);                        //получаем круговою оболочку для двух кругов
               k++;
               }
            }
        }
 
    min=mass[0].rad;                                                //минимальный круг из набора включений круговых оболочек
    for (i=0; i<size; i++)
        {
        for (j=0; j<k; j++)
            {
            if (vkluch(mass[i],sred[j])==1)                         //проверка на включение в круги из набора
                {
                if (mass[i].rad<min)
                    {
                    min=mass[i].rad;
                    }
                }
            }
        }
    printf("Dlinna okruznosti - %d",dlinna(min));
    delete []mass;
    system("PAUSE");
    return 0;
}

Компилятор не ругается, но когда доходит до вызова vkluch, то происходит вылет.
Программа должна находить длину границы наименьшего из кругов, содержащего в себе хотя
бы одну внешнюю круговую оболочку пересечения двух других кругов из заданного набора;

При тесте на данных: размер набора 3, X1=1, Y1=1, R1=4; X2=1, Y2=2, R3=5; X3=0, Y3=0, R3=40; Должна выводиться длинна границы 3 круга.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru