Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

carpio

Algoritmo c++ (iniciante)

Recommended Posts

Olá p todos! Alguém pode me ajudar? Estou criando um algoritmo que é uma sequência de equações, que são alimentadas com dados de entrada.

 

Minha dúvida é que na parte chamada CORRELAÇÂO, eu tenho que gerar 7 "k"s. A fórmula deve pegar o primeiro Pci, Tci e Afi, calcular e depois gerar o segundo e aí vai... Gerando 7 "k"s... ESTIMATIVA K, CORRELAÇÃO WILSON.

 

Depois de gerar estes 7 "k"s eles vão servir como base p a fórmula seguinte, que é um somatório (double mrr).

 

Alguém sabe como devo escrever esta fórmula? Ou seja a fórmula do somatório pegar cada "k" gerado e somá-lo? E como deveria jogá-lo no somatório seguinte (que eu chamo de mrr, acho q o somatório do mrr tá certo, a maneira que coloquei o K q ñ tá)

 

OBRIGADO!!!!

 

 

 

//Equação de estado

 

#include <iostream>

#include <cmath>

using namespace std;

int main ()

{

//PROPRIEDADE DOS COMPONENTES, dados de entrada

 

double Mw[7] = {28.013, 16.043, 30.07, 44.097, 58.124, 72.151, 86.177};

 

double Tc[7] = {227.16, 343.08, 549.72, 665.64, 765.36, 845.28, 913.68}; //Rankine

 

double Pc[7] = {492.45, 667.38, 708.54, 615.93, 552.72, 489.51, 438.86}; //Psi

 

double Af[7] = {0.040, 0.008, 0.098, 0.152, 0.193, 0.251, 0.3013};

 

double você[7] = {89.5, 99, 148, 203, 255, 304, 371};

 

double Bin1[7] = {0, 0.018, 0.039, 0.046, 0.047, 0.048, 0};

 

double Bin2[7] = {0.018, 0, 0.005, 0.01, 0.0145, 0.0182, 0};

 

double Bin3[7] = {0.039, 0.005, 0.00, 0.0017, 0.0032, 0.0048, 0};

 

double Bin4[7] = {0.046, 0.01, 0.0017, 0, 0.0012, 0.024, 0};

 

double Bin5[7] = {0.047, 0.0145, 0.0032, 0.0012, 0, 0.0008, 0};

 

double Bin6[7] = {0.048, 0.0182, 0.0048, 0.0024, 0.0008, 0, 0};

 

 

// FRACAO MOLAR (z), PRESSÃO e TEMPERATURA, mais dados de entrada

 

double z[7] = {0.020, 0.8866, 0.0492, 0.0246, 0.0098, 0.0098, 0.00};

double P = 1000; //psi

double T = 405; // rankine

 

// ESTIMATIVA K, CORRELAÇÃO WILSON, preciso gerar 7 "k" que serão usados na fórmula seguinte, o que consigo é só gerar o último K dos 7?????

 

 

double k = 0;

for (int i = 0; i < 7; i++)

{

k = (Pc/P) * exp (5.37 * (1 + Af) * (1-Tc/T));

}

 

// esta fórmula deve pegar cada valor de K e gerar um somatório que eu chamo de mrr

 

double mrr = 0;

 

 

while (i < 7)

{

mrr += z * (k - 1) / (1 + nv * (k - 1));

i++;

}

 

 

//aqui tento visualizar os "k"

 

for(int n = 0; n != 7; n++)

{

cout << k << endl;

}

getchar();

 

 

//cout << mrr << endl;

 

char saida; cin >> saida;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carpio, pelo que eu entendi do erro você quer que sejam gerados 7 'k's diferentes que serão usados na formula. O erro acontece por que você só consegue gerar o último 'k'?

 

Bem... Seu codigo k é uma variavel double, se você deseja gerar 7 deles sugeriria transforma-la num vetor k[7] ( sem a piadinha que o fonema gera :P ). O novo trecho de codigo ficaria assim:

 

 

// ESTIMATIVA K, CORRELAÇÃO WILSON, preciso gerar 7 "k" que serão usados na fórmula seguinte, o que consigo é só gerar o último K dos 7


double k[7] = {0,0,0,0,0,0,0};
for (int i = 0; i < 7; i++) 
{
   k[i]  = (Pc[i]/P) *  exp (5.37 * (1 + Af[i]) * (1-Tc[i]/T));
   }

// MÉTODO ITERATIVO DE RACHFORD-RICE, esta fórmula deve pegar cada valor de K e gerar um somatório que eu chamo de mrr

double mrr = 0;


while (i < 7) 
{
   mrr += z[i] * (k[i] - 1) / (1 + nv * (k[i] - 1));
   i++; 
}


//aqui tento visualizar os "k"

for(int n = 0; n != 7; n++)
       {
               cout << k[n] << endl;
       }
       getchar();


//cout << mrr << endl;

char saida; cin >> saida;    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi AcquaBlue obrigado pela resposta, agora rodou direitinho. Abusando um pouco da sua boa vontade e de todos. Ainda neste algoritmo estou esbarrando num comando IF.

 

Na parte que chamo de ITERAÇÃO (em vermelho) eu não consigo fazer o programa obedecer meu IF. Ele tem que parar de calcular a variável "nv" assim que a condição do IF for alcançada. Pelo meu excel-gabarito ele alcança na segunda ou terceira rodada, só que ele acaba rodando as 20 que eu "setei".

 

obs: Tá um pouco diferente do primeiro, pq eu dei uma perfumada.

 

#include <iostream>

#include <cmath>

using namespace std;

int main ()

{

//PROPRIEDADE DOS COMPONENTES

 

double Mw[7] = {28.013, 16.043, 30.07, 44.097, 58.124, 72.151, 86.177};

double Tc[7] = {126.2, 190.6, 305.4, 369.8, 425.2, 469.6, 507.6}; //Kelvin

double Pc[7] = {33.5, 45.4, 48.2, 41.9, 37.6, 33.3, 29.5442882}; //Atm

double Af[7] = {0.040, 0.008, 0.098, 0.152, 0.193, 0.251, 0.3013};

double você[7] = {89.5, 99, 148, 203, 255, 304, 371};

double Bin1[7] = {0, 0.018, 0.039, 0.046, 0.047, 0.048, 0};

double Bin2[7] = {0.018, 0, 0.005, 0.01, 0.0145, 0.0182, 0};

double Bin3[7] = {0.039, 0.005, 0.00, 0.0017, 0.0032, 0.0048, 0};

double Bin4[7] = {0.046, 0.01, 0.0017, 0, 0.0012, 0.024, 0};

double Bin5[7] = {0.047, 0.0145, 0.0032, 0.0012, 0, 0.0008, 0};

double Bin6[7] = {0.048, 0.0182, 0.0048, 0.0024, 0.0008, 0, 0};

 

// FRACAO MOLAR (z), PRESSÃO e TEMPERATURA

 

double z[7] = {0.020, 0.8866, 0.0492, 0.0246, 0.0098, 0.0098, 0.00};

double P = 68.045958; //atm

double T = 224.81667; // kelvin

 

// ESTIMATIVA K, CORRELAÇÃO WILSON

 

double k[7] = {0,0,0,0,0,0,0};

for (int i = 0; i < 7; i++)

{

k = (Pc/P) * exp (5.37 * (1 + Af) * (1-Tc/T));

}

 

 

double mrr = 0;

double mrr1 = 0;

double dmrr = 0;

double nv = 1;

double delta = -0.01;

int i = 0;

double itera = 0;

 

while (itera < 20)

 

{

while (i < 7) //não pode ter ";" no while

{

mrr += z * (k - 1) / (1 + nv * (k - 1));

mrr1 += z * (k - 1) / (1 + (nv + delta) * (k - 1));

i++; //cuidado com esse comando

}

 

// ITERAÇÃO

double nv0 = 1;

 

dmrr = (mrr1 - mrr) / delta;

nv0 = nv;

nv = nv0 - mrr/dmrr;

 

if (nv0-nv < 0.0107) break; // Não consigo fazer este comando funcionar

itera = itera + 1;

}

 

//Resultados

for(int n = 0; n != 7; n++)

{

 

cout << k[n] << endl;

}

cout << "mrr = " << mrr;

cout << "\n" ;

cout << "mrr1 = " << mrr1;

cout << "\n" ;

cout << "dmrr = " << dmrr;

cout << "\n" ;

cout << "nv = " << nv;

cout << "\n" ;

cout << "iteracoes = " << itera;

cout << "\n" ;

char saida; cin >> saida;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.