Ir para conteúdo
Fórum Script Brasil

JuliaAlvesGuirado

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre JuliaAlvesGuirado

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

JuliaAlvesGuirado's Achievements

0

Reputação

  1. Olá, preciso de ajuda com uma atividade de linguagem c. O programa precisa ler o valor de certo bem, o número de prestações no qual foi pago, e o valor das prestações. A partir destes valores precisa calcular a taxa de juros pela raiz da função f(j)=somatório-(valor do bem/valor da prestação). Somatório é 1-(1/(1+j))^n/1-(1/(1+j)) quando j>0, sendo j a taxa de juros e n numero de prestações. Para achar a raiz da função é necessário usa o método de muller. Porém, o juros da astronômico, e já mexi em tudo e não sai. Se alguém poder ajudar a achar o erro. O código é: (ignorem as outras funções potencia, valor absoluto, erro relativo e raiz quadrada, é que não pode usar o math.h. O importante esta em negrito) #include <stdio.h> #include <stdlib.h> #define TOL 0.000000001 double potencia(double x, int n) { int k; double pot=1; for(k = 1; k <= n; k++) { pot = pot*x; } return pot; } double valor_absoluto(double x) { if(x<0) { x=-1*x; } return x; } double erro_relativo(double x, double y) { double erro=1, valor; if (y!=0) { valor=(x-y)/y; erro=valor_absoluto (valor); } else { erro=1; } return erro; } double raiz_quadrada(double x) { double esp=1, x0, x1; x0=x; while(esp>=TOL) { x1=x0-(((x0*x0)-x)/(2*x0)); esp=valor_absoluto(((x1-x0)/x1)); x0=x1; } return x1; } double f(double j,double vbem, int nprest, double prest) { double somatorio, funcao; if (j==0) { somatorio=nprest; funcao=somatorio-(vbem/prest); } else { somatorio=(1-(potencia(1/(1+j),nprest)))/(1-(1/(1+j))); funcao=somatorio-(vbem/prest); } return funcao; } double juros (double vbem, int nprest, double prest) { double x0=0, x1, fx0, fx1, x2, fx2, fx3, h1, h2, q2, a, b, c, x3, esp, fx=1, resp, qlinha, qlinhalinha; x1=0.3*(prest/(vbem-prest)); x2=prest/(vbem-prest); fx0=f(x0,vbem,nprest,prest); fx1=f(x1,vbem,nprest,prest); fx2=f(x2,vbem,nprest,prest); h1=x1-x0; h2=x2-x1; q2=h2/h1; a=(q2*fx2)-(q2*(1+q2)*fx1)+((potencia(q2,2))*fx0); b=((2*q2+1)*fx2)-((potencia((1+q2),2))*fx1)-((potencia(q2,2))*fx0); c=(1+q2)*fx2; qlinha=(-2*c)/(b+(raiz_quadrada(b*b-(4*a*c)))); qlinhalinha=(-2*c)/(b-(raiz_quadrada(b*b-(4*a*c)))); if (valor_absoluto(qlinha)>valor_absoluto(qlinhalinha)) { x3=x2+(h1*qlinhalinha); } else { x3=x2+(h1*qlinha); } fx3=f(x3,vbem,nprest,prest); esp=erro_relativo(x3, x2); x0=x1; x1=x2; x2=x3; resp=x3; if (fx0==0) { fx=fx0; resp=x0; } if (fx1==0) { fx=fx1; resp=x1; } if (fx2==0) { fx=fx2; resp=x2; } while (esp>=TOL && fx!=0) { fx0=f(x0,vbem,nprest,prest); fx1=f(x1,vbem,nprest,prest); fx2=f(x2,vbem,nprest,prest); h1=x1-x0; h2=x2-x1; q2=h2/h1; a=(q2*fx2)-(q2*(1+q2)*fx1)+((potencia(q2,2))*fx0); b=((2*q2+1)*fx2)-((potencia((1+q2),2))*fx1)-((potencia(q2,2))*fx0); c=(1+q2)*fx2; qlinha=(-2*c)/(b+(raiz_quadrada(b*b-(4*a*c)))); qlinhalinha=(-2*c)/(b-(raiz_quadrada(b*b-(4*a*c)))); if (valor_absoluto(qlinha)>valor_absoluto(qlinhalinha)) { x3=x2+(h1*qlinhalinha); } else { x3=x2+(h1*qlinha); } fx3=f(x3,vbem,nprest,prest); esp=erro_relativo(x3, x2); x0=x1; x1=x2; x2=x3; resp=x3; if (fx0==0) { fx=fx0; resp=x0; } if (fx1==0) { fx=fx1; resp=x1; } if (fx2==0) { fx=fx2; resp=x2; } } return resp; } int main() { int nprest=1; double vbem=1,prest=1; while (vbem>0) { printf("Digite valor do bem,numero de prestacoes e valor das prestacoes="); scanf("%lf %lf %lf", &vbem, &nprest, &prest); printf("juros= %lf\n", juros(vbem,nprest,prest)); } system("PAUSE"); return 0; }
×
×
  • Criar Novo...