/* Programa raizes012.calc Assunto: Estudo das raizes de uma funcao definida no programa. Condicionantes: Programa sem erros Descricao: Varre um intervalo com uma malha dada procurando quando f troca de sinal. Usa mudanca de variavel para fazer procura fina. Palavras-chave: troca de sinal, raiz, varredura por Tarcisio Praciano Pereira - 10 licões para aprender C Sobral, Agosto de 2003 - UVA */ define principal() { local a,b,delta, deltaf, m, raiz, teste=0; printf("Raizes aproximadas - metodos da secante e tangente \n"); printf("Forneca-me o intervalo [a,b] para busca de raizes: \n"); a=-5; b= 5; delta = 0.01; printf("Precisao da malha %lf \n ", delta); apeteco2(); while ( a <= b) { deltaf=(f(a+delta)-f(a)); if ( (abs(f(a)*deltaf) < delta*delta) && ( abs(f(a)) < delta) ) { raiz_fina_tangente(a,a+delta); teste++; a = a + delta; } else if ( (f(a)*f(a+delta)<0) ) { raiz_fina_secante(a, a+delta); teste++; a = a + delta; } a = a + delta; } if (!teste) { printf("Nao encontrei raizes...mas isto nao significa que \n"); printf("nao as haja! apenas eu nao consegui encontra-las !\n"); printf("Rode, novamente, o programa, com passo mais fino...\n"); } else { if (teste == 1) printf("Encontrei 1 intervalo onde h\'a raizes \n"); else printf("Encontrei %d intervalos onde h\'a raizes \n", teste); } return 0; } define raiz_fina_secante(a, b) { local delta=(b-a)/1000,deltaf,m,raiz; while (abs(f(a)) > delta) { a = a + delta; } deltaf = (f(a+delta)-f(a)); m = deltaf/delta; raiz = a - f(a)/m; printf("Raiz, por secancia, provavel, da funcao no intervalo \n"); printf("%s%lf%s%lf%s \n","[", a, ",", a+delta,"]"); printf("valor de f no ponto %lf --> %lf \n",raiz,f(raiz)); } define raiz_fina_tangente(a, b) { local delta=(b-a)/1000, raiz; while (abs(f(a)) > delta) { a = a + delta;} raiz=(a + a+delta)/2; printf("Raiz, por tangencia, provavel, da funcao no intervalo \n"); printf("%s%lf%s%lf%s \n","[", a, ",", a+delta,"]"); printf("valor de f no ponto %lf --> %lf \n",raiz,f(raiz)); } define f(x) { return (x-1)*(x+2)*(x+2)*(x-2)*(x-2)*(x*x*x*x*x + x*x*x*x + x*x*x + x*x + x + 1); } define apeteco2() { local buffer=" "; printf("aperte uma tecla para continuar \n"); scanf("%c",&buffer); } principal(); quit;