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

С переправить на С++ - C++

Восстановить пароль Регистрация
 
chehroma
2 / 2 / 0
Регистрация: 05.11.2012
Сообщений: 32
06.11.2012, 20:13     С переправить на С++ #1
есть програма написаная на С помогите переправить её на С++ и довести до ума.
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
#include <math.h>
#include <stdio.h>
#define EPSILON 10E-5
 
typedef struct {
    float x;
    float y;
} dot;
 
int getCircleEquation(dot dot1, dot dot2, dot dot3, float *x0, float *y0, float *r, int performTest)
{
    float det = (dot1.x * dot2.y + dot2.x * dot3.y + dot3.x * dot1.y
               - dot1.x * dot3.y - dot2.x * dot1.y - dot3.x * dot2.y);
    if (fabs(det) < EPSILON)
    {
        // Три точки на одной прямой, нельзя построить окружность
        return 0;
    }
 
    // Вычисляем ординату центра
    *y0 = (dot2.x * dot3.x * dot3.x - dot3.x * dot2.x * dot2.x +
           dot1.x * dot1.x * dot3.x - dot1.x * dot3.x * dot3.x +
           dot1.x * dot2.x * dot2.x - dot2.x * dot1.x * dot1.x +
 
           dot2.x * dot3.y * dot3.y - dot1.x * dot3.y * dot3.y +
           dot1.x * dot2.y * dot2.y - dot2.x * dot1.y * dot1.y +
           dot3.x * dot1.y * dot1.y - dot3.x * dot2.y * dot2.y) / (2 * det);
 
    // Вычисляем абциссу центра
    if (fabs(dot1.x - dot2.x) < EPSILON)
    {
        *x0 = (dot3.x * dot3.x + dot3.y * dot3.y
             - dot2.x * dot2.x - dot2.y * dot2.y
             + 2 * *y0 * dot2.y
             - 2 * *y0 * dot3.y) / (2 * (dot3.x - dot2.x));
    } else {
        *x0 = (dot2.x * dot2.x + dot2.y * dot2.y
             - dot1.x * dot1.x - dot1.y * dot1.y
             + 2 * *y0 * dot1.y
             - 2 * *y0 * dot2.y) / (2 * (dot2.x - dot1.x));
    }
 
    // Вычисляем радиус
    *r = sqrt(pow(dot1.x - *x0, 2) + pow(dot1.y - *y0, 2));
 
    // Тестирование
    if (performTest)
    {
        float r2 = sqrt(pow(dot2.x - *x0, 2) + pow(dot2.y - *y0, 2));
        float r3 = sqrt(pow(dot3.x - *x0, 2) + pow(dot3.y - *y0, 2));
 
        if (fabs(*r - r2) > EPSILON || fabs(*r - r3) > EPSILON || fabs(r2 - r3) > EPSILON)
        {
            printf("TEST FAIL: (%f,%f) (%f,%f) (%f,%f) => (%f %f) %f %f %f\n", dot1.x, dot1.y, dot2.x, dot2.y, dot3.x, dot3.y, *x0, *y0, *r, r2, r3);
 
        }
    }
 
    // Получили уравнение окружности
    return 1;
}
 
int main()
{
    float x0, y0, r;
    for (float x1 = -10.0; x1 < 10.0; x1 += 1)
    {
        for (float y1 = -10.0; y1 < 10.0; y1 += 1)
        {
            for (float x2 = -10.0; x2 < 10.0; x2 += 1)
            {
                for (float y2 = -10.0; y2 < 10.0; y2 += 1)
                {
                    for (float x3 = -10.0; x3 < 10.0; x3 += 1)
                    {
                        for (float y3 = -10.0; y3 < 10.0; y3 += 1)
                        {
                            dot dot1, dot2, dot3;
                            dot1.x = x1; dot1.y = y1;
                            dot2.x = x2; dot2.y = y2;
                            dot3.x = x3; dot3.y = y3;
 
                            if (!getCircleEquation(dot1, dot2, dot3, &x0, &y0, &r, 1))
                            {
                                printf("Unable to build (%f, %f) (%f, %f) (%f, %f)\n", dot1.x, dot1.y, dot2.x, dot2.y, dot3.x, dot3.y);
                            }
                        }
                    }
                }
            }
        }
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.11.2012, 20:30     С переправить на С++ #2
Программа на Си должна восприниматься в большинстве случаев и как С++
Andrey.K
 Аватар для Andrey.K
338 / 259 / 15
Регистрация: 14.11.2010
Сообщений: 480
06.11.2012, 20:53     С переправить на С++ #3
В сути тут и нечего исправлять на С++. Так как идут одни вычисления, всё что я заметил использовать надо С++ библиотеки и cout с cin. Мб ещё структуру заменить на класс, но это не существенно, а так сама программа не будет ничем другим отличаться.
chehroma
2 / 2 / 0
Регистрация: 05.11.2012
Сообщений: 32
06.11.2012, 21:05  [ТС]     С переправить на С++ #4
ех если бы я еще понимал где это все поминять... я не понимаю в програмировани вобще ничего.
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
06.11.2012, 21:08     С переправить на С++ #5
Ну еще и функцию
C++
1
getCircleEquation
включить в стутуру можно, например.
Andrey.K
 Аватар для Andrey.K
338 / 259 / 15
Регистрация: 14.11.2010
Сообщений: 480
06.11.2012, 21:17     С переправить на С++ #6
Как бы так, тут нечего менять, по той причине что все операты выполняют матем. действия.
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
#include <cmath>
#include <iostream>
using namespace std;
#define EPSILON 10E-5
 
typedef struct {
    float x;
    float y;
} dot;
 
int getCircleEquation(dot dot1, dot dot2, dot dot3, float *x0, float *y0, float *r, int performTest)
{
    float det = (dot1.x * dot2.y + dot2.x * dot3.y + dot3.x * dot1.y
               - dot1.x * dot3.y - dot2.x * dot1.y - dot3.x * dot2.y);
    if (fabs(det) < EPSILON)
    {
        // Три точки на одной прямой, нельзя построить окружность
        return 0;
    }
 
    // Вычисляем ординату центра
    *y0 = (dot2.x * dot3.x * dot3.x - dot3.x * dot2.x * dot2.x +
           dot1.x * dot1.x * dot3.x - dot1.x * dot3.x * dot3.x +
           dot1.x * dot2.x * dot2.x - dot2.x * dot1.x * dot1.x +
 
           dot2.x * dot3.y * dot3.y - dot1.x * dot3.y * dot3.y +
           dot1.x * dot2.y * dot2.y - dot2.x * dot1.y * dot1.y +
           dot3.x * dot1.y * dot1.y - dot3.x * dot2.y * dot2.y) / (2 * det);
 
    // Вычисляем абциссу центра
    if (fabs(dot1.x - dot2.x) < EPSILON)
    {
        *x0 = (dot3.x * dot3.x + dot3.y * dot3.y
             - dot2.x * dot2.x - dot2.y * dot2.y
             + 2 * *y0 * dot2.y
             - 2 * *y0 * dot3.y) / (2 * (dot3.x - dot2.x));
    } else {
        *x0 = (dot2.x * dot2.x + dot2.y * dot2.y
             - dot1.x * dot1.x - dot1.y * dot1.y
             + 2 * *y0 * dot1.y
             - 2 * *y0 * dot2.y) / (2 * (dot2.x - dot1.x));
    }
 
    // Вычисляем радиус
    *r = sqrt(pow(dot1.x - *x0, 2) + pow(dot1.y - *y0, 2));
 
    // Тестирование
    if (performTest)
    {
        float r2 = sqrt(pow(dot2.x - *x0, 2) + pow(dot2.y - *y0, 2));
        float r3 = sqrt(pow(dot3.x - *x0, 2) + pow(dot3.y - *y0, 2));
 
        if (fabs(*r - r2) > EPSILON || fabs(*r - r3) > EPSILON || fabs(r2 - r3) > EPSILON)
        {
            cout<<"TEST FAIL: ("<<dot1.x<<dot1.y<<")("<<dot2.x<<dot2.y<<")("<<dot3.x<<dot3.y<<")=>("<<*x0<<*y0<<") "<<*r<<r2<<r3<<endl;
 
        }
    }
 
    // Получили уравнение окружности
    return 1;
}
 
int main()
{
    float x0, y0, r;
    for (float x1 = -10.0; x1 < 10.0; x1 += 1)
    {
        for (float y1 = -10.0; y1 < 10.0; y1 += 1)
        {
            for (float x2 = -10.0; x2 < 10.0; x2 += 1)
            {
                for (float y2 = -10.0; y2 < 10.0; y2 += 1)
                {
                    for (float x3 = -10.0; x3 < 10.0; x3 += 1)
                    {
                        for (float y3 = -10.0; y3 < 10.0; y3 += 1)
                        {
                            dot dot1, dot2, dot3;
                            dot1.x = x1; dot1.y = y1;
                            dot2.x = x2; dot2.y = y2;
                            dot3.x = x3; dot3.y = y3;
 
                            if (!getCircleEquation(dot1, dot2, dot3, &x0, &y0, &r, 1))
                            {
                                cout<<"Unable to build ("<<dot1.x<<dot1.y<<")("<<dot2.x<<dot2.y<<")("<<dot3.x<<dot3.y<<")"<<endl;
                            }
                        }
                    }
                }
            }
        }
    }
}
Yandex
Объявления
06.11.2012, 21:17     С переправить на С++
Ответ Создать тему
Опции темы

Текущее время: 16:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru