Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- int main()
- {
- int nmax,op2;
- float xa,xb,erro;
- printf("\nDigite o Intervalo A:\n");
- scanf(" %f",&xa);
- printf("\nDigite o Intervalo B:\n");
- scanf(" %f",&xb);
- printf("\nDigite o numero maximo de Interacoes. Digite 0 para interacoes sem limite:\n");
- scanf(" %d",&nmax);
- printf("\nDigite a Precisao 'E':\n");
- scanf(" %f",&erro);
- Calc(xa,xb,nmax,erro);
- printf("\nDigite 1 para ver o resultado em outro metodo ou 0 para continuar:\n");
- scanf("%d",&op2);
- switch(op2)
- {
- case 1:
- Calc(xa,xb,nmax,erro);
- break;
- case 0:
- break;
- default:
- printf("\nOpcao nao suportada.");
- }
- return 0;
- }
- float CalcFx(float x) //retorna f(x)
- {
- return 2*pow(x,2)-10;
- }
- float modulo(float y) //Valor em Modulo
- {
- if(y<0) return (-1)*y;
- return y;
- }
- float zeroBissecao(float xa,float xb,int nmax,float erro) //Calcula a raiz pelo metodo da bisseção
- {
- int j=1;
- float xm;
- if(nmax==0) //desconsidera numero maximo de interações
- {
- while(1)
- {
- xm=(float)(xa+xb)/(2);
- if(modulo(CalcFx(xm))<erro) break;
- if(CalcFx(xa)*CalcFx(xm)<0)
- {
- xb=xm;
- }
- else
- {
- xa=xm;
- }
- j++;
- }
- }
- else
- {
- while(j<=nmax) //considera numero maximo de interações
- {
- xm=(xa+xb)/2;
- if(modulo(CalcFx(xm))<erro) break;
- if(CalcFx(xa)*CalcFx(xm)<0)
- {
- xb=xm;
- }
- else
- {
- xa=xm;
- }
- j++;
- }
- if(!(modulo(CalcFx(xm))<erro)) printf("\nNumero maximo de interações Exedido. Numero de interações insuficientes para a precisão mencionada");
- }
- printf("\n Iteracoes: %d",j);
- return xm;
- }
- float zeroPosFalsa(float xa,float xb,int nmax,float erro) //calcula a raiz pelo metodo da posicao falsa
- {
- int i=2;
- float x;
- float k;
- float ka=CalcFx(xa);
- float kb=CalcFx(xb);
- if(nmax==0) //numero maximo de interações sem limite
- {
- while(1)
- {
- x=xb-kb*((xb-xa)/(kb-ka));
- if(modulo(x-xb)<erro)
- {
- printf("\n Iteracoes: %d",i);
- return x;
- }
- i++;
- k=CalcFx(x);
- if(k*kb<0)
- {
- xa=xb;
- ka=kb;
- }
- xb=x;
- kb=k;
- }
- }
- else
- {
- while(i<=nmax) //considera numero maximo de interações
- {
- x=xb-kb*((xb-xa)/(kb-ka));
- if(modulo(x-xb)<erro)
- {
- printf("\n Iteracoes: %d",i);
- return x;
- }
- i++;
- k=CalcFx(x);
- if(k*kb<0)
- {
- xa=xb;
- ka=kb;
- }
- xb=x;
- kb=k;
- }
- printf("\nNumero maximo de interações Exedido. Numero de interações insuficientes para a precisão mencionada.");
- }
- }
- void Calc(float xa,float xb,int nmax,float erro) //funcao que recebe os dados como parametro e permite ao usuario escolher metodo de resolucao
- {
- int op;
- do
- {
- printf("\nDigite 1 para Metodo da Bissecao ou 2 para Metodo da Posicao Falsa: ");
- scanf("%d",&op);
- switch(op)
- {
- case 1:
- printf("\nMetodo da Bissecao:");
- float ResBI=zeroBissecao(xa,xb,nmax,erro);
- printf("\nRaiz=%f ; f(raiz)=%f",ResBI,CalcFx(ResBI));
- break;
- case 2:
- printf("\nMetodo da Posicao Falsa:");
- float ResFP=zeroPosFalsa(xa,xb,nmax,erro);
- printf("\nRaiz=%f ; f(Raiz)=%f",ResFP,CalcFx(ResFP));
- break;
- default:
- printf("\nOpção Incorreta");
- }
- }
- while(op!=1&&op!=2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement