AULA 10 - Microcontroladores - Técnico

De IFSC
Revisão de 18h54min de 12 de abril de 2017 por imported>Fargoud (→‎Exemplo:)
Ir para navegação Ir para pesquisar

Considera-se comando válido em C, qualquer expressão válida, seguida por um ponto-e-vírgula (;), ou expressão entre chaves ({}). Ex:

  a = 5; 

Neste capítulo, entretanto, trataremos de comandos de controle de fluxo.

Pode-se dividir os comandos de controle de fluxo do C, em três categorias:

  • instruções condicionais (if e switch),
  • comandos de controle de loop (while, for e do-while) e
  • instrução de desvio incondicional (goto).

A INSTRUÇÃO IF

A forma geral da declaração if é:

if(condição_de_teste)
 comando;

A interpretação é:

"Se a condição_de_teste for verdadeira (não-zero), executa comando". 

Caso contrário, a execução é transferida para a instrução seguinte ao comando if.

Ex:

   if (x==5)  y=3;   

Se comando contiver mais de uma instrução, o bloco deve ser colocado entre chaves ( {} ):

if(condição_de_teste)
{   comando1;
    comando2;
    comando3;
    ...
}

Exemplo:

 #include <stdio.h>
 int main ()
 {
   int num;
   printf ("Digite um numero: ");
   scanf ("%d",&num);
   if (num>10) 
       printf ("\n\nO numero \202 maior que 10\n\n\n");
   if (num==10)
   {
      printf ("\n\nVoce acertou!\n");
      printf ("O numero \202 igual a 10.\n\n\n");
   }
   if (num<10) 
       printf ("\n\nO numero \202 menor que 10\n\n\n");
   return (0);
}

A INSTRUÇÃO IF-ELSE

A forma geral da declaração if-else é:

    if(condição_de_teste)   
       comando1;
   else	
       comando2;

A interpretação é: "Se a condição_de_teste for verdadeira (não-zero), executa comando1, Senão, executa comando2". Ex:

            if ( x < 6)   
                     y = 1;
            else
                     y = 2;     

Os comandos if e if-else podem ser aninhados!!!

Isto ocorre quando uma série de testes sucessivos tem que ser feita, para fazer-se a escolha da instrução a ser executada.

A sintaxe pode ser tal como:

if(condição1)
   if(condição2)
       comando1;  //instrução executada quando condição1 e condição2 forem V
   else
       comando2;  //instrução executada quando condição1 for V e condição2 for F
else
   if(condição3)
       comando3;  //instrução executada quando condição1 for F e condição3 for V
   else
       comando4; //instrução executada quando condição1 e condição3 forem F


Exercício:

Um professor de educação física especificou a tabela abaixo que define o tempo de treinamento para alunos do sexo feminino e masculino, jovens ou adultos.

Escreva o programa que implementa a tabela abaixo, isto é, lê a idade e sexo do usuário e devolve o tempo de treinamento recomendado.

Idade: Feminino Masculino
<= 30 anos t = 15’ t = 45’
> 30 anos t = 25’ t = 60’

Mas há que se ter cuidado com o que é interno, o que é externo e a qual if pertence cada else e com a endentação!!!!!

Ex:

O algoritmo: é diferente de: e de: e de: ...
if ( i > 2) if ( j == 3) y = 4; else y = 5; if ( i > 2) { if( j == 3) y = 4; } else y = 5; if (i > 2); if( j == 3) y = 4; else y = 5; if (i > 2) { if( j == 3); y = 4; } else y = 5;

No primeiro caso, o else refere-se ao if mais interno e no segundo caso, ao if externo, pelo uso das chaves.

No terceiro caso e no quarto casos, o ponto-e-vírgula “terminou” a instrução if, antes que esta executasse qualquer comando interno.

Obs:

 if (a > b)   c = a;                                 
 else         c = b;           

É equivalente a:

c = ( a > b ) ? a : b ;   


Obs2: Em expressões condição_de_teste não-relacionais deve-se tomar cuidado:

if (i == 3)  y = 5;  		-> se i for igual a 3, y igual a 5
if (i = 3)   y = 5;  		® se i=3 for não zero (o que é SEMPRE TRUE!), y igual a 5 .

Obs3:

if ( i != 0)  y = 3;    

é equivalente a

if (i) y = 3;  


Exercício:

Crie um programa de adivinhação, utilizando os comandos if e if-else.

O programa pede um número ao usuário, verifica se este é igual ao número mágico (previamente definido) e imprime " ** Certo **", caso a pessoa tenha acertado ou " ** O número mágico é maior que .... ** " o número que a pessoa digitou, ou ainda " ** O número mágico é menor que ... ** " o número digitado.


Exemplos

/**********************************************************************/
/***  Programa 3:  Demonstrar Estrutura IF - ELSE                 ****/
/**********************************************************************/
/*   Este programa localiza a percentagem de dias abaixo gelados!!    */
#include <stdio.h>
#define ESCALA "celsius"
#define GELANDO 0
int main(void)
{
   float temperatura;
   int gelando = 0;
   int dias =0; 
   printf("Entre com a relacao das temperatura dos dias gelados.\n");
   printf("Use escala %s, e entre s para sair.\n", ESCALA);
   while (scanf("%f", &temperatura) == 1)
   {     dias++;
          if(temperatura < GELANDO)
              gelando++;
   }
   if (dias!=0)
       printf("Do total de %d dias: %.1f\% foram abaixo de zero.\n", dias, 100.0*(float) gelando/dias);
   else
       printf("Nao foi fornecido nenhum dado!\n");
  return 0;
}


A INSTRUÇÃO WHILE

A forma geral da declaração while é:

while( expressão_de_teste)
  comando;

A interpretação é: "Enquanto expressão_de_teste for verdadeira; execute comando".

No momento em que expressão_de_teste deixa de ser não-zero, a execução continua na linha de comando seguinte ao laço while.

Se houver vários comandos internos ao loop while, estes devem estar entre chaves ({ }).

Ex:

  i=0;
  ...       
  while(i < 10)
  {   a = b * 2;
      chama_função( );
      i++;
  } 

É importante salientar que se a expressão_de_teste não for verdadeira já no primeiro teste do laço este não será executado nenhuma vez e que o comando while é mais apropriado para laços onde o número de interações não é conhecido de antemão.

Por exemplo, como saber quantas vezes o usuário vai digitar caracteres para um número ou uma string de entrada?

Exemplos:

#include  <stdio.h>
#include <conio.h>
void main(void)
{ int cont=0;
  printf("Digite uma frase: \n");
  while(getche()!= 13)          /* O caractere com ASCII igual a 13 é a tecla enter (return) */
    cont++;
  printf("\nO numero de caracteres é %d", cont); } 


i = 0;                                            i = 5;
...                                               ...
while (i<5)            É equivalente a            while (i)
   i++;                                              i--;
   ...                                               ...


/*************************************************************************/
/****  Programa que imprime números de 1 a 10 utilizando laço while: *****/
/************************************************************************/
#include <stdio.h>
void main(void)
{  int contador = 1;
   while (contador <= 10)
  {    printf("%d\n", contador);
       contador++;
  }
}


Respostas do Exercício da Apostila

#include <stdio.h>
int main()
{  int idade;
  char sexo, nome[20];
   printf("****PROGRAMA DA ACADEMIA*****\n\n");
   printf("\n\nDigite o seu nome:");
   gets(nome);
   printf("\nEntre com a sua idade %s: > ", nome);
   scanf("%d",&idade);
   printf("\nVc \202 do sexo (f)eminino ou (m)asculino, %s? > ", nome);
   sexo = getche();
   /** TREINAMENTO PARA MULHERES: **/
   if(sexo=='f'||sexo=='F')
       if(idade<= 30)
           printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 15 minutos.");
       else
           printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 25 minutos.");
   /** TREINAMENTO PARA HOMENS: **/
   else
     if(sexo=='m'||sexo=='M')
       if(idade<= 30)
           printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 45 minutos.");
       else
           printf("\n\n\nSeu tempo ideal de treinamento, %s, \202 de 60 minutos.");
     else printf("\nSexo inaceitavel!!");
   return 0;

}

Programa do Número Mágico

#include <stdio.h>
#define MAGICO 47
int main()
{ int aposta=0;
   printf("*****                     *****\n");
   printf("***** PROGRAMA DO NUMERO MAGICO  *****\n");
   printf("*****                      *****\n");
   while(aposta != MAGICO)
   {
       printf("\n\nEntre com um numero de 0 a 100:  ");
       scanf("%d", &aposta);
       if(aposta > MAGICO)
           printf("\nO numero magico \202 menor que isto.\nChute + baixo...");
       else
         if(aposta < MAGICO)
           printf("\nO numero magico \202 maior que isto.\nChute + alto...");
         else
           printf("\n\nVOCE ACERTOU!!!! Parabens!!!\n\n\n");
   }
   return 0;
}

<< Página do curso

<< Aula 10 - Operadores AULA 11 - Microcontroladores Aula 12 - Instruções DO-WHILE, FOR e SWITCH >>