Djalma_Jr
(usa Debian)
Enviado em 11/11/2012 - 07:59h
E ai pessoal, tudo bem? Estou fazendo um programa aqui, e estou com um problema de leitura das variáveis nas funções, eu entro com os dados em uma função, e quando "chamo" eles em outra função, eles não estão carregando os dados que eu "inputei" nelas na função anterior, será que tem como alguém me ajudar? (Já fiz o teste de retirar as funções e fazer tudo em uma só, e quando eu faço isso da certo!)
O problema está nas variáveis "vv, entrada, prestacao e parcelas".
Valeu!
[]'s
Códio fonte:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 1000
#define ERRO pow(10,-5)
struct variaveis{
int cont;
float vv, vf, entrada, pm, p, k;
float x[MAX], f1x[MAX], f2x[MAX], g1x[MAX], g2x[MAX], h1x[MAX], h2x[MAX];
};
int controle(){
struct variaveis X;
X.cont = 0;
X.vv = 0;
X.vf = 0;
X.entrada = 0;
X.pm = 0;
X.p = 0;
X.k = 0;
}
int entrada(){
struct variaveis X;
printf ("Entre com o valor do produto 'à vista':");
scanf ("%f", &X.vv);
printf ("Entre com o valor da entrada: ");
scanf ("%f", &X.entrada);
printf ("Entre com o valor de cada prestacao: ");
scanf ("%f", &X.pm);
printf ("Entre com a quantidade de parcelas: ");
scanf ("%f", &X.p);
printf ("\n\n\n");
printf ("Controle_1\n");
printf ("vv = %0.1f\n", X.vv);
printf ("entrada = %0.1f\n", X.entrada);
printf ("prestacao = %0.1f\n", X.pm);
printf ("parcelas = %0.1f\n", X.p);
}
int calculos_1(){
struct variaveis X;
int i;
float teste;
printf ("\n\n\n");
printf ("Controle_2\n");
printf ("vv = %0.1f\n", X.vv);
printf ("entrada = %0.1f\n", X.entrada);
printf ("prestacao = %0.1f\n", X.pm);
printf ("parcelas = %0.1f\n\n\n\n", X.p);
X.x[0] = 0.9;
printf ("x[0] = %f\n", X.x[0]);
X.vf = (X.vv - X.entrada);
printf ("vf = %f\n", X.vf);
X.k = X.vf/X.pm;
printf ("k = %f\n", X.k);
X.g1x[0] = X.k*pow(X.x[0],(X.p+1));
printf ("g1x[0] = %f\n", X.g1x[0]);
X.g2x[0] = ((X.k+1)*(pow(X.x[0],X.p))) - 1;
printf ("g2x[0] = %f\n", X.g2x[0]);
/*f1x é a função original*/
X.f1x[0] = (X.g1x[0] - X.g2x[0]);
printf ("f1x[0] = %f\n", X.f1x[0]);
X.h1x[0] = (X.p+1)*(X.k*pow(X.x[0],X.p));
printf ("h1x[0] = %f\n", X.h1x[0]);
X.h2x[0] = X.p*((X.k+1)*pow(X.x[0], X.p-1));
printf ("h2x[0] = %f\n", X.h2x[0]);
/*f2x é a derivada da função*/
X.f2x[0] = X.h1x[0] - X.h2x[0];
printf ("f2x[0] = %f\n", X.f2x[0]);
for (i=1; i<=MAX; i++){
X.x[i] = X.x[i-1] - (X.f1x[i-1]/X.f2x[i-1]);
teste = abs ((X.x[i] - X.x[i-1])/X.x[i]);
if (teste <= ERRO){
break;
exit(0);
}
else if(teste >= ERRO){
X.g1x[i] = X.k*pow(X.x[i],(X.p+1));
X.g2x[i] = ((X.k+1)*(pow(X.x[i],X.p))) - 1;
/*f1x é a função original*/
X.f1x[i] = X.g1x[i] - X.g2x[i];
X.h1x[i] = (X.p+1)*(X.k*pow(X.x[i],X.p));
X.h2x[i] = X.p*((X.k+1)*pow(X.x[i], X.p-1));
/*f2x é a derivada da função*/
X.f2x[i] = X.h1x[i] - X.h2x[i];
}
X.cont = X.cont + 1;
}
}
int saida_1(){
struct variaveis X;
printf ("A funcao alcanca o 'zero' em: %f \n", X.x[X.cont]);
printf ("A resolucao foi alcancada depois de %d interacoes.\n\n", X.cont);
}
int main(){
controle();
entrada();
calculos_1();
saida_1();
system("pause");
return 0;
}
Tela de saída:
Entre com o valor do produto 'à vista':21
Entre com o valor da entrada: 21
Entre com o valor de cada prestacao: 21
Entre com a quantidade de parcelas: 21
Controle_1
vv = 21.0
entrada = 21.0
prestacao = 21.0
parcelas = 21.0
Controle_2
vv = 0.0
entrada = 0.0
prestacao = 0.0
parcelas = 0.0
x[0] = 0.900000
vf = -0.000000
k = -0.007810
g1x[0] = -0.007029
g2x[0] = -0.007810
f1x[0] = 0.000781
h1x[0] = -0.007810
h2x[0] = 0.000000
f2x[0] = -0.007810