Aula 10Aulas teóricas - notas...Aula 8Aula 9

Aula 9


             --------------------------------------------
                  Representação em vírgula flutuante
                               Tabelas
             Raízes pelo método das bissecções sucessivas
                          Integral definido
             --------------------------------------------

O tipo float e double

Norma: trabalhar sempre com double, %lf

       double     %lf   %le
       sizeof(double)
       printf("%d  %d  %d\n",sizeof(int),sizeof(float),sizeof(double));

       double rad;
       scanf("%lf",&rad);
       printf("%lf\n",rad);


......

        -----------------------------------------------------
                              Exercício
        -----------------------------------------------------

Imprimir uma tabela de senos e cosenos para os ângulos
0, 10, ..., 180 com o seguinte formato

                      x       seno        coseno
                   --------------------------------
                      0   0.000000      1.000000
                     10   0.173648      0.984808
                    ...   ........      ........
                    180  -0.000003     -1.000000

Notas:
   No início:    #include <math.h>
   Compilação:   gcc -lm tab.c
   Nas funções do sistema sin(), cos(),... os ângulos são e radianos
   PI = 3.1415927


seno.c


        -----------------------------------------------------
                              Exercício
        -----------------------------------------------------

Escreva um programa que determine experimentalmente de forma aproximada
o maior "double" representável / ...o menor...

Método: inicie x=1; imprima x e multiplique por (p. ex.) 2
        até ocorrer "overflow". Como é que se verifficou o "overflow"?

max.c


        -----------------------------------------------------
                              Exercício
        -----------------------------------------------------

Método das bissecções sucessivas para determinar uma raíz
---------------------------------------------------------
Escreva um programa que determine de forma a raiz de uma equação
                                f(x)=0
onde f() é uma função do programa, por exemplo
                        double f(double x){
                          return(sin(x)-cos(x));
                        }
São dados os limites a, b, entre os quais a raiz se encontra e
o erro máximo tolerável.

Em cada passo:
   - determina-se m=(a+b)/2;
   - se o sinal de m é igual ao de a, faz-se a=m
   - caso contrário,                  faz-se b=m
até |a-b|<erro.
O programa escreve no fim a (ou b, ou (a+b)/2).

Se houver mais que uma raíz? Experimentar... como proceder...


        -----------------------------------------------------
                              Exercício
        -----------------------------------------------------

Seja f(x) não negativa em [a,b]. Um método aproximado de calcular
a área entre [a,b] e f(x) é
   - dividir [a,b] em n intervalos 
             [a,a+h], [a+h,a+2h],..., [a+(n-1)h,b]
   - somar a contribuição de cada parte
             (f(a+ih)+f(a+(i+1)h))/2*h





          f(a+ih) ........
                         |\
                         | \
                         |  \
                         |   \.............. média
                         |    \
                         |     \
                         |      \
          f(a+(i+1)h)... | ......|
                         |       |
                         |       |
                         |       |  Área do trapézio:
                         |       |   (f(a+ih)+f(a+(i+1)h))/2*h
                         |       |
                         |   h   |
         ----------------------------------------
            a    a+h    a+2h    a+3h  .......  b


Escreva um programa contendo a função f() que, dados a, b e n
determine a área referida.

Esquema:

            s=0.0;
            for(i=0;i<n;i++)
              s = s + (f(i*h)+f((i+1)*h))/2 * h;

Experimente com f(x)=c0s(x), a=0, b=pi/2 = 1.570796, n=100.
O resultado exacto é 1.

PC/PI - página reservada - versão 2005.02.08

Aula 10Aulas teóricas - notas...Aula 8Aula 9