Aqui você encontra infomações sobre Informática, Eletrônica, Elétrica, Mecânica e Automação

quarta-feira, 13 de abril de 2011

Linguagem C (parte 4)

Looping: um exemplo real Suponhamos que você queira criar um programa que imprima uma tabela de conversão Fahrenheit para Celsius. Isso pode ser facilmente obtido com um loop for ou loop while:
#include <stdio.h>
  
int main()
{
      int a;
      a = 0;
      while (a <= 100)
      {
          printf("%4d graus F = %4d graus C\n",
              a, (a - 32) * 5 / 9);
          a = a + 10;
      }
      return 0;
}  
Se executar este programa, ele produzirá uma tabela de valores iniciando em 0 graus F e terminando em 100 graus F. O resultado será este:
0   graus  F =  -17 graus C 
10  graus  F =  -12 graus C
20  graus  F =   -6 graus C
30  graus  F =   -1 graus C
40  graus  F =    4 graus C    
50  graus  F =   10 graus C    
60  graus  F =   15 graus C    
70  graus  F =   21 graus C    
80  graus  F =   26 graus C    
90  graus  F =   32 graus C   
100 graus  F =   37 graus C      
Os valores da tabela estão em incrementos de 10 graus. Observe como é fácil alterar os valores iniciais, finais ou de incremento da tabela que o programa produz.
Para valores mais precisos, você pode usar valores de ponto flutuante:
#include <stdio.h>

int main()
{      
     float a;     
     a = 0;
      while (a <= 100)
      {
          printf("%6.2f graus F = %6.2f graus C\n",
              a, (a - 32.0) * 5.0 / 9.0);
          a = a + 10;
      }
      return 0;
  }  
Você pode ver que a declaração de a foi alterada para flutuante, e o símbolo %f substitui o símbolo %d na instrução printf. Além disso, o símbolo %f possui alguma formatação: o valor será impresso com 6 dígitos inteiros e 2 decimais.
Agora vamos supor que queiramos modificar o programa para que a temperatura 98.6 seja inserida na tabela na posição adequada. Isto é, queremos que a tabela aumente a cada 10 graus e que inclua uma linha extra para 98.6 graus F, que é a temperatura corpórea normal do ser humano. O programa seguinte atende essa finalidade:
#include <stdio.h>

int main()  
{
      float a;
      a = 0;
      while (a <= 100)
      {
       if (a > 98.6)   
          {
              printf("%6.2f graus F = %6.2f graus C\n",
                  98.6, (98.6 - 32.0) * 5.0 / 9.0);
          }
          printf("%6.2f graus F = %6.2f graus C\n",
              a, (a - 32.0) * 5.0 / 9.0);
          a = a + 10;
      }
      return 0;
  }  
Este programa funciona se o valor final for 100, mas se você alterar o valor final para 200, verá que o programa tem um bug. Ele imprime a linha de 98.6° várias vezes. Este problema pode ser corrigido de várias formas. Eis uma:
#include <stdio.h>

int main()
{
      float a, b;
      a = 0;
      b = -1;
      while (a <= 100)
      {
       if ((a > 98.6) && (b < 98.6)) 
         {
              printf("%6.2f graus F = %6.2f graus C\n",
                  98.6, (98.6 - 32.0) * 5.0 / 9.0);
          }
          printf("%6.2f graus F = %6.2f graus C\n",
              a, (a - 32.0) * 5.0 / 9.0);
          b = a;
          a = a + 10;
      }
      return 0;
} 
  

Tente isto

  • Tente alterar o programa conversor Fahrenheit-Celsius de modo que ele utilize scanf para aceitar o valor inicial, final e de incremento daquele usuário.
  • Adicione uma linha de cabeçalho à tabela que é gerada.
  • Tente encontrar uma solução diferente para o bug corrigido pelo exemplo anterior.
  • Crie uma tabela que converta libras em quilogramas ou milhas em quilômetros.


Erros a serem evitados na linguagem C

  • Colocar = quando se deseja == em uma instrução if ou while.
  • Esquecer de aumentar o contador dentro do loop while. Isso causa um loop infinito (o loop nunca acaba).
  • Acidentalmente colocar um ; no final de um loop for ou instrução if, pois isto anula a instrução. Por exemplo:
    for (x=1; x<10; x++);
        printf("%d\n",x);  
    imprime apenas um valor, pois o ponto-e-vírgula após a instrução for atua como uma linha para a execução do loop for.

Nenhum comentário: