Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2017, 07:57   #1
Изгой
Новичок
Джуниор
 
Регистрация: 04.10.2017
Сообщений: 2
По умолчанию Не работает прога

Доброе утро, написал программу по двумерной задаче теплопроводности на делфи, но мне сказали перенести ее на С++ ( ни разу в ней не работал), переписал ее, а она выдает ошибки. Не могли бы подсказать в чем проблема.

Код:
#include "stdafx.h"
#include <iostream>
//#include "Office.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int i, k, M=10000, P=10, P1=5, N=10, N1=10;
	float dt, a_z=0.000001, a_r=0.00001, dx, dr, T, T_0, S, T_l, T_r, T_s, R_0=0.108, q, L=1, R_s=1, Time;
	
    
float **temp_old=new float*[N+1][P+1];
float **temp_new=new float*[N+1][P+1];
float **alpha=new float*[N+1][P+1];
float **betta=new float*[N+1][P+1];
float **F=new float*[N+1][P+1];
float **V=new float*[N+1][P+1];
float **A=new float*[N+1][P+1];
float **B=new float*[N+1][P+1];
float **C=new float*[N+1][P+1];
float *r=new float[P+1];
float *z=new float[N+1];


dt=Time/M;
dt=dt/2; //для метода перменных направлений

   //начальные условия
for (int i=0; i<=N; i++)
   for (int k=0; k<=P; k++)
   {
     if (k<P1&&i<N1) {
		 temp_old[i][k]=1;
	 }
     else {
		 temp_old[i][k]=0;
	 }
   }

//граничные условия
for (int k=0; k<=P; k++) 
temp_new[N][k]=0;

for (int i=0; i<=N; i++)
temp_new[i][P]=0;

//сетка
     r[0]=R_0;
     q=pow(R_s/R_0, 1/P);
    for (int k=0; k<=P; k++)
	 {
     r[k]=q*r[k-1];
	 }

     for (int i=0; i<=N; i++)
	 {
     z[i]=i*L/N;
	 }

    

 for ( int j=1; j<=M; j++)
 {

    for (int i=0; i<=(N-1); i++)    //по r
	{
       alpha[i][1]=2*a_r*dt*0.5*(r[1]+r[0]) / (2*a_r*dt*0.5*(r[1]+r[0])+pow(0.5*(r[1]+r[0]),2)-pow(r[0],2));
       betta[i][1]=(pow(0.5*(r[1]+r[0]),2)-pow(r[0], 2))*(r[1]-r[0])/((2*a_r*dt*0.5*(r[1]+r[0])+pow(0.5*(r[1]+r[0]), 2)-pow(r[0], 2)))*temp_old[i][0];

       for (int k=1; k<=(P-1); k++)
	   {
        V[i][k]= 0.25*(pow(r[k]+r[k+1],2)-pow(r[k]+r[k-1],2));
        A[i][k]=a_r*dt*(r[k]+r[k-1])/(r[k]-r[k-1])/V[i][k];
        B[i][k]=a_r*dt*(r[k+1]+r[k])/(r[k+1]-r[k])/V[i][k];
        C[i][k]=-(A[i][k]+B[i][k]+1);
        F[i][k]=-temp_old[i][k];

        alpha[i][k+1]=-B[i][k]/(A[i][k]*alpha[i][k]+C[i][k]);
        betta[i][k+1]=(F[i][k]-A[i][k]*betta[i][k])/(A[i][k]*alpha[i][k]+C[i][k]);
	   }

       for (int k=(P-1); k>=0; k--) 
	   {
        temp_new[i][k]=temp_new[i][k+1]*alpha[i][k+1]+betta[i][k+1];
	   }
	}

      for (int i=0; i<=N; i++) 
      for (int k=0;  k<=P; k++)
	  {
       temp_old[i][k]=temp_new[i][k];
       A[i][k]=0;    C[i][k]=0;   B[i][k]=0;   F[i][k]=0;
       alpha[i][k]=0; betta[i][k]=0;
	  }

    for (int k=0; k<=(P-1); k++)    //по z
	{
    
       alpha[1][k]=a_z*dt/(a_z*dt+(0.5*(z[1]+z[0])-z[0])*(z[1]-z[0]));
       betta[1][k]=(0.5*(z[1]+z[0])-z[0])*(z[1]-z[0])/(a_z*dt+(0.5*(z[1]+z[0])-z[0])*(z[1]-z[0]))*temp_old[0][k];
           
       for (int i=1; i<=(N-1); i++)
	   {
        A[i][k]=2*a_z*dt/(z[i]-z[i-1])/(z[i+1]-z[i-1]);
        B[i][k]=2*a_z*dt/(z[i+1]-z[i])/(z[i+1]-z[i-1]);
        C[i][k]=-(A[i][k]+B[i][k]+1);
        F[i][k]=-temp_old[i][k];

        alpha[i+1][k]=-B[i][k]/(A[i][k]*alpha[i][k]+C[i][k]);
        betta[i+1][k]=(F[i][k]-A[i][k]*betta[i][k])/(A[i][k]*alpha[i][k]+C[i][k]);
	   }

       for (int i=(N-1); i>=0; i--) 
	   {
       temp_new[i][k]=temp_new[i+1][k]*alpha[i+1][k]+betta[i+1][k];
	}
 }

      for (int i=0; i<=N; i++) 
      for (int k=0;  k<=P; k++)
	  {
       temp_old[i][k]=temp_new[i][k];
       A[i][k]=0;    C[i][k]=0;   B[i][k]=0;   F[i][k]=0;
       alpha[i][k]=0; betta[i][k]=0;
	  }

 } 


	delete [] temp_old;
	delete [] temp_new;
	delete [] alpha;
	delete [] betta;
	delete [] F;
	delete [] V;
	delete [] A;
	delete [] B;
	delete [] C;
	delete [] r;
	delete [] z;
	
	
	
	system("pause");
	return 0;
}

Последний раз редактировалось Аватар; 04.10.2017 в 08:16.
Изгой вне форума Ответить с цитированием
Старый 04.10.2017, 08:08   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Классика:
Код:
for (int i=0; i<=N; i++)
раз вы начали отсчет с 0 (а не с 1, как в дельфи), то

Код:
for (int i=0; i<N; i++)
Такое тоже бред

Код:

float **temp_old=new float*[N+1][P+1];
float **temp_new=new float*[N+1][P+1];
В С нету двумерных массивов. Такая запись с двойными скобочками означает "массив УКАЗАТЕЛЕЙ на УКАЗАТЕЛИ", а не то что вы хотели (кстати N+1 вы видимо писали, потому что циклы у вас <=N, хотя хз...мож в задаче так нада).

Т.е.

Код:

float **temp_old=new float*[N];
for (int i = 0; i < N; ++i) temp_old[i] = new float[P];
Удалять тоже иначе такое:

Код:
for (int i = 0; i < N; ++i) delete []temp_old[i];
delete [] temp_old;
А вообще с таким морочится...нафиг, сделать 1 мерный массив, типа так:
Код:
float *temp_old=new float[N * P];

for (int i = 0; i < N; ++i)
{
     for (int j = 0; j < P; j++)
     {
          *(temp_old + i * P + j) = 0; //это [i][j]
     }
}
delete [] temp_old;

Последний раз редактировалось alexzk; 04.10.2017 в 08:24.
alexzk вне форума Ответить с цитированием
Старый 04.10.2017, 08:08   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Оформите код.
Напишите какие ошибки.
Разберитесь с массивами, то они у вас от 0, то от 1.
p51x вне форума Ответить с цитированием
Старый 04.10.2017, 15:24   #4
Изгой
Новичок
Джуниор
 
Регистрация: 04.10.2017
Сообщений: 2
По умолчанию

Спасибо за помощь. Сделал на манер

float **temp_old=new float*[N];
for (int i = 0; i < N; ++i) temp_old[i] = new float[P];

и все получилось
Изгой вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прога Alexander1205 Win Api 2 02.11.2011 23:23
Прога на Си kostan Помощь студентам 0 30.09.2011 21:40
Прога Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 07.11.2009 20:50
прога в си++ sfinks_murka Общие вопросы C/C++ 3 06.10.2009 13:15
прога и чюжая прога benjaminfran Общие вопросы Delphi 5 28.03.2008 15:07