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

Ошибка - Необработанное исключение. Что такое? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ записать в файл с новой строки http://www.cyberforum.ru/cpp-beginners/thread907984.html
p.sr_eval='\n'; p=p+i; fwrite(&(*p), sizeof(enrollee),1,f); хочу записывать каждый следующий объект структуры в файл с новой строки. добавляю в последний, на последнюю позицию массива структуры '\n'. увы не выходит. как поступить???
C++ Из JAVA в CPP. Небольшой момент. (+) Прошу помощи. В java не соображаю, но тем не менее все понимаю как переделать кроме некоторых моментов. Вот сам код: http://www.cyberforum.ru/java-j2se/thread207611.html Тут начинаются вопросы... Суть переделать код в cpp. import java.util.ArrayList; import java.util.List; public class Main { http://www.cyberforum.ru/cpp-beginners/thread907975.html
Считывание float из файла в шестнадцатиричном виде C++
Здравствуйте. Возникла такая проблема: есть файл с числами float в шестнадцатиричном виде. К примеру 41 A5 54 6D (это что-то около 23.2637484 (примерно)). Как мне его считать и преобразовать к нормальному виду, учитывая, что при обычном считывании каждый символ воспринимается как байт, а в данном случае один байт это два символа.
C++ Вектора и массивы
Дани вектора \bar{x} та \bar{y} з n координатами и квадратные матрицы А та В, розмером n*n. Найти вектор \bar{Z} =A* \bar{x} + B* \bar{y} .
C++ Проводник Windows http://www.cyberforum.ru/cpp-beginners/thread907953.html
Как из кода запустить проводник Windows для записи файла?
C++ Написать программу нахождения первого отрицательного элемента одномерного числового массива пропустил тему не могу сообразить... есле кто то может написать программу, помогите! Буду благодарен Написать программу нахождения первого отрицательного элемента одномерного числового массива. подробнее

Показать сообщение отдельно
timdream
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 20
20.06.2013, 19:48  [ТС]     Ошибка - Необработанное исключение. Что такое?
Цитата Сообщение от MrGluck Посмотреть сообщение
Я почти уверен, что вы изменили лишь функции, а массивы сами не трогали. Код где исправленный?
Вот. Эх.. Давно я был уверен, что программирование не мое

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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
// diplom.cpp: определяет точку входа для консольного приложения.
 
//Параллельное  решение задачи
/* 
Настройка среды программирования:
*/
#include "stdafx.h"
#include "stdio.h"
#include <mpi.h>
#include "stdlib.h"
#include "math.h"
#include <sys\timeb.h>
 
/***************************************************************
#define i_max 400
#define j_max 600
*/
//*
#define i_max 40
#define j_max 60
//*/
#define Main_Process 0 
MPI_Status Process_Status, stat;
FILE* fout;
//***************************************************************
//описание всех переменных, используемых в программе
//int H_1, L_1, H_2, L_2, H_3, L_3 , H_4, L_4, H_5, L_5;
double H_1, L_1, H_2, L_2, H_3, L_3 , H_4, L_4, H_5, L_5;
int N_1z, N_1r, N_2z, N_2r, N_3z, N_3r, N_4z, N_4r, N_5z, N_5r;
int i, j, n, n_max, KT_ice;
int  ProcRank, ProcNum;
int N_r, N_z, h_z, h_r, Nn_z, i_j;
double  send[2],recv[2];
double h_1z, h_1r, h_2z, h_2r, h_3z, h_3r, h_4z, h_4r, h_5z, h_5r;
double lamda, ro, c, a;                    //грунт
double lamda_4, ro_4, c_4, a_4;    //сталь
double lamda_5, ro_5, c_5, a_5;    //вода
double a_tau, a_tau4, a_tau5;          //а*tau
double tau, t_end, time1;
double t_1, t_2, t_3, t_4, t_5, t_6, t_7;
double T_0, T_c, tau_Tc, T_ckp;
double **T1_old, **T1_new;
double **T2_old, **T2_new;
double **T3_old, **T3_new;
double **T4_old, **T4_new;
double **T5_old, **T5_new;
double **T_old,  **T_new;
double **TN_new, **TN_old;
int NN_r, NN_z;
//нахождение температур по z по формуле 8 на итерации
 void Itern1_8 (int N_r, int N_z,double h_z, double **T_old, double **T_new, double a_tau);
//нахождение температур по r по формуле 9 на итерации
 void Itern1_9 (int N_r,int N_z, double h_r, double **T_old, double **T_new, double a_tau);
//Определение температур для 1-5 в начальный момент
 void T_matr (double **TN_new, double **TN_old, int N_1r, int N_1z, double T_0);
//засечка по времени
double realtime(void);
//вывод температур матриц  в  результирующий файл
 void writefile (int N_r,int N_z, double h_z,double h_r,double **T_new);
//***************************************************************
//Start
int main (int argc, char* argv[])
{
    t_1 = realtime(); //начало головной программы
    //Инициализация MPI и определение процессорной конфигурации
  MPI_Init(&argc, &argv);    
  MPI_Comm_size(MPI_COMM_WORLD,&ProcNum);
  MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);
    printf ("\n t_1=%f", t_1);
    printf ("\n ProcRank:%d", ProcRank);
    printf ("\n ProcNum:%d",ProcNum);
    t_2= MPI_Wtime();
//Вводим все необходимые величины для счета
lamda=1.13,   ro=1650,    c=2.09;              // для грунта с(Дж/кг*С),  ro(кг/м в 3), lamda(Вт/(м*С)) песок   
lamda_4=45.4, ro_4=7900,  c_4=0.462;             //для стали  
lamda_5=0.0010, ro_5=0.0010, c_5=1.0; //для воды
 
T_0=1.0, T_c=-10.0; T_ckp=-45, tau_Tc=-5;
 
 
H_1=1500, L_1=500,    N_1z=500, N_1r=300;
H_2=1200, L_2=400,    N_2z=400, N_2r=300;
H_3=900,  L_3=300,   N_3z=300, N_3r=300;
H_4=900,  L_4=300,   N_4z=300, N_4r=300;
H_5=600,  L_5=200,   N_5z=200, N_5r=200;
t_end=240; //240 часов=10 суток
//расчет шагов по сетке для 1-5
h_1z= H_1/N_1z, h_1r=L_1/N_1r;   //3мм, 1мм
h_2z=H_2/N_2z, h_2r=L_2/N_2r;   //3мм, 1мм
h_3z=H_3/N_3z, h_3r=L_3/N_3r;   //3мм, 1мм
h_4z=H_4/N_4z, h_4r=L_4/N_4r;   //3мм, 0.02мм
h_5z=H_5/N_5z, h_5r=L_5/N_5r;   //3мм, 0.4мм
 
KT_ice=0;     //количество температур воды <0 градусов;
//*
a=lamda/(ro*c);         //для 1-3
a_4=lamda_4/(ro_4*c_4); //для 4      .
a_5=lamda_5/(ro_5*c_5); //для 5
//*
a=0.492;                  //для 1-3
a_4=12.5;                 //для 4      .
a_5=0.398;                //для 5
//*/
n=0, time1=0; 
    
    tau=0.0005;       //30 минут
//Проверка схемы на устойчивость, выбор tau
if(tau>0.5*(h_4r*h_4r)/a_4)
    tau=0.5*(h_4r*h_4r)/a_4;
printf ("\n tau=%f", tau);
 
a_tau=a*tau; a_tau4=a_4*tau;   a_tau5=a_5*tau;
double T_c1=T_c;
int n_max=t_end/tau;     //количество итераций по времени
 
//Определение полей температур в начальный момент времени для 1-5
//для 1
T_matr (T1_new, T1_old, N_1r, N_1z, T_0);
for (i=0; i<=N_1r; i++)
{   T1_old[i][0]=T_c;
    T1_new[i][0]=T_c;
}
//для 2
T_matr (T2_new, T2_old, N_2r, N_2z, T_0);
//для 3
T_matr (T3_new, T3_old, N_3r, N_3z, T_0);
//для 4
T_matr (T4_new, T4_old, N_4r, N_4z, T_0);
//для 5
T_matr (T5_new, T5_old, N_5r, N_5z, T_0);
 
 MPI_Barrier (MPI_COMM_WORLD); 
  if(ProcRank!=0) 
{
//***************************************************************
//Основной итерационный цикл
do //начало цикла по T_c до T_cкр
 
{ do //начало цикла по n до n_max
//находим температуры для (n+1) шага
{ int K_fi ;
 if(ProcRank==1)    //для 1 по формуле 8
Itern1_8 (N_1r, N_1z, h_1z, T1_old, T1_new, a_tau);
 //переслыка температур с предпоследнего столбца текущей матрицы в 1-ый столбец следующей матрицы (для 1)
MPI_Send(T1_old[N_1r-1], N_1z , MPI_DOUBLE, 2,0, MPI_COMM_WORLD);
 
if(ProcRank==2)   // для 2 по формуле 9
Itern1_9 (N_2r, N_2z, h_2r, T2_old, T2_new, a_tau);
//переслыка температур с предпоследнего столбца текущей матрицы в 1-ый столбец следующей матрицы (для 1)
MPI_Send( T2_old[N_2r-1], N_2z, MPI_DOUBLE,3,0, MPI_COMM_WORLD);
MPI_Recv(T2_old[0], N_1z, MPI_DOUBLE, 1,0, MPI_COMM_WORLD, &stat);
K_fi =N_1z - N_2z;
for(j=0; j<N_2z; j++)
T2_old[0][j] =T2_old[0][j+K_fi];
 
if(ProcRank==3)    // для 3 по формуле 9
Itern1_9 (N_3r, N_3z, h_3r, T3_old, T3_new, a_tau);
MPI_Send(T3_old[N_3r-1], N_3z, MPI_DOUBLE, 4,0, MPI_COMM_WORLD);
MPI_Recv(T3_old[0], N_2z, MPI_DOUBLE,2,0, MPI_COMM_WORLD, &stat);
 K_fi =N_2z - N_3z;
for(j=0; j<N_3z; j++)
T3_old[0][j] =T3_old[0][j+K_fi];
 
 if(ProcRank==4)       //для 4 по формуле 9
Itern1_9 (N_4r, N_4z, h_4r, T4_old, T4_new, a_tau4); 
MPI_Send(T4_old[N_4r-1], N_4z, MPI_DOUBLE, 5,0, MPI_COMM_WORLD);
MPI_Recv(T4_old[0], N_3z, MPI_DOUBLE, 3,0, MPI_COMM_WORLD, &stat);
K_fi =N_3z - N_4z;
for(j=0; j<N_4z; j++)
T4_old[0][j] =T4_old[0][j+K_fi];
 
if(ProcRank==5)   //для 5 по формуле 9
Itern1_9 (N_5r, N_5z, h_5r, T5_old, T5_new, a_tau5);
MPI_Recv(T5_old[0], N_4z, MPI_DOUBLE,4,0, MPI_COMM_WORLD, &stat);
 K_fi =N_4z - N_5z;
for(j=0; j<N_5z; j++)
T5_old[0][j] =T5_old[0][j+K_fi];
 
n=n++, time1=time1+tau;
} //конец одной итерации по n
while (n< n_max); // конец цикла по n
 
printf ("\n Iteration count:%d", n);   // Печать количества итераций
//***************************************************************
// проверка температур воды. Если все температуры воды в 5 <0 градусов , то выход из  итерационного цикла по T_c1
if(ProcRank==5)
{for (i=1; i<N_5r; i++)
    {for (j=1; j<N_5z; j++)
        {if(T5_new[i][j]<0)
          KT_ice++;
        }
    }
int KT=(N_5r-1)*(N_5z-1);
printf ("\n KT_ice:%d", KT_ice);
if(KT==KT_ice)
break;     //выход из внешнего основного цикла по T_cкр
}
n=0, KT_ice=0, T_c1=T_c1+tau_Tc;
if(ProcRank==1)
for (i=0; i<=N_1r; i++)
    {T1_old[i][0]=T_c1;
      T1_new[i][0]=T_c1;
    }
  }  while (T_c1>T_ckp);
}
 
// Выход из итерационного цикла по T_cкр или по промерзанию воды в трубе (T_cкр= -40 // градусов)
printf ("\n ProcRank:%d", ProcRank);
    printf ("\n ProcNum:%d",ProcNum);
    t_2= MPI_Wtime();
 
 MPI_Barrier (MPI_COMM_WORLD);
 
printf ("\n KT_ice:%d", KT_ice );
t_6 = realtime();
 
printf ("\n Iteration count:%d", n);   // Печать количества итераций
 
printf ("\n time1=%f", time1);   // Печать времени
 
printf ("\n T_c1=%f", T_c1);   // Печать T_c1 - температура на поверхности грунта после счета
 
t_6=realtime();
printf ("\n t_6=%f", t_6);
t_7=t_6-t_1;
printf ("\n t_7=%f", t_7);   // Печать времени счета
 
t_5= MPI_Wtime();
 
MPI_Barrier (MPI_COMM_WORLD);
// Вывод матриц в результирующий файл
if(ProcRank==1) 
fout=fopen("M_T1_new", "w+");
writefile (N_1r, N_1z, h_1z, h_1r,T1_new);
printf ("\n ProcRank:%d", ProcRank);
 
if(ProcRank==2) 
fout=fopen("M_T2_new", "w+");
writefile (N_2r, N_2z,h_2z, h_2r, T2_new);
printf ("\n ProcRank:%d", ProcRank);
 
if(ProcRank==3) 
fout=fopen("M_T3_new", "w+");
writefile (N_3r, N_3z,h_3z, h_3r, T3_new);
printf ("\n ProcRank:%d", ProcRank);
 
if(ProcRank==4) 
fout=fopen("M_T4_new", "w+");
writefile (N_4r, N_4z, h_4z, h_4r,  T4_new);
printf ("\n ProcRank:%d", ProcRank);
 
if(ProcRank==5) 
fout=fopen("M_T5_new", "w+");
writefile (N_5r, N_5z, h_5z, h_5r,  T5_new);
printf ("\n ProcRank:%d", ProcRank);
 
t_4= MPI_Wtime();
MPI_Finalize();
//system ("Pause");
return 0;  //Finish
}
 
//Подпрограмма нахождения температур на каждой итерации по формуле 8 по z, только //для 1
void Itern1_8(int N_r,int N_z, double h_z, double **T_old,double**T_new, double a_tau) 
 
{for (i=0; i<N_r; i++)
    for (j=1; j<N_z; j++)
 
    T_new[i][j]=T_old[i][j]+a_tau/(h_z*h_z)*(T_old[i][j+1]- 2*T_old[i][j] +T_old[i][j-1]);
 
//Пересылка температур из T_new в T_old
for (i=0; i<N_r; i++)
    for(j=0; j<N_z; j++)
            T_old[i][j] =T_new[i][j];
         
return; //выход в int main
}
//Подпрограмма нахождения температур на каждой итерации по формуле 9 по r для 4-5
void Itern1_9 (int N_r, int N_z,  double h_r, double **T_old,double **T_new, double a_tau)
{ 
    for(j=0; j<N_z; j++)
 {     for (i=1; i<N_r; i++)
       
 T_new[i][j] = T_old[i][j]+a_tau/(i*h_r*h_r)*
 (0.5*(2*i+1)*T_old[i+1][j]-2*i*T_old[i][j]+0.5*(2*i-1)*T_old[i-1][j]);
}
for (i=0; i<N_r; i++)
    for(j=0; j<N_z; j++)
        T_old[i][j] = T_new[i][j];
 
return; //выход в int main
}
//подпрограмма определение температур для 1-5 в начальный момент
void T_matr (double **TN_new, double **TN_old, int NN_r, int NN_z, double T_0)
{for (i=0; i<=NN_r; i++)
    for(j=0; j<=NN_z; j++)
        {TN_old[i][j]=T_0;
          TN_new[i][j]=T_0;
         }
return ; //выход в int main
}
//подпрограмма засечки по времени 
double realtime ()
{
    struct _timeb tp;
_ftime64_s(&tp);
//_ftime(&tp);
return((double)(tp.time)*1000+(double)(tp.millitm));
}
//Подпрограмма вывода в результирующий файл
void writefile (int N_r, int N_z, double h_z,double h_r, double **T_new)
{
    for(j=0; j<N_z; j++)
    {
        for(i=0; i<N_r-1; i++)
        {
            fprintf(fout, "%11f", T_new[i][j]);
    //  printf ("\n T1_new=%f",(*T_new)[i][j]);
        }
        fprintf(fout, "%11f\n", T_new[i][N_r]);
    }
    fprintf(fout, "%d,  %d , %f, %f", N_r, N_z, h_r, h_z);
fclose (fout);
return; //выход в int main
}
 
Текущее время: 01:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru