Você está na página 1de 4

http://www.ime.usp.br/~yw/sica2007/mac115/pro...

------------------------------------------------------------------------MAC-115 - Turma T23 - Setembro - Variaveis do tipo double - series ========================================================================= Variaoes sobre o mesmo tema - calculo de arctan(.) ==================================================== /* * Exercicio 4.5 (parte a) -- em vez de funcao, foi feito um * * arquivo: arctan-eps.c * --------------------* Dada uma precisao eps = 0.0001 e um nmero x (real, a ser * calcular arctan(x), atraves da srie, fazendo a soma at * o termo a ser desprezado seja em valor absoluto menor que * * x - x^3 / 3 + x^5 / 5 - x^7 / 7 + ... * */ #include <stdio.h> #include <math.h> // para usar a funcao fabs(.) int main() { int i; double x, eps, termo, potx, soma; eps = 0.0001; // precisao a ser usada

programa.

lido), que o eps.

printf("Forneca o valor de x: "); scanf("%lf", &x); potx = x; soma = termo = x; i = 3; while (fabs(termo) >= eps){ potx = - potx * x * x; // veja o sinal termo = potx / i; soma = soma + termo; i = i + 2; // i toma valores 3, 5, 7.... } printf("arctan(%g) = %.20g\n", x, soma); return 0; } ================================================================ ======= Solucao 2 definindo eps como constante (veja o #define) /* * Exercicio 4.5 (parte a) -- em vez de funcao, foi feito um programa. * * arquivo: arctan-eps-const.c * ---------------------------

1 de 4

27-05-2013 16:06

http://www.ime.usp.br/~yw/sica2007/mac115/pro...
* Dada uma precisao eps = 0.0001 e um nmero x (real, a ser lido), * calcular arctan(x), atraves da srie, fazendo a soma at que o * o termo a ser desprezado seja em valor absoluto menor que eps. * * x - x^3 / 3 + x^5 / 5 - x^7 / 7 + ... * * Note que a precisao eps foi definida como uma constante * neste caso, nao se declara o eps. A inicializacao e' feita antes do * uso no programa principal. */ #include <stdio.h> #include <math.h> // para usar a funcao fabs(.) #define eps 0.0001 // constante correspondente precisao int main() { int i; double x, termo, potx, soma; // note que eps nao e' declarado como variavel printf("Forneca o valor de x: "); scanf("%lf", &x); potx = x; soma = termo = x; i = 3; while (fabs(termo) >= eps){ potx = - potx * x * x; termo = potx / i; soma = soma + termo; i= i + 2; } // note que eps ja' foi definido

printf("arctan(%g) = %.20g\n", x, soma); return 0; } ================================================================== ========== Solucao 3 fazendo a leitura de eps: /* * Exercicio 4.5 (parte a) -- em vez de funcao, foi feito um programa. * * arquivo: arctan-eps-lido.c * -------------------------* Dado um nmero x (real) e uma preciso eps (real), * calcular arctan(x), atraves da srie, fazendo a soma at que o * o termo a ser desprezado seja em valor absoluto menor que eps. * * x - x^3 / 3 + x^5 / 5 - x^7 / 7 + ... * */ #include <stdio.h>

2 de 4

27-05-2013 16:06

http://www.ime.usp.br/~yw/sica2007/mac115/pro...
#include <math.h> // para usar a funcao fabs(.)

int main() { int i; double x, eps, termo, potx, soma; printf("Forneca o valor de x: "); scanf("%lf", &x); printf("Forneca o valor de eps: "); scanf("%lf", &eps); potx = x; soma = termo = x; i = 3; while (fabs(termo) >= eps){ potx = - potx * x * x; termo = potx / i; soma = soma + termo; i = i + 2; } printf("arctan(%g) = %.20g\n", x, soma); return 0; } =================================================== OBS: Usando arctan(.) pode-se calcular uma aproximao para pi Basta notar que que pi = 4* arctan(1.0). =============================================================== /* * arquivo: cos.c * Dados x real e n natural, calcular uma aproximao para cos(x) * atravs dos n primeiros termos da srie. * Esta aproximacao boa s em torno do zero. */ #include <stdio.h> #include <math.h> // para fazer o calculo de cos(x) usando a funcao cos(.) // da biblioteca math. Veja o ultimo printf. int main() { int n, k; double fatorial, x, cosx, termo; // Veja: fatorial declarado como 'double' printf("Fornea o valor do ngulo em radianos: "); scanf("%lf", &x); printf("Nmero de termos: "); scanf("%d", &n); cosx = 1.0;

3 de 4

27-05-2013 16:06

http://www.ime.usp.br/~yw/sica2007/mac115/pro...
fatorial = 1.0; termo = 1.0; for (k = 1; k < n; k++) { termo = - (termo * x * x); // veja o sinal fatorial = fatorial * (2 * k -1) * (2 * k); //<==== calculo do fatorial // aproveitando o fatorial anterior. cosx = cosx + termo/fatorial; } printf("cos(%g) = %g\n", x, cosx); printf("Usando a funcao cos(.) ja' disponivel: return 0; } ========================================================== /* * arquivo: cos.c * Dados x real e n natural, calcular uma aproximao para cos(x) atravs dos n * primeiros termos da srie. * Aproximacao boa em torno do zero. <========= */ #include <stdio.h> #include <math.h> // <=== para fazer o calculo de cos(x) usando a funcao cos(.) // da biblioteca math. Veja o ultimo printf. int main() { int n, k; double fatorial, x, cosx, termo; // Veja: fatorial declarado como 'double' printf("Fornea o valor do ngulo em radianos: "); scanf("%lf", &x); printf("Nmero de termos: "); scanf("%d", &n); cosx = 1.0; fatorial = 1.0; termo = 1.0; for (k = 1; k < n; k++) { termo = - (termo * x * x); // veja o sinal fatorial = fatorial * (2 * k -1) * (2 * k); //<==== calculo do fatorial // aproveitando o fatorial anterior. cosx = cosx + termo/fatorial; } printf("cos(%g) = %g\n", x, cosx); printf("Usando a funcao cos(.) ja' disponivel: return 0; }

cos(%g) = %g\n", x, cos(x));

cos(%g) = %g\n", x, cos(x));

4 de 4

27-05-2013 16:06

Você também pode gostar