noções de programação para o desenvolvimento de ferramentas

21
Noções de programação para o desenvolvimento de ferramentas matemáticas utilizando a linguagem C JEANFSON DUTRA DE OLIVEIRA ANTONIO CARLOS LIMA DO NASCIMENTO Universidade Federal do Pará 4 o Colóquio da Região Centro-Oeste Novembro de 2015

Upload: vuongdien

Post on 07-Jan-2017

218 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Noções de programação para o desenvolvimento de ferramentas

Noções de programação parao desenvolvimento de ferramentas matemáticasutilizando a linguagem C

JEANFSON DUTRA DE OLIVEIRAANTONIO CARLOS LIMA DO NASCIMENTO

Universidade Federal do Pará

4o Colóquio da Região Centro-Oeste

Novembro de 2015

Page 2: Noções de programação para o desenvolvimento de ferramentas
Page 3: Noções de programação para o desenvolvimento de ferramentas

Sumário

1 ESCREVENDO O PRIMEIRO PROGRAMA: Noções textuais 11.1 Estrutura de um programa . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Printf e as strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 TRABALHANDO COM DADOS 32.1 Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.1.1 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.3 If-else e if-else encadeados . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 LAÇOS DE REPETIÇÃO E FUNÇÕES 73.1 O comando FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2 O comando WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.3 Onde colocar as funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 ALGUNS ALGORÍTIMOS PARA O ESTUDO DO CÁLCULO 114.1 Calculo de volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Cálculo de uma área sob uma curva . . . . . . . . . . . . . . . . . . . . . 144.3 Aproximação de raízes reais pelo método da Bisseção . . . . . . . . . . . 15

Referências Bibliográficas 17

iii

Page 4: Noções de programação para o desenvolvimento de ferramentas
Page 5: Noções de programação para o desenvolvimento de ferramentas

Capítulo 1

ESCREVENDO O PRIMEIROPROGRAMA: Noções textuais

1.1 Estrutura de um programa

Um programa é uma sequência de códigos (comandos) escritos de formaconveniente para solucionar um problema ou visualizar um resultado previsto. A essasequência estruturada e lógica de códigos, damos o nome de algorítmo e para que omesmo seja compilado é preciso que ele obedeça à estrutura da linguagem trabalhada.

Em C, a estrutura básica para que os compiladores traduzam os comandos para alinguagem de “máquina”, ou seja, a liguagem binária, são as seguintes:

• Bibliotecas;

• Funções;

• Blocos de códigos.

Abaixo podemos observar um exemplo de estrutura básica de um programa em C.

1 #include <stdio.h>2 main()3 {}

Na linha 1 temos o comando include que adiciona a biblioteca stdio.h. Essabiblioteca nada mais é do que um arquivo com um conjunto de informações funcionaispresente em algum lugar no disco rígido, que informa ao compilador de que maneirairá traduzir para a linguagem binária os blocos de código.

Na linha 2 temos uma função chamada main, que vem seguida de () (parênteses)pois toda função em C deve ser seguida de parênteses. Essa função serve parainserirmos os blocos de código, ou para ser mais preciso, é aqui que começa o programapropriamente dito.

Na linha 3 temos os caracteres {} (chaves), é entre as chaves que escrevemos todos osblocos de código, ou seja, todas as instruções que queremos que o computador execute.

Os blocos de código inseridos a partir da função main() são repletos de outrasfunções que indicam de que maneira o computador deverá proceder com asinformações. E para que o computador possa “conversar” com o ser humano atravésdos programas, é essencial que esse computador saiba processar textos em nossa

1

Page 6: Noções de programação para o desenvolvimento de ferramentas

2 Capítulo 1: ESCREVENDO O PRIMEIRO PROGRAMA: Noções textuais

língua. Trabalharemos agora em cima da função que nos permite escrever textos emum programa.

1.2 Printf e as strings

A printf é a função que nos permite escrever strings (conjunto de caracteres) emum código (programa) em C. É essa função que faz a comunicação programa-usuário.

Como já foi dito, toda função deve ser seguida de () (parênteses), mas em todafunção que compõe os blocos de código, devem ser seguidas também após osparênteses de ; (ponto e vírgula), em especial, as frases que quisermos escreverna printf devem estar entre “ ” (aspas duplas) que por sua vez devem estar entreparênteses. Resumindo, todas as frases que quisermos escrever em um programa emC devem estar dentro da função printf(“ ”);.

ATENÇÃO!!!!! VALE LEMBRAR QUE A LINGUAGEM C É CASE SENSITIVE,OU SEJA, DIFERE ENTRE MAIÚSCULAS E MINÚSCULAS, POR EXEMPLO: Printfé diferente de printf que é diferente de PRINTF, SENDO ASSIM, printf é uma funçãoem C mas Printf não existe em C.

EXEMPLO:Vamos escrever um programa que imprima na tela a famosa frase HELLO

WORLD!.

1 #include <stdio.h>2 main()3 {4 printf("HELLO WORLD!");5 }

A frase que deverá ser impressa pelo programa é : HELLO WORLD!Podemos usar de vários printf para escrever diferentes frases ou escrever uma

única frase. Vamos reescrever o mesmo programa anterior com três printf:

1 #include <stdio.h>2 main()3 {4 printf("HELLO");5 printf(" ");6 printf("WORLD!");7 }

Note que na linha 5, o printf imprime um ESPAÇO. Todos os espaços sãoreconhecidos dentro da printf, mas fora das funções, os espaços não tem sentido, logo,printf(“1,2,3”); é o mesmo que printf (“1,2,3”);.

Para pularmos linhas dentro da printf, usamos um caractere especial: \n que seriao mesmo que digitar ENTER se estivéssemos em um editor de texto normal.

Page 7: Noções de programação para o desenvolvimento de ferramentas

Capítulo 2

TRABALHANDO COM DADOS

2.1 Operadores lógicos

Temos que compreender o computador como uma grande máquina de calcular.Para escrevermos um simples “OI”, o computador faz inúmeros cálculos paraconverter em binários os códigos que você digitou no teclado e em seguida processar erefazer os cálculos para devolver no monitor a palavra que foi digitada. Vamos entãoconhecer os operadores lógicos (caracteres especiais) que trabalharemos operações emC:

• + (símbolo de MAIS) utilizado para somar valores;

• - (símbolo de MENOS) utilizado para subtrair valores;

• * (símbolo de asterisco) utilizado para multiplicar valores;

• / (símbolo de barra invertida) utilizado para dividir valores;

• % (símbolo de porcentagem) utilizado para calcular o RESTO da divisão dedois valores INTEIROS.

OBSERVAÇÃO: neste último símbolo (%), não faz sentido utilizarmos ao trabalharcom números reais, pois não existe resto na divisão de dois números reais. Em C, aoperação entre dois números reais produz um número real.

Podemos fazer operações com valores dentro da própria função printf com oauxílio de outra função chamada scanf, mas antes disso precisamos entender oconceito de variáveis em C.

2.1.1 Variáveis

Para inserirmos variáveis em C precisamos primeiro identificar o tipo dessavariável, ou seja, se esse dado será apenas um caractere ou um número INTEIRO ouainda um número REAL. Vejamos como definir o tipo de variáveis:

• char define um único caractere (1, a, x, s, F, !, #, etc);

• int define um número inteiro (1, -5, -250, 1000, etc);

3

Page 8: Noções de programação para o desenvolvimento de ferramentas

4 Capítulo 2: TRABALHANDO COM DADOS

• float define um número real não inteiro (3.14, 0.13445, 100.0,47564.000, etc);

• double define um número real não inteiro com maior capacidade de casasdecimais (3.1415, 85438.48475634637372764, etc).

OBSERVAÇÃO: Em C, a vírgula é representada por um ponto (.). A diferença entrefloat e double é que o primeiro tem capacidade de 4 bits enquanto o último tem 8 bits,ou seja, maior capacidade de armazenamento.

2.2 Scanf

A função scanf é usada para a leitura de dados inseridos a partir do teclado. Paraque isso seja possível é necessário o uso de um caractere especial de atribuição para serusado dentro da função scanf. Os caracteres são:

• %d caractere para escrita de números inteiros;

• %f caractere para escrita de números reais;

• %c caractere par escrita de strings;

• %e e %E caractere para escrita de notação científica.

Para que a atribuição dos dados sejam inseridos nas variáveis a partir da scanf épreciso informar com o caractere & (e comercial), seguido da variável a ser atribuida.

Analisemos o seguinte programa:

1 #include <stdio.h>2 main()3 {4 int n1,n2;5 printf("Digite o primeiro numero: ");6 scanf("%d", &n1);7 printf("Digite o segundo numero: ");8 scanf("%d", &n2);9 printf("O resultado e %d + %d = %d\n", n1, n2, n1+n2);

10 }

Declaramos duas variáveis n1 e n2 do tipo int (inteiro). Depois, uma frase pedepara o usuário inserir um número. Após isso, entra a função scanf que captura onúmero digitado no teclado e escreve no caractere %d indicando que é um númerointeiro. Em seguida a função scanf insere o número digitado na variável n1 através docaractere &. Depois entra outra frase pedindo ao usuário outro número e após isso,uma outra scanf captura o valor digitado, mas desta vez, inserindo o valor na variáveln2. Por ultimo, uma função printf escreve os valores digitados entre aspas duplas comos caracteres %d e pula uma linha com \n. Após as aspas, inserimos os respectivosvalores a serem substituídos pelos caracteres %d e o terceiro %d ainda dentro das aspasduplas é subtituido pelo terceiro número indicado pela soma das duas variáveis n1 +n2.

Analisemos agora um programa que calcula a área e o perímetro de umacircunferência:

Page 9: Noções de programação para o desenvolvimento de ferramentas

2.3: If-else e if-else encadeados 5

1 #include <stdio.h>2 main()3 {4 float raio , perimetro;5 double Pi = 3 ,141592654 , area;6 printf("Introduza o raio da circunferencia: ");7 scanf("%f", &raio);8 area = Pi*raio*raio;9 perimetro = 2*Pi*raio;

10 printf("Area = %f\n\n", area);11 printf("Perimetro = %f\n\n", perimetro);12 }

Agora neste programa, definimos duas variáveis raio e perimetro do tipo reale outras duas variáveis Pi e area do tipo real mas com maior capacidade de casasdecimais e também definimos o valor de Pi que deixa de ser variável para se tornarconstante. Depois da printf e scanf, definimos a forma das variáveis area e perimetrocomo sendo a fórmula da área e do perímetro de uma circunferência, observando queem C não existe potência, por isso a multiplicação da variável raio duas vezes. Por fimmais duas printf com os resultados dos cálculos.

2.3 If-else e if-else encadeados

As funções if e else nada mais são do que funções para determinar condições paraa execução de uma ou mais operações dentro de um programa. São funções queliteralmente fazem o que dizem em seus significados em português: if-else = se-então.

São condições que trabalham com verdadeiro e falso utilizando a relação de ordeme de igual ou diferente como mostrado abaixo:

• > maior que;

• < menor que;

• >= maior ou igual;

• <= menor ou igual;

• == igual;

• != diferente;

Note que o símbolo de = significa atribuição de valor. Para dizer que um valor é IGUALa outro devemos usar ==. Resumindo, if diz que se uma condição for verdadeiraaplicará uma instrução, caso contrário, else, executará outra função ou encerrará oprograma. Vejamos o seguinte programa que diz se um número é negativo ou pisitivo:

Page 10: Noções de programação para o desenvolvimento de ferramentas

6 Capítulo 2: TRABALHANDO COM DADOS

1 # include <stdio.h>2 main()3 {4 float x;5 printf("Introduza um numero: ");6 scanf("%f", &x);7 if (x>0)8 printf("O numero %f e PISITIVO !!!", x);9 else

10 printf("O numero %f e NEGATIVO !!!", x);11 }

Até a função scanf tudo já é conhecido. Após isso, temos a função if que diz que se avariável x do tipo real for maior que zero, o programa deverá qualificar o número queo usuário digitou como PISITIVO, caso contrário, usamos a função else que deveráqualificar o número digitado como NEGATIVO. Isso se deve porque a linguagem Cnão sabe quando um número é negativo ou positivo, apenas reconhece a relação deordem dos números, ou seja, a linguagem C sabe que 1 é maior que -1, mas não sabeque 1 é positivo e que -1 é negativo. Assim devemos “ensinar” quando os númerossão positivos ou negativos.

Se analisarmos matematicamente o programa anterior, veremos que ele apresentaráum possível erro caso o usuário digite o número zero. O programa indicará que zero énegativo ja que o número x deve ser maior que zero, caso contrário, o programa deveráindicar que x é negativo.

É por causa desses casos que em C, podemos utilizar as funções if-else de formaencadeada, ou seja, if-else encadeados significa mais de um par de if-else. Assim,para consertar o programa anterior, utilizaremos if-else encadeados, vejamos:

1 # include <stdio.h>2 main()3 {4 float x;5 printf("Introduza um numero: ");6 scanf("%f", &x);7 if (x!=0)8 if (x>0)9 printf("O numero %f e PISITIVO !!!", x);

10 else11 printf("O numero %f e NEGATIVO !!!", x);12 else13 printf("%f e o numero neutro !!!", x);14 }

Agora no primeiro if, indicamos que x deve ser diferente de zero, se sim,então deverá acontecer outro if que indicamos que x deve ser maior que zero, seisso for verdade o programa imprimirá POSITIVO, caso contrário (else), imprimiráNEGATIVO, se essas duas condições forem falsas, ou seja se x não for maior nemmenor que zero, então é claro que x será igual a zero, então a primeira condição doprimeiro if será falsa e o programa executará a instrução do ultimo else que diz quezero é NEUTRO.

Page 11: Noções de programação para o desenvolvimento de ferramentas

Capítulo 3

LAÇOS DE REPETIÇÃO E FUNÇÕES

3.1 O comando FOR

O comando for é usado para repetir a execução de uma sequência de comandoscerto número de vezes. Esse comando é usado quando sabemos, a priore, o número derepetições que devem ser executadas.

Um exemplo bastante elementar para mostrar a estrutura do for é o programa quemostra os números naturais de 1 a 10 em ordem crescente.

1 #include <stdio.h>2 int main (){3 int i;4 for(i=1;i<=10;i++){5 printf("%d ",i);6 }7 return 0;8 }

Podemos programar o somatório dos n primeiros números naturais:

1 #include <stdio.h>2 int main (){3 int i,soma=0,n=100;4 for(i=1;i<=n;i++){5 soma=soma+i;6 }7 printf("%d ",soma);8 return 0;9 }

Note que no código acima, a variável n, linha 4, controla o número de vezes em queo comando for será repetido. Já na linha 5 temos a lei de formação do somatório.

3.2 O comando WHILE

Assim como o for, o while é um comando de repetição. A vantagem do whileem relação ao for é que não necessitamos saber quantas repetições serão realizadas.

7

Page 12: Noções de programação para o desenvolvimento de ferramentas

8 Capítulo 3: LAÇOS DE REPETIÇÃO E FUNÇÕES

Como exemplo implementamos um programa que calcula o MDC entre dois númerosnaturais.

1 #include <stdio.h>23 int main(){4 int r=1,p=60,n=12,mdc;5 printf("O MDC entre %d e %d eh : ",p,n);6 while(r!=0){7 r=p%n;8 if(p%n==0){9 mdc=n;

10 }else{11 p=n;12 n=r;13 }14 }15 printf("%d\n",mdc);16 return 0;17 }

3.3 Onde colocar as funções

Na Linguagem C, a criação de funções é o mecanismo adequado para codificartarefas específicas. Muitas funções já vem com as bibliotecas da linguagem C. Aprintf(), scanf(), if(), for(), log(), cos() são alguns exemplos de funções. A função maisimportante é a main(), pois somente o que for escrito dentro dela será executado.

Dependendo do projeto, faz-se necessário criar funções que podem ser chamadaspara dentro da função principal. Para entender como criar, declarar e chamar umafunção, vamos analisar o seguinte programa que calcula o fatorial de um númeronatural:

1 #include <stdio.h>23 double fat(double x);45 int main(){// INICIO DA FUNCAO PRINCIPAL6 double x;78 printf("\n\t informe o numero que voce quer calcular o fatorial:

");9 scanf("%lf",&x);

1011 if(x<=1){12 printf("\n\n\t o fatorial de %.f eh: 1 \n\n",x);13 }else{14 printf("\n\n\t o fatorial de %.f eh: %.f \n\n",x, fat(x));15 }16 return 0;

Page 13: Noções de programação para o desenvolvimento de ferramentas

3.3: Onde colocar as funções 9

17 }//FIM DA FUNCAO PRINCIPAL1819 //// FUNCAO O FATORIAL20 double fat(double x){21 double fat;2223 for(fat=1;x>1;x=x-1){24 fat=fat*x;25 }26 return fat;27 }

No código acima, a função principal está escrita entre as linhas 5 e 17. Note que afunção responsável pelo cálculo do fatorial está escrita entre as linhas 20 e 27, isto é,fora da função principal. Para que essa função possa ser visualizada pela função main(),primeiro devemos declará-la antes da função principal, logo abaixo da biblioteca stdio.h(linha 3). Apos esses passos, basta chamar a função fat para dentro da função principal(linha 14).

Page 14: Noções de programação para o desenvolvimento de ferramentas

10 Capítulo 3: LAÇOS DE REPETIÇÃO E FUNÇÕES

Page 15: Noções de programação para o desenvolvimento de ferramentas

Capítulo 4

ALGUNS ALGORÍTIMOS PARA OESTUDO DO CÁLCULO

4.1 Calculo de volume

Vamos dar exemplos de três funções para calcular os volumes da esfera, do cilindroe do cubo. Aqui iremos mostrar a estrutura e a utilidade da função switch(), que éprópria das bibliotecas da Linguagem C. Além disso, faremos uso das funções if() ewhile(), já vistas anteriormente.

Note, que no código abaixo, (linha 2), incluímos uma nova biblioteca, stdlib.h, poisiremos precisar de funções próprias desta biblioteca. Na linha 3, definimos umaconstante global PI à qual atribuímos o valor 3,141592654, que pode ser usada emqualquer função do algorítimo. Nas linhas 4,5,6 e 7 foram declaradas as funções queiremos chamar para dentro da função principal main(). Na linha 8 declaramos umavariável global (opcao), pois a usaremos em diferentes momentos no programa.

Note que dentro da função principal só há a função menu(), mas isso é o bastante,pois para dentro dela serão chamadas as demais funções.

1 #include <stdio.h>2 #include <stdlib.h>3 #define PI 3.1415926544 void menu();5 void VolumeEsfera ();6 void VolumeCilindro ();7 void VolumeCubo ();8 int opcao;9

10 int main(){// inicio da funcao principal1112 menu();1314 return 0;15 }//fim da funcao principal16 // ////////////////////////////////////////////////17 void menu(){//esta funcao gera o menu18

11

Page 16: Noções de programação para o desenvolvimento de ferramentas

12 Capítulo 4: ALGUNS ALGORÍTIMOS PARA O ESTUDO DO CÁLCULO

19 printf("\n\t\t==========================================\n");20 printf("\t\t============================================\n");21 printf("\t\t\t ESCOLHA UMA DAS OPCOES ABAIXO\n\n");22 printf("\n\t\t\t [1] VOLUME DA ESFERA");23 printf("\n\n\t\t\t\t [2] VOLUME DO CILINDRO");24 printf("\n\n\t\t\t\t\t [3] VOLUME DO CUBO");25 printf("\n\t\t==========================================\n");26 printf("\t\t============================================\n");2728 printf("\n\t\t\t OPCAO: ");scanf("%d",&opcao);2930 while((opcao <1)||(opcao >3)){31 printf("\a OPCAO INVALIDA. DIGITE UM NUMERO ENTRE 1 E 3 \t");32 menu(); scanf("%d", &opcao);33 }3435 switch(opcao){3637 case 1:38 printf("\n\t*Voce escolheu calcular o VOLUME DA ESFERA *\n");39 VolumeEsfera ();40 break;4142 case 2:43 printf("\n\tVoce escolheu calcular o VOLUME DO CILINDRO\n");44 VolumeCilindro ();45 break;4647 case 3:48 printf("\n\t*Voce escolheu calcular o VOLUME DO CUBO*\n");49 VolumeCubo ();50 break;5152 }//fim do switch53 }//fim da funcao menu()54 // ////////////////////////////////////////////////55 void VolumeEsfera (){56 float r, volume;5758 printf("\n\t\t Para o calculo do VOLUME da ESFERA informe o valor

do RAIO ");59 printf("\n\n\t\t RAIO = ");60 scanf("%f",&r);6162 volume = (4*PI*r*r*r)/3;6364 printf("\n\n\t\t O VOLUME da esfera de raio %f eh: %f \n\n",r,

volume);6566 printf("\n\t (1) CALCULAR NOVAMENTE \n\t (2) MENU \n\t

Page 17: Noções de programação para o desenvolvimento de ferramentas

4.1: Calculo de volume 13

67 (3) SAIR \n\t\t\tOPCAO: ");scanf("%d",&opcao);68 if(opcao ==1){VolumeEsfera ();} if(opcao ==2){menu();}69 if(opcao ==3){exit (1);}70 }71 // ///////////////////////////////////////////////72 void VolumeCilindro (){73 float r, h, volume;7475 printf("\n\t\t Para o calculo do VOLUME do CILINDRO informe o

valor do RAIO e da ALTURA:");76 printf("\n\n\t\t RAIO:");77 scanf("%f",&r);7879 printf("\n\n\t\t ALTURA:");80 scanf("%f",&h);8182 volume = PI*r*r*h;8384 printf("\n\n\t\t O VOLUME do CILINDRO de raio %f e altura %f eh:

%f \n\n",r,h,volume);8586 printf("\n\t (1) CALCULAR NOVAMENTE \n\t (2) MENU \n\t87 (3) SAIR \n\t\t\tOPCAO: ");scanf("%d",&opcao);88 if(opcao ==1){VolumeCilindro ();} if(opcao ==2){menu();}89 if(opcao ==3){exit (1);}90 }91 // //////////////////////////////////////////////92 void VolumeCubo (){93 float l, volume;9495 printf("\n\t\t Para o calculo do VOLUME do CUBO informe o valor

do LADO: ");96 scanf("%f",&l);9798 volume = l*l*l;99

100 printf("\n\n\t\t O VOLUME do CUBO de LADO %f eh: %f101 \n\n",l,volume);102103 printf("\n\t (1) CALCULAR NOVAMENTE \n\t (2) MENU \n\t104 (3) SAIR \n\t\t\tOPCAO: ");scanf("%d",&opcao);105 if(opcao ==1){VolumeCubo ();} if(opcao ==2){menu();}106 if(opcao ==3){exit (1);}107 }

Page 18: Noções de programação para o desenvolvimento de ferramentas

14 Capítulo 4: ALGUNS ALGORÍTIMOS PARA O ESTUDO DO CÁLCULO

4.2 Cálculo de uma área sob uma curva

Aqui faremos uso da biblioteca math.h, da função for() e de uma função que seráchamada para dentro da função main, onde iremos informar e intervalo e o númerode partições que iremos dividi-lo para obtermos uma boa aproximação da área sob acurva limitada pelo referido intervalo.

1 #include <stdio.h>2 #include <stdlib.h>3 #include <math.h>45 float f(float x);67 int main(){8 float inicial , final , deltaX , x0, xi=0, soma =0;9 int n, i;

1011 printf("\n\n\t Digite o valor INICIAL do intervalo: ");12 scanf("%f",&inicial);1314 printf("\n\n\t Digite o valor FINAL do intervalo: ");15 scanf("%f",&final);1617 printf("\n\n\t Digite o numero de particoes que sera dividido o

intervalo18 (%.2f,%.2f): ",inicial , final);19 scanf("%d", &n);2021 deltaX =((final -inicial)/n);22 x0=inicial;2324 for(i=0; i<n; i++){25 xi=x0+(i*deltaX);26 soma=soma+f(xi)*deltaX;27 }28 if(soma <0)29 soma=soma *(-1); // ESTE COMANDO GARANTE QUE O RESULTADO DA

INTEGRAL SEJA SEMPRE POSITIVO3031 printf("\n\t O valor aproximado da integral eh: %f\n", soma);3233 return 0;34 }3536 float f(float x){ //// funcao a ser chamada37 float s;3839 s=pow(x,3);40 return(s);41 }

Page 19: Noções de programação para o desenvolvimento de ferramentas

4.3: Aproximação de raízes reais pelo método da Bisseção 15

4.3 Aproximação de raízes reais pelo método da Bisseção

O Método da Bisseção é usado no Cálculo numérico para encontrar aproximaçõesde raízes reais de funções polinomiais e transcendentes. Esse método é sempreconvergente. Eis uma implementação do Método da Bisseção em Linguagem C:

1 #include <stdio.h>2 #include <stdlib.h>3 #include <math.h>45 float f1(float x){6 return x*x+x; }78 void MetodoBisseccao ();//esta funcao realiza os calculos do metodo

da bisseccao9 int main(){ // Inicio da funcao principal

1011 MetodoBisseccao ();1213 return 0;14 }// Fim da funcao principal1516 void MetodoBisseccao (){17 int n;18 do{//para repetir a funcao1920 double x,xr,a,b, M, epsilon ,k=1;2122 printf("\n\n\t Digite o valor de epsilon:");23 scanf("%lf",&epsilon);2425 printf("\n\t Digite os extremos do intervalo [a,b] que contem uma

raiz:");2627 printf("\n a: ");28 scanf("%lf",&a);2930 printf("\n b: ");31 scanf("%lf",&b);3233 // PARA A TABELA34 printf("\niteracao x f1(x) \t |b-a|\n" );3536 if(f1(a)*f1(b) >0){37 printf("\n\t O INTERVALO DADO NAO SATISFAZ AO TEOREMA \n\n\n");

system("pause"); exit (1);38 }39 else{ // primeiro ELSE40 if(fabs(b-a)<epsilon){ // segundo IF41 xr=(a+b)/2;

Page 20: Noções de programação para o desenvolvimento de ferramentas

16 Capítulo 4: ALGUNS ALGORÍTIMOS PARA O ESTUDO DO CÁLCULO

42 printf("\n\n\tA raiz aproximada pelo metodo da bisseccao eh: %lf ",xr);

43 k=1;44 }//fim do segundo IF45 else{ // segundo ELSE4647 M=f1(a);48 do{ // inicio do segundo do() para repeticao49 x=(a+b)/2;5051 // VALORES PARA A TABELA52 printf("\n %.lf\t\t %.10lf \t %.5lf \t %.10lf ",k,x,f1(x),fabs(a

-b)/2);5354 k=k+1;5556 if(M*f1(x) >0){ // terceiro IF57 a=x;58 M=f1(a);59 }//fim do terceiro IF60 else{61 b=x;62 }63 } //fim do segundo DO6465 while(fabs(b-a)>=epsilon);//FIM DO WHILE66 }//fim do segundo ELSE67 }//fim do primeiro ELSE6869 printf("\n\n\nA RAIZ APROXIMADA PELO METODO DA BISSECCAO EH: %.10

lf \n\n\n",(a+b)/2);7071 printf("(1) CALCULAR NOVAMENTE \n(2) SAIR\t\t");72 scanf("%d",&n);73 }while(n==1);74 if(n!=1){75 exit (1);76 }77 }////fim da funcao que realiza os calculos do metodo da bisseccao

Page 21: Noções de programação para o desenvolvimento de ferramentas

Referências Bibliográficas

[1] CELES FILHO, Waldemar. Introdução a estruturas de dados: com técnicas deprogramação em C. [7 a Reimpr.], Rio de Janeiro: Elsevier, 2004.

[2] DAMAS, Luís. Linguagem C. [Reimpr.], Rio de Janeiro: LTC, 2012.

[3] RUGGIERO, Marcia Aparecida Gomes. Cálculo Numérico: Aspectos teóricos ecomputacionais. 2.ed, São Paulo: Makron Books, 1996.

[4] SPERANDIO, Décio. Cálculo Numérico: características matemáticas e computacionaisdos métodos numéricos. São Paulo: Pearson, 2003.

17