Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Почему на выходе такие результаты?


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

Код

#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;
}

Автор: feodorv 14.12.2016, 15:39
Как-то так, наверное:
Цитата(razervip @  14.12.2016,  03:55 Найти цитируемый пост)
    cout<<"Функция 1 равна "<<f1(аргументы)<<".\n";
    cout<<"Длина трубы равна "<<MM(аргументы)<<".\n";

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

Автор: razervip 14.12.2016, 21:22
Цитата(feodorv @ 14.12.2016,  15:39)
Как-то так, наверное:
Цитата(razervip @  14.12.2016,  03:55 Найти цитируемый пост)
    cout<<"Функция 1 равна "<<f1(аргументы)<<".\n";
    cout<<"Длина трубы равна "<<MM(аргументы)<<".\n";

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

С Tt не заморачивайся.) С выводом f1 и MM я вот никак разобраться не могу, про аргументы потом допетрило.)
Почему вот на выходе опять такие результаты?
user posted image

Автор: feodorv 15.12.2016, 02:42
А чему равны k1, k2, k3 в новой версии программы?

Автор: razervip 16.12.2016, 00:43
Цитата(feodorv @ 15.12.2016,  02:42)
А чему равны k1, k2, k3 в новой версии программы?

Ничему не равны. Их необходимо рассчитать по тем же формулам, что и в старой версии кода. smile

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

Гм.  smile 
В старой версии кода хоть какая-то попытка рассчитать k1, k2, k3 делалась в функции MM(), и то в цикле. Но согласно скрину, в новой версии Вы сначала вызываете f1(), f2(), f3(), передавая им неопределённые (явным образом неинициализированные) значения переменных k1, k2, k3, и хотите чтобы всё волшебным образом рассчиталось. Так не получится)))

Автор: Romikgy 16.12.2016, 10:20
что за данные T & L ?

Автор: lovelin1987 18.12.2016, 05:58
Модератор: Сообщение скрыто.

Автор: Olej 18.12.2016, 16:56
А здесь уродов типа lovelin1987 никто не отслеживает? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)