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

Метод деформированного многогранника на С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ График функции http://www.cyberforum.ru/cpp-beginners/thread278401.html
Построить график функции F(x)={ -x^2+3x+9 если x<=3; x/(x^2+1, если x>3. очень прошу, помогите решить задачку!.. заранее спасибо
C++ Дана строка слов, разделенных пробелами. Сформируйте новую строку, вставив перед каждым вхождением слова "and" запятую Дана строка слов, разделенных пробелами. Сформируйте новую строку, вставив перед каждым вхождением слова "and" запятую. Определите, сколько в строке симметричных слов. http://www.cyberforum.ru/cpp-beginners/thread278398.html
C++ Программирование с использованием строк
Дана строка слов, разделенных пробелами и запятыми. Подсчитайте ко-личество слов в строке и сформируйте новую строку из самых длинных слов подстрок (заключенных между запятыми).
C++ Cтроки
Дан текс, содержащий целые числа. Вывести на экран только четные числа. Сделай пожалуйста кому не трудно, буду очень благодарен!
C++ Самоучитель по C++ http://www.cyberforum.ru/cpp-beginners/thread278391.html
Здравствуйте ув. пользователи форума!Извените за повтор темы.Дайте пожалуйста самоучитель по языку C++ для начинающих.
C++ Как работает цикл? Здравствуйте! Помогите разобраться. Есть генератор случайных чисел, который выдает 100 чисел от 0-20. Надо их отсортировать. //#include <stdafx.h> #include <iostream> #include "stdlib.h"... подробнее

Показать сообщение отдельно
Xerdum
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 10

Метод деформированного многогранника на С++ - C++

17.04.2011, 23:30. Просмотров 1908. Ответов 7
Метки (Все метки)

Здравствуйте! Помогите с написанием программы на С++ по методу деформированного многогранника. Есть код, который я приведу ниже, но он не пашет. Заранее спасибо! Код на Pascal

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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// Op_Lab2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    CPoint X_l(N), X_h(N), X_s(N), X_c(N), X_r(N), X_str(N), X_b(N), tmp(N);
    CPoint* MassPoint;
    MassPoint = new CPoint[N+1];
    double* MasF;
    MasF = new double[N+4];
    double Sig;
    double E2;
    double n;
    n = 1 / (N+1.0);
    E2 = E*E;
    
    for (int z=0; z<N+1; z++)
    {
        MassPoint[z] = MasPoint[z];
    }
 
    for (int i=0; i<N+1; i++)
    {
        for (int j=0; j<N; j++)
        {
            if (F(MassPoint[j], N, r) > F(MassPoint[j+1], N, r))
            {
                tmp = MassPoint[j];
                MassPoint[j] = MassPoint[j+1];
                MassPoint[j+1] = tmp;
            }
        }
    }
 
    for (int s=0; s<N+1; s++)
    {
        MasF[s] = F(MassPoint[s], N, r);
    }
 
//Step:
    //Сортировка
    for (int i=0; i<N+1; i++)
    {
        for (int j=0; j<N; j++)
        {
            if (F(MassPoint[j], N, r) > F(MassPoint[j+1], N, r))
            {
                tmp = MassPoint[j];
                MassPoint[j] = MassPoint[j+1];
                MassPoint[j+1] = tmp;
                double tmp2;
                tmp2=MasF[j];
                MasF[j]=MasF[j+1];
                MasF[j+1]=tmp2;
            }
        }
    }
 
    //Нахождение наилучшей, наихудшей и средней точек
    X_l = MassPoint[0];
    X_h = MassPoint[N];
    X_s = MassPoint[N-1];
 
    *for (int s=0; s<N+1; s++)
    {
        MasF[s] = F(MassPoint[s], N, r);
    }*
 
    printf("%0.4f\n",MasF[0]);
    
    //Step 3
 
    for (int i=0; i<N; i++)
    {
        X_c.SetPoint(0.0,i);
    }
    
    for (int i=0; i<N+1; i++)
    {
        X_c = X_c + MassPoint[i];
    }
    
    X_c = (X_c - X_h) / N;
    MasF[N+1] = F(X_c, N, r);
    
    //Step 4
 
    Sig = 0.0;
    double a1111;
    for (int j=0; j<N+1; j++)
    {
        a1111=MasF[j] - MasF[N+1];
        Sig = Sig + a1111*a1111;
    }
    Sig = Sig * n;
 
 
    if (Sig <= E2)
    {
        delete [] MassPoint;
        return X_l;
    }
 
    //Step 5. Отражение
 
    X_r = X_c + (X_c - X_h)*a;
    MasF[N+2] = F(X_r, N, r);
 
    //Step 6
 
    if (MasF[N+2] <= MasF[0])
    {
        //Растяжение
        X_str = X_c + (X_r - X_c)*c;
        MasF[N+3] = F(X_str, N, r);
        //return X_str;
        
        if (MasF[N+3] < MasF[0])
        {
            MassPoint[N] = X_str;
            MasF[N] = F(MassPoint[N], N, r);
        }
        else
        {
            MassPoint[N] = X_r;
            MasF[N] = F(MassPoint[N], N, r);
        }
        goto Step;
    }
 
    else if ( (MasF[N-1] < MasF[N+2]) && (MasF[N+2] <= MasF[N]) )
    {
        //Сжатие
        X_b = X_c + (X_h - X_c)*b;
        MassPoint[N] = X_b;
        MasF[N] = F(MassPoint[N], N, r);
        goto Step;
    }
    else if ( (MasF[0] < MasF[N+2]) && (MasF[N+2] <= MasF[N-1]) )
    {
        MassPoint[N] = X_r;
        MasF[N] = F(MassPoint[N], N, r);
        goto Step;
    }
    else if ( MasF[N+2] > MasF[N] )
    {
        //Редукция
        for (int p=0; p<N+1; p++)
        {
            MassPoint[p] = X_l + (MassPoint[p] - X_l)*0.5;
            MasF[p] = F(MassPoint[p], N, r);
        }
        goto Step;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru