-------------------------------------------------------------------------
MAC-115 - Turma T23 - Setembro - Variaveis do tipo double - series
=========================================================================
Variaçoes sobre o mesmo tema - calculo de arctan(.)
====================================================
/*
* Exercicio 4.5 (parte a) -- em vez de funcao, foi feito um programa.
*
* arquivo: arctan-eps.c
* ---------------------
* Dada uma precisao eps = 0.0001 e um número x (real, a ser lido),
* calcular arctan(x), atraves da série, 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>
#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
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
* ---------------------------
* Dada uma precisao eps = 0.0001 e um número x (real, a ser lido),
* calcular arctan(x), atraves da série, 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){ // note que eps ja' foi definido
potx = - potx * x * x;
termo = potx / i;
soma = soma + termo;
i= i + 2;
}
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 número x (real) e uma precisão eps (real),
* calcular arctan(x), atraves da série, 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>
#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 aproximação para pi
Basta notar que que pi = 4* arctan(1.0).
===============================================================
/*
* arquivo: cos.c
* Dados x real e n natural, calcular uma aproximação para cos(x)
* através dos n primeiros termos da série.
* 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("Forneça o valor do ângulo em radianos: ");
scanf("%lf", &x);
printf("Número 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: cos(%g) = %g\n", x, cos(x));
return 0;
}
==========================================================
/*
* arquivo: cos.c
* Dados x real e n natural, calcular uma aproximação para cos(x) através dos n
* primeiros termos da série.
* 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("Forneça o valor do ângulo em radianos: ");
scanf("%lf", &x);
printf("Número 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: cos(%g) = %g\n", x, cos(x));
return 0;
}