С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Я астроном, а не программист( - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ [C++] Нужна программа, архивирующая файлы http://www.cyberforum.ru/cpp-beginners/thread551117.html
Заархивировать нужно файл .txt с определенным текстом. Плохо разбираюсь в С++, поэтому нужна ваша помощь. Как можно проще. Заранее спасибо)
C++ Ребят..помогите с програмкой пожалуйста.. Надо написать программу на языке СИ....буду очень благодарен. Вот условие: Написать подпрограмму смещения многобайтного кода вправо на два разряда Добавлено через 22 минуты Програмка оч... http://www.cyberforum.ru/cpp-beginners/thread551088.html
C++ Шифр Плейфера
Народ, в общем очень срочно нужно для курсача разработать программу шифрования текстовых данных и программу дешифрования, ключ хранится в отдельном файле. Причем с отдельно пошаговыми...
Найти цифры, которые чаще всего встречаются в заданном натуральном числе N. C++
Помогите пожалуйста написать программу. Нужно чтобы при вводе числа с несколькими наибольшими цифрами, выводило все эти цифры, а не только одну из них((
C++ Зависает консоль http://www.cyberforum.ru/cpp-beginners/thread551071.html
Непонимаю в чем проблема. help #include <iostream.h> #include <windows.h> using namespace std; char Metka; char* Sektor = "a1"; char A1, A2, A3, A4, A5, A6, A7, A8, A9;
C++ Ускоренный поиск, основанный на использовании общего справочника подскажите как создавать этот справочник, если можно то покажите на примере подробнее

Показать сообщение отдельно
ЯНАЧЧКА
0 / 0 / 0
Регистрация: 14.04.2012
Сообщений: 2

Я астроном, а не программист( - C++

17.04.2012, 19:14. Просмотров 373. Ответов 2
Метки (Все метки)

Знаю, с такими просьбами уже задолбали(
Помогите, пожалуйста!
У меня есть программа, в которой я задаю начальные координаты объекта(x, y, z, v_x, v_y, v_z), задаю интервал времени (T), и программа выдает координаты, которые принимает тело спустя заданное время.
(Речь идет о движении звезд в Галактике)
Программа работает правильно. Всё хорошо.
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
// 
 
 
#include <iostream>
#include <cmath>
using namespace std;
 
void Runge_Kutta (int, double, double *, void (*f));
double dphi_dx(double, double, double);
double dphi_dy (double, double, double);
double dphi_dz (double,double, double);
double dphi_dr (double, double, double);
void diff_equi (int, double*);
void star(double ,double* , double , double , double, double, double, double );
 
int main () {
    int n=6, i;
    double input[6], x, y, z, v_x, v_y, v_z;
    double T=1e7, a;
    x=8.3;
    y=0;
    z=0;    
    v_x=0;
    v_y=2.3e-7;
    v_z=0;
    input[0] = x; 
    input[1] = y; 
    input[2] = z;
    input[3] = v_x; 
    input[4] = v_y; 
    input[5] = v_z;
    star(T, &input[0], x, y, z, v_x, v_y, v_z );
    for (i=0;i<6;i++)
    cout<<input[i]<<endl;
    cin>>a;
return 0; }
 
void Runge_Kutta (int n, double T, double * input, void (*f)(int n, double * in_fun)) {
double result [6], h;
double quant_it;
double frac_quant, step = 1000;
frac_quant = modf (T/step, &quant_it);      //
if (quant_it < 0) {
quant_it *= -1;
h = -step;          }
else
h = step;       
double k_1[n], k_2[n], k_3[n], k_4[n];
double vect_for_sent[n];
double t = 0;
 
    for (int i = 0; i < quant_it; i++)              {
            for (int k = 0; k < n; k++)
                vect_for_sent[k] = input[k];
            f(n, &vect_for_sent[0]);    
            for (int k = 0; k < n; k++)     {           
                k_1[k] = vect_for_sent[k];
                vect_for_sent[k] = input[k] + 0.5 * h * k_1[k];
                            }
            f(n, &vect_for_sent[0]);
            for (int k = 0; k < n; k++)     {
                k_2[k] = vect_for_sent[k];
                vect_for_sent[k] = input[k] + 0.5 * h * k_2[k];
                            }
            f(n, &vect_for_sent[0]);
            for (int k = 0; k < n; k++)     {           
                k_3[k] = vect_for_sent[k];
                vect_for_sent[k] = input[k] +  h * k_3[k];
                            }
            f(n, &vect_for_sent[0]);
            for (int k = 0; k < n; k++)     { 
                k_4[k] = vect_for_sent[k];
                input[k] += 1./6. * h * (k_1[k] + 2*k_2[k] + 2*k_3[k] + k_4[k]);
                            }
                t+=h;
                                    }
 
quant_it = 1;
h = step * frac_quant;
    for (int i = 0; i < quant_it; i++)              {
            for (int k = 0; k < n; k++)
                vect_for_sent[k] = input[k];
            f(n, &vect_for_sent[0]);    
            for (int k = 0; k < n; k++)     {           
                k_1[k] = vect_for_sent[k];
                vect_for_sent[k] = input[k] + 0.5 * h * k_1[k];
                            }
            f(n, &vect_for_sent[0]);
            for (int k = 0; k < n; k++)     {
                k_2[k] = vect_for_sent[k];
                vect_for_sent[k] = input[k] + 0.5 * h * k_2[k];
                            }
            f(n, &vect_for_sent[0]);
            for (int k = 0; k < n; k++)     {           
                k_3[k] = vect_for_sent[k];
                vect_for_sent[k] = input[k] +  h * k_3[k];
                            }
            f(n, &vect_for_sent[0]);
            for (int k = 0; k < n; k++)     { 
                k_4[k] = vect_for_sent[k];
                input[k] += 1./6. * h * (k_1[k] + 2*k_2[k] + 2*k_3[k] + k_4[k]);
                            }
                t+=h;
                                    }
 
}
 
 
double G = 2.2608e-57, M_sol = 2e33;
double M_dh = 1.45e+11*M_sol, M_b = 9.3e+9*M_sol, M_n = 1.e+10*M_sol;
double beta_1 = 0.4, beta_2 = 0.5, beta_3 = 0.1;
double h_1 = 0.325, h_2 = 0.090, h_3 = 0.125;
double a_G = 2.4;
double b_dh = 5.5, b_b = 0.25, b_n = 1.5;
 
double dphi_dx (double x, double y, double z) {
double res;
 
res = (M_dh*x*G)/pow(pow(a_G+beta_3*sqrt(z*z+h_3*h_3)+beta_2*sqrt(z*z+h_2*h_2)+beta_1*sqrt(z*z+h_1*h_1),2)+y*y+x*x+b_dh*b_dh, 3./2.) + (M_b*x*G)/pow(y*y+x*x+b_b*b_b, 3./2.)+ (M_n*x*G)/pow(y*y+x*x+b_n*b_n, 3./2.);
return res;
}
 
double dphi_dy (double x, double y, double z) {
double res;
 
res = (M_dh*y*G)/pow(pow(a_G+beta_3*sqrt(z*z+h_3*h_3)+beta_2*sqrt(z*z+h_2*h_2)+beta_1*sqrt(z*z+h_1*h_1),2)+y*y+x*x+b_dh*b_dh, 3./2.) + (M_b*y*G)/pow(y*y+x*x+b_b*b_b, 3./2.)+ (M_n*y*G)/pow(y*y+x*x+b_n*b_n, 3./2.);
return res;
}
 
double dphi_dz (double x, double y, double z) {
double res;
 
res = (M_dh*((beta_3*z)/sqrt(z*z+h_3*h_3)+(beta_2*z)/sqrt(z*z+h_2*h_2)+(beta_1*z)/sqrt(z*z+h_1*h_1))*(a_G+beta_3*sqrt(z*z+h_3*h_3)+beta_2*sqrt(z*z+h_2*h_2)+beta_1*sqrt(z*z+h_1*h_1))*G)/pow(pow(a_G+beta_3*sqrt(z*z+h_3*h_3)+beta_2*sqrt(z*z+h_2*h_2)+beta_1*sqrt(z*z+h_1*h_1),2)+y*y+x*x+b_dh*b_dh, 3./2.);
return res;
}
 
double dphi_dr (double x, double y, double z) {
double res;
double r = sqrt(x*x+y*y);
 
res = (M_dh*r*G)/pow(pow(a_G+beta_3*sqrt(z*z+h_3*h_3)+beta_2*sqrt(z*z+h_2*h_2)+beta_1*sqrt(z*z+h_1*h_1),2)+r*r+b_dh*b_dh, 3./2.) + (M_b*r*G)/pow(r*r+b_b*b_b, 3./2.) + (M_n*r*G)/pow(r*r+b_n*b_n, 3./2.);
return res;
}
 
 
void diff_equi (int n, double * input) {
double result [6];
result[3] = - dphi_dx(input[0], input[1], input[2]);
result[4] = - dphi_dy(input[0], input[1], input[2]);
result[5] = - dphi_dz(input[0], input[1], input[2]);
result[0] = input [3];
result[1] = input [4];
result[2] = input [5];
 
    for (int i = 0; i < n; i++)
        input[i] = result[i];
}
 
 
 
void star(double T,double* input, double x, double y, double z, double v_x, double v_y, double v_z ) {
double result [6];
 
result [0] = x;
result [1] = y;
result [2] = z;
result [3] = v_x;
result [4] = v_y;
result [5] = v_z;   
 
//cout<<"A neutron star is moving to "<<T<<endl;
 
Runge_Kutta (6, T, &input[0], &diff_equi);
 
x   = result [0];
y   = result [1];
z   = result [2];
v_x = result [3];
v_y = result [4];
v_z = result [5];
 
}
Но, увы, задача поменялась. Для моделирования такого движения мне нужно множество точек(где-то 1000)
Мне надо, чтобы программа выдавала координаты через равноотстоящие промежутки времени(каждую 1000 лет), причем выводила их все столбцами (столбец T, столбец x, ..)
Была бы очень признательна за помощь. Астрономию обожаю, а программирование не дается( Как я понимаю, надо внести изменения в main , но что-то у меня не получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.