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

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

Войти
Регистрация
Восстановить пароль
 
chehroma
2 / 2 / 0
Регистрация: 05.11.2012
Сообщений: 32
#1

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

06.11.2012, 20:13. Просмотров 324. Ответов 5
Метки нет (Все метки)

есть програма написаная на С помогите переправить её на С++ и довести до ума.
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);
                            }
                        }
                    }
                }
            }
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 20:13     С переправить на С++
Посмотрите здесь:

Переправить на очередь - C++
Помогите переправить код нужно что то такое же только с очередью((( #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; int...

Переправить от клиента на сервер символ wchar_t - C++
Надо переправить от клиента на сервер символ wchar_t bool send_data(wchar_t value) { //Send some data if( send(sock ,...

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

Переправить значение - MS Access
Как можно переправить в одной форме значение несвязного с таблицей поля в поле свзяное в таблицей не используя данные несвязного поля и...

Как переправить страницу на Google? - Python
Пытаюсь разобраться с python 33 нужен скрипт который переправит страницу на гугл перехожу localhost/test.py в тесте лежит скрипт ...

Переправить семью через реку - CLIPS
Здравствуйте дорогие друзья. У меня возникла проблема, нужно создать алгоритм на Clips к одной задаче, но вот как и что делать - не знаю....

Безопасно переправить аборигенов на другой берег - VBA
Здравствуйте! Подскажите, пожалуйста, как создать программу (или хотя бы алгоритм) для решения следующей задачи: Три миссионера и три...

Графы состояний, переправить супружеские пары. - Prolog
Народ помогите с заданием на турбопрологе: % 3) % Во время наводнения пять супружеских пар оказались отрезанными от суши. % В их...

как переправить данные с формы на почту? - PHP
есть форма, &lt;form action=&quot;handler.php&quot;&gt; &lt;fieldset&gt; &lt;legend&gt;Личные данные&lt;/legend&gt; &lt;div align=&quot;left&quot;&gt; &lt;label for=&quot;Name&quot; &gt;...

нужно переправить пакеты с внешнего диапазона на внутренний - Сети
что то я туплю .... есть локалка довольно большая ... надо отсечь часть есть 1. сервер на базе Windows Server 2008 2. сетевая...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
06.11.2012, 20:30     С переправить на С++ #2
Программа на Си должна восприниматься в большинстве случаев и как С++
Andrey.K
342 / 263 / 15
Регистрация: 14.11.2010
Сообщений: 482
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
342 / 263 / 15
Регистрация: 14.11.2010
Сообщений: 482
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     С переправить на С++
Ответ Создать тему
Опции темы

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