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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2013, 21:59   #1
Ялочка
Новичок
Джуниор
 
Регистрация: 23.04.2013
Сообщений: 2
По умолчанию Программа на с++

Здравствуйте! Подскажите пожалуйста, почему по итогу в текстовый файл не сохраняются результаты? Программа ошибок не выдает
Код:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int i,k,p;
int Ni=150,Nk=100,L=50000;
float hx=0.05,hz=0.05;
float tau=0.001 ;
double lam[152][52]; // описание переменных
float q=0.045;
int Q=0;
int T0=4;
FILE *f1,*data;
main()
{
double alf[51],bet[51];
double  A[51],B[51],C[51],W[51];
double q1[151];
double T[151][51],Tt[151][51],T1[151][51];

double alf1[151],bet1[151];
double A1[151],B1[151],C1[151],W1[151];

f1=fopen("c:\\temp.txt","w");
data=fopen("c:\\plotn.txt","w");
   for(k=0;k<=51;k++)
   {
   	for(i=0;i<=151;i++)
	  {//задание матрицы лямбда
	    	      
	   if(i>74 && i<=134)
	   {
		   if(k>=7 && k<11)
			   lam[i][k]=1.5;}
		   else lam[i][k]=2.0;
  }
	}
  for (k=0; k<=51; k++)
	{
		for(i=0; i<=151;i++)
		{
		if(i>61 && i<=69)
		{
			if(k>=8 && k<23)
			lam[i][k]=3.4;}
else lam[i][k]=2.0;
		}
	}
     for(k=0;k<=51;k++)
   {
   	for(i=0;i<=151;i++)
	  {if(i>15 && i<=55)
	      {
		 if(k>=5 && k<11)
			 lam[i][k]=1.2;}
		 else lam[i][k]=2.0; }
	}
   for (k=0;k<=50;k++)
	  {

        for(i=0;i<=150;i++)//задание начального распределения температуры
		{
        		 T[i][k]=(q*hz*k*L)/(2*lam[0][k])+ T0;
		 T1[i][k]=(q*hz*k*L)/(2*lam[0][k])+T0;
		 Tt[i][k]=(q*hz*k*L)/(2*lam[0][k])+T0;
	    }
      }

  
   for(p=1;p<=1000;p++)
   {     //начало цикла по времени
     for(i=1;i<=149;i++)//начало прогонки по вертикали
	 {
       for(k=1;k<=50;k++)
       {     //вычисление коэф-тов А,В,С,W
        A[k]=((2*lam[i][k+1]*lam[i][k])/((hz*hz)*(lam[i][k+1]+lam[i][k])));
        B[k]=(1/(0.5*tau))+(((2*lam[i][k+1]*lam[i][k])/(lam[i][k+1]+lam[i][k])) +  ((2*lam[i][k]*lam[i][k-1])/(lam[i][k]+lam[i][k-1])))/(hz*hz);
        C[k]=(2*lam[i][k]*lam[i][k-1])/((lam[i][k]+lam[i][k-1])*(hz*hz));
	    W[k]=(T[i][k]/(0.5*tau))+Q+(((((2*lam[i+1][k]*lam[i][k])*(T[i+1][k]-T[i][k]))/(lam[i+1][k]+lam[i][k])) - (((2*lam[i][k]*lam[i-1][k])*(T[i][k]-T[i-1][k]))/(lam[i][k]+lam[i-1][k]))) /(hx*hx));
	   }
       
       alf[49]=0.9999; //задали граничные альфа и бета
	   bet[49]=(hz*q*L)/(2*lam[i][50]);
       for(k=49;k>=1;k--)
	   {    //вычисление коэф-тов альфа и бета снизу вверх
	    alf[k-1]=(C[k]/(B[k]-(A[k]*alf[k])));
	    bet[k-1]=((W[k]+(A[k]*bet[k]))/(B[k]-(A[k]*alf[k])));
	   }

       for(k=1;k<=50;k++)
	   {    //вычисление промежуточной температуры сверху вниз
        Tt[i][k]=(alf[k-1]*Tt[i][k-1])+bet[k-1];
	   } 
	 } //конец прогонки по вертикали
    
   for(k=1;k<=49;k++)
    {//начало прогонки по горизонтали
     alf1[149]=0.999999; 
     bet1[149]=0.0;

     for(i=1;i<=150;i++)
      {     //вычисление коэф-тов A1,B1,C1,W1
       A1[i]=((2*lam[i+1][k]*lam[i][k])/((hx*hx)*(lam[i+1][k]+lam[i][k])));
       B1[i]=(1/(0.5*tau))+(((2*lam[i+1][k]*lam[i][k])/(lam[i+1][k]+lam[i][k])) +  ((2*lam[i][k]*lam[i-1][k])/(lam[i][k]+lam[i-1][k])))/(hx*hx);
       C1[i]=(2*lam[i][k]*lam[i-1][k])/((lam[i][k]+lam[i-1][k])*(hx*hx));
       W1[i]=(Tt[i][k]/(0.5*tau))+Q+(((((2*lam[i][k+1]*lam[i][k])*(Tt[i][k+1]-Tt[i][k]))/(lam[i][k+1]+lam[i][k])) - (((2*lam[i][k]*lam[i][k-1])*(Tt[i][k]-Tt[i][k-1]))/(lam[i][k]+lam[i][k-1]))) /(hz*hz));
      }
      
     for(i=149;i>=1;i--)
	 {    //вычисление коэф-тов альфа1 и бета1 слева направо
      alf1[i-1]=(C1[i]/(B1[i]-A1[i]*alf1[i]));
      bet1[i-1]=((W1[i]+A1[i]*bet1[i])/((B1[i])-(A1[i]*alf1[i])));
     }
     for(i=1;i<=150;i++)
     {  //вычисление искомой температуры справа налево
      T1[i][k]=(alf1[i-1]*T1[i-1][k])+bet1[i-1];
     }
   } //конец прогонки по горизонтали
     
    for(i=1;i<=149;i++)
	{
		T1[i][50]=Tt[i][50];
	}

   for(i=1;i<=150;i++)
   {
	   for(k=1;k<=50;k++)
	   {//переобозначение для возврата на начало
		   T[i][k]=T1[i][k];
		   Tt[i][k]=T1[i][k];
	   }
   }
   }//конец цикла по времени
   for(k=0;k<=50;k++)
	{
	   for(i=0;i<=150;i++)
	   { 
//вывод конечной матрицы температур
  fprintf(f1,"%f\n",T1[i][k]);
	   }
	   //fprintf(f1,"\n");
   }

   for(i=0;i<=150;i++)
    {//вычисление плотности потока между нулевым и первым уровнями
     q1[i]=((T1[i][1]-T1[i][0])*2)/(hz*L);
     fprintf(data,"%.10f\n",q1[i]);
    }
   fclose(f1);fclose(data); return 0;}

Последний раз редактировалось Stilet; 23.04.2013 в 22:13.
Ялочка вне форума Ответить с цитированием
Старый 23.04.2013, 22:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладчиком по программе конечно не проходила?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.04.2013, 22:50   #3
Ялочка
Новичок
Джуниор
 
Регистрация: 23.04.2013
Сообщений: 2
По умолчанию

Stilet, ну обычно если ошибки есть в программе, то си их выдает при компиляции
Ялочка вне форума Ответить с цитированием
Старый 23.04.2013, 23:04   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,341
По умолчанию

Ялочка, синтаксические и лексические, но не логические
(не смотрел сам код - даже страшно взглянуть на такую простыню)

Во-первых, у меня результаты вывело (в файлы, лежащие в одной папке с ехе).
У программы, наверное, нет прав писать в корень диска.

Во-вторых, это не с++, а с.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 23.04.2013 в 23:17.
BDA вне форума Ответить с цитированием
Старый 23.04.2013, 23:04   #5
cleac
Пользователь
 
Аватар для cleac
 
Регистрация: 19.04.2013
Сообщений: 27
По умолчанию

Речь о логических ошибках. Оно, например, может просто не заходить в цикл (да, бывает и такое! ).
All rights reserved©.
cleac вне форума Ответить с цитированием
Старый 24.04.2013, 07:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ну обычно
Ну обычно и водород не гелий )
Жми F10 или как там у тебя в редакторе клавиша для пошаговки, и топай до того места где программа падает или не туда выводит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Pascal в Lazarus и программа для одномерного массива целых чисел Yegorka Lazarus, Free Pascal, CodeTyphon 13 20.12.2012 18:02
Программа как программа. вопрос leonidsm Общие вопросы C/C++ 5 02.10.2012 21:30
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09