Почему на выходе такие результаты?

 
0
 
C++
ava
razervip | 14.12.2016, 03:55
Подскажите, пожалуйста, почему на выходе получаются такие результаты.. :dash1


#include <iostream>
#include <cmath>
using namespace std;

double C1 = 0.1, C2 = 0.2, C3 = 0, T1 = 650, A1 = 8000, A2 = 4000, A3 = 300000, E1 = 72600, E2 = 77000, E3 = 87000, Ro = 1.4, R = 8.31, u = 0.1, l;

double f1(double C1, double C2, double C3, double k1, double k2, double k3)
    {
        return (-2 * k1 * C1 * C2 - k2 * C1 * C2)/u;
    }
double f2(double C1, double C2, double C3, double k1, double k2, double k3)
    {
        return (-9 * k1 * C1 * C2 - 12 * k2 * C1 * C2 - 9 * k3 * C3 * C2)/u;
    }
double f3(double C1, double C2, double C3, double k1, double k2, double k3)
    {
        return (2 * k1 * C1 * C2 - k3 * C3 * C2)/u;
    }

double MM(double L, double *T)
    {
        double h = 0.001, k1, k2, k3, C10, C20, C30, T0, Tt;
        
        for (l = 0; l <= L && C3 * 1.48 / Ro < 4.0; l+= h)
        {
            C10 = C1;
            C20 = C2;
            C30 = C3;
            T0 = T1;
            k1 = A1 * exp(-E1 / (R * T0));
            k2 = A2 * exp(-E2 / (R * T0));
            k3 = A3 * exp(-E3 / (R * T0));
            C1 = C10 + h * f1(C10, C20, C30, k1, k2, k3);
            C2 = C20 + h * f2(C10, C20, C30, k1, k2, k3);
            C3 = C30 + h * f3(C10, C20, C30, k1, k2, k3);
            if (l >= 0) Tt = T[0];
            if (l >= L / 4) Tt = T[1];
            if (l >= L / 2) Tt = T[2];
            if (l >= 3 * L / 4) Tt = T[3];
        }
        
        return l;
    }
    
int main()
{
    setlocale(LC_ALL, "Russian");
    
    cout<<"Функция 1 равна "<<f1<<".\n";
    cout<<"Длина трубы равна "<<l<<".\n";
    
    system("pause");
    return 0;
}
Kommentare (8)
ava
feodorv | 14.12.2016, 15:39 #
Как-то так, наверное:
Цитата (razervip @  14.12.2016,  03:55 findReferencedText)
    cout<<"Функция 1 равна "<<f1(аргументы)<<".\n";
  cout<<"Длина трубы равна "<<MM(аргументы)<<".\n";

Что там зависит от тщательно вычисляемого значения Tt в MM(), я так и не понял...
ava
razervip | 14.12.2016, 21:22 #
Цитата (feodorv @ 14.12.2016,  15:39)
Как-то так, наверное:

Цитата (razervip @  14.12.2016,  03:55 findReferencedText)
    cout<<"Функция 1 равна "<<f1(аргументы)<<".\n";
  cout<<"Длина трубы равна "<<MM(аргументы)<<".\n";


Что там зависит от тщательно вычисляемого значения Tt в MM(), я так и не понял...

С Tt не заморачивайся.) С выводом f1 и MM я вот никак разобраться не могу, про аргументы потом допетрило.)
Почему вот на выходе опять такие результаты?
user posted image
ava
feodorv | 15.12.2016, 02:42 #
А чему равны k1, k2, k3 в новой версии программы?
ava
razervip | 16.12.2016, 00:43 #
Цитата (feodorv @ 15.12.2016,  02:42)
А чему равны k1, k2, k3 в новой версии программы?

Ничему не равны. Их необходимо рассчитать по тем же формулам, что и в старой версии кода. :)
ava
feodorv | 16.12.2016, 05:34 #
Цитата (razervip @  16.12.2016,  00:43 findReferencedText)
Ничему не равны. Их необходимо рассчитать по тем же формулам, что и в старой версии кода.

Гм.  :girl_wacko
В старой версии кода хоть какая-то попытка рассчитать k1, k2, k3 делалась в функции MM(), и то в цикле. Но согласно скрину, в новой версии Вы сначала вызываете f1(), f2(), f3(), передавая им неопределённые (явным образом неинициализированные) значения переменных k1, k2, k3, и хотите чтобы всё волшебным образом рассчиталось. Так не получится)))
ava
Romikgy | 16.12.2016, 10:20 #
что за данные T & L ?
ava
Olej | 18.12.2016, 16:56 #
А здесь уродов типа lovelin1987 никто не отслеживает? :rtfm 
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden