Mudanças entre as edições de "MCO018703 2018 2 AULA04"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(13 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 4: Linha 4:
 
*Utilizar o comando de decisão ''if else''.
 
*Utilizar o comando de decisão ''if else''.
  
=Funções para Controle de Fluxo=
+
=Funções para Controle de Fluxo - Decisão=
  
 
==if( )==  
 
==if( )==  
  
É um controle de fluxo usado para selecionar uma ou mais instruções baseado no resultado de um teste de comparação. Todas as instruções entre as chaves { e } são executadas somente se o resultado desse teste for verdadeiro; se não, essas instruções não são executadas. Verdadeiro é qualquer resultado, mesmo negativo, diferente de zero. Falso é um resultado zero.
+
É um controle de fluxo usado para selecionar uma ou mais instruções baseado no resultado de um teste de comparação. Todas as instruções entre as chaves { } são executadas somente se o resultado desse teste for verdadeiro; se não, essas instruções não são executadas. Verdadeiro é qualquer resultado, mesmo negativo, diferente de zero. Falso é um resultado zero. A Figura 1 mostra o controle de fluxo utilizando os comandos '''if''' e '''if...else'''.
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 18: Linha 18:
 
[[imagem:Fig037_MCO018703.jpg|600px|center]]
 
[[imagem:Fig037_MCO018703.jpg|600px|center]]
 
<center>
 
<center>
Figura 1 - Controle de Fluxo '''if''' e '''if...else'''.
+
Figura 1 - Controle de Fluxo com os comandos '''if''' e '''if...else'''.
 
</center>
 
</center>
  
 
==if( )...else==  
 
==if( )...else==  
  
Ao se acrescentar mais um bloco de instruções no loop do comando '''if''' pode-se criar o comando '''if...else''', para fazer um novo teste quando o resultado da expressão for falsa.  
+
Ao se acrescentar mais um bloco de instruções no loop do comando '''if''' pode-se criar o comando '''if...else''' (Figura 1), para fazer um novo teste quando o resultado da expressão for falsa.  
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 36: Linha 36:
 
==if( )...else if( )==  
 
==if( )...else if( )==  
  
E de novo ao se acrescentar agora o comando '''if...else''' no loop do comando if pode-se criar mais um outro comando, o '''if...else if'''. No exemplo abaixo se "expressão1" for verdadeira o "bloco de instruções1" é executado; se "expressão1" for falsa mas "expressão2" for verdadeira "bloco de instruções2" é executado; e se "expressão1" e "expressão2" forem falsas o "bloco de instruções3"  é executado.
+
E de novo ao se acrescentar agora o comando '''if...else''' no loop do comando '''if''' pode-se criar mais um outro comando, o '''if...else if'''. No exemplo abaixo se "expressão1" for verdadeira o "bloco de instruções1" é executado; se "expressão1" for falsa mas "expressão2" for verdadeira "bloco de instruções2" é executado; e se "expressão1" e "expressão2" forem falsas o "bloco de instruções3"  é executado. A Figura 2 mostra os comandos '''if( )...else if( )''' e '''switch...case'''.
  
 
[[imagem:Fig038_MCO018703.jpg|600px|center]]
 
[[imagem:Fig038_MCO018703.jpg|600px|center]]
 +
<center>
 +
Figura 2 - Controle de Fluxo usando os comandos '''if( )...else if( )''' e '''switch...case'''.
 +
</center>
  
  
Linha 55: Linha 58:
 
==switch...case==  
 
==switch...case==  
  
É possível ir inserindo comandos  '''if...else '''na posição do segundo bloco de instruções de outro comando '''if...else '''e assim criar uma cadeia de comandos para testar dezenas de expressões até encontrar uma que retorne um resultado verdadeiro e executar um dos blocos de instruções; mas existe um comando próprio que simplifica bastante essa seleção, é o comando '''switch...case'''. Esse comando permite comparar uma mesma variável inteira, ou uma expressão que retorne um inteiro, com vários valores possíveis.   
+
É possível ir inserindo comandos  '''if...else '''na posição do segundo bloco de instruções de outro comando '''if...else '''e assim criar uma cadeia de comandos para testar dezenas de expressões até encontrar uma que retorne um resultado verdadeiro e executar um dos blocos de instruções; mas existe um comando próprio que simplifica bastante essa seleção, é o comando '''switch...case''' (Figura 2). Esse comando permite comparar uma mesma variável inteira, ou uma expressão que retorne um inteiro, com vários valores possíveis.   
  
 
; switch..,case
 
; switch..,case
Linha 72: Linha 75:
 
=Operadores Relacionais e Lógicos=
 
=Operadores Relacionais e Lógicos=
  
Os operadores relacionais e lógicos são os mesmos vistos na aula anterior.
+
Vamos recordar os principais operadores relacionais e lógicos vistos nas aulas anteriores.
  
 
;Relacionais
 
;Relacionais
Linha 116: Linha 119:
 
Ver [http://www.ead.cpdee.ufmg.br/cursos/C/c.html Operadores Relacionais e Lógicos]
 
Ver [http://www.ead.cpdee.ufmg.br/cursos/C/c.html Operadores Relacionais e Lógicos]
  
 +
=Exemplos=
 +
 +
[1] Acender o LED se digitar 1 no monitor serial.
 +
 +
<syntaxhighlight lang=c>
 +
byte estebyte; // variável que vai receber o valor do monitor serial
 +
void setup() {
 +
    pinMode(10, OUTPUT);
 +
    Serial.begin(9600);
 +
}
 +
 +
void loop() {
 +
    Serial.println("Digite 1 no Monitor para acender o LED: ");
 +
    while(true)
 +
    {
 +
      if(Serial.available() > 0)
 +
      {
 +
        estebyte = Serial.read();
 +
        if(estebyte == '1') // Digitou 1 no Monitor Serial
 +
        {
 +
          digitalWrite(10, HIGH);
 +
          Serial.println(" LED ACESO!");
 +
        }
 +
      }//end if
 +
  }//end while
 +
}//end loop
 +
 +
</syntaxhighlight>
 +
 +
[2] Acende o LED se digitar 1 no monitor serial senão for 1 apaga.
 +
 +
<syntaxhighlight lang=c>
 +
byte estebyte; // variável que vai receber o valor do monitor serial
 +
void setup() {
 +
    pinMode(10, OUTPUT);
 +
    Serial.begin(9600);
 +
}
 +
 +
void loop() {
 +
    Serial.println("Digite 1 no Monitor para acender o LED e qualquer outro para apagar: ");
 +
    while(true)
 +
    {
 +
      if(Serial.available() > 0)
 +
      {
 +
        estebyte = Serial.read();
 +
        if(estebyte == '1') // Digitou 1 no Monitor Serial
 +
        {
 +
          digitalWrite(10, HIGH);
 +
          Serial.println(" LED ACESO!");
 +
        }
 +
        else
 +
        {
 +
          digitalWrite(10, LOW);
 +
          Serial.println(" LED APAGADO!");
 +
        }
 +
      }//end if
 +
  }//end while
 +
}//end loop
 +
 +
</syntaxhighlight>
  
 +
[3] Acende o LED se digitar 1 no monitor serial senão se for 2 apaga.
  
 +
<syntaxhighlight lang=c>
 +
byte estebyte; // variável que vai receber o valor do monitor serial
 +
void setup() {
 +
    pinMode(10, OUTPUT);
 +
    Serial.begin(9600);
 +
}
  
 +
void loop() {
 +
    Serial.println("Digite 1 no Monitor para acender o LED e digite 2 para apagar o LED: ");
 +
    while(true)
 +
    {
 +
      if(Serial.available() > 0)
 +
      {
 +
        estebyte = Serial.read();
 +
        if(estebyte == '1') // Digitou 1 no Monitor Serial
 +
        {
 +
          digitalWrite(10, HIGH);
 +
          Serial.println(" LED ACESO!");
 +
        }
 +
        else if(estebyte == '2') // Digitou 2 no Monitor Serial
 +
        {
 +
          digitalWrite(10, LOW);
 +
          Serial.println(" LED APAGADO!");
 +
        }
 +
      }//end if
 +
  }//end while
 +
}//end loop
 +
 +
</syntaxhighlight>
  
 +
[4] Desafio: Acrescente mais um LED no seu experimento e, utilizando o comando '''switch..case''', crie todas as possibilidades de acender e apagar os dois LEDs.
  
 
-----
 
-----

Edição atual tal como às 19h37min de 27 de agosto de 2018

Objetivos

  • Aprender sobre funções para controle de de fluxo;
  • Utilizar o comando de decisão if else.

Funções para Controle de Fluxo - Decisão

if( )

É um controle de fluxo usado para selecionar uma ou mais instruções baseado no resultado de um teste de comparação. Todas as instruções entre as chaves { } são executadas somente se o resultado desse teste for verdadeiro; se não, essas instruções não são executadas. Verdadeiro é qualquer resultado, mesmo negativo, diferente de zero. Falso é um resultado zero. A Figura 1 mostra o controle de fluxo utilizando os comandos if e if...else.

if (expressão){
   bloco de instruções; // se "expressão" for verdadeira, "bloco de instruções" é executado
}
Fig037 MCO018703.jpg

Figura 1 - Controle de Fluxo com os comandos if e if...else.

if( )...else

Ao se acrescentar mais um bloco de instruções no loop do comando if pode-se criar o comando if...else (Figura 1), para fazer um novo teste quando o resultado da expressão for falsa.

if (expressão) {
   bloco de instruções1; // se "expressão" for verdadeira, "bloco de instruções1" é executado
}
else {
   bloco de instruções2; // se "expressão" for falsa, "bloco de instruções2" é executado 
}

if( )...else if( )

E de novo ao se acrescentar agora o comando if...else no loop do comando if pode-se criar mais um outro comando, o if...else if. No exemplo abaixo se "expressão1" for verdadeira o "bloco de instruções1" é executado; se "expressão1" for falsa mas "expressão2" for verdadeira "bloco de instruções2" é executado; e se "expressão1" e "expressão2" forem falsas o "bloco de instruções3" é executado. A Figura 2 mostra os comandos if( )...else if( ) e switch...case.

Fig038 MCO018703.jpg

Figura 2 - Controle de Fluxo usando os comandos if( )...else if( ) e switch...case.


if (expressão1) {
   bloco de comandos1; 
}
else if (expressão2) {
   bloco de instruções2; 
}
else {
   bloco de comandos3; 
}

switch...case

É possível ir inserindo comandos if...else na posição do segundo bloco de instruções de outro comando if...else e assim criar uma cadeia de comandos para testar dezenas de expressões até encontrar uma que retorne um resultado verdadeiro e executar um dos blocos de instruções; mas existe um comando próprio que simplifica bastante essa seleção, é o comando switch...case (Figura 2). Esse comando permite comparar uma mesma variável inteira, ou uma expressão que retorne um inteiro, com vários valores possíveis.

switch..,case
switch (expressão) {
  case 1:  bloco de instruções1; 
           break;
  case 2:  bloco de instruções2; 
           break;
  case 3:  bloco de instruções3; 
           break;
  default: bloco de instruções4; 
}

Operadores Relacionais e Lógicos

Vamos recordar os principais operadores relacionais e lógicos vistos nas aulas anteriores.

Relacionais
Operador Significado
> maior que
>= maior ou igual que
< menor que
<= menor ou igual que
== igual a
!= diferente de


Lógicos
Operador Significado
&& AND (E)
|| OR (OU)
! NOT (NÃO)

Ver Operadores Relacionais e Lógicos

Exemplos

[1] Acender o LED se digitar 1 no monitor serial.

byte estebyte; // variável que vai receber o valor do monitor serial
void setup() {
    pinMode(10, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    Serial.println("Digite 1 no Monitor para acender o LED: ");
    while(true)
    { 
      if(Serial.available() > 0)
      { 
        estebyte = Serial.read();
        if(estebyte == '1') // Digitou 1 no Monitor Serial
        { 
          digitalWrite(10, HIGH);
          Serial.println(" LED ACESO!");
        }
      }//end if
   }//end while
}//end loop

[2] Acende o LED se digitar 1 no monitor serial senão for 1 apaga.

byte estebyte; // variável que vai receber o valor do monitor serial
void setup() {
    pinMode(10, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    Serial.println("Digite 1 no Monitor para acender o LED e qualquer outro para apagar: ");
    while(true)
    { 
      if(Serial.available() > 0)
      { 
        estebyte = Serial.read();
        if(estebyte == '1') // Digitou 1 no Monitor Serial
        { 
          digitalWrite(10, HIGH);
          Serial.println(" LED ACESO!");
        } 
        else
        {
          digitalWrite(10, LOW);
          Serial.println(" LED APAGADO!");
        }
      }//end if
   }//end while
}//end loop

[3] Acende o LED se digitar 1 no monitor serial senão se for 2 apaga.

byte estebyte; // variável que vai receber o valor do monitor serial
void setup() {
    pinMode(10, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    Serial.println("Digite 1 no Monitor para acender o LED e digite 2 para apagar o LED: ");
    while(true)
    { 
      if(Serial.available() > 0)
      { 
        estebyte = Serial.read();
        if(estebyte == '1') // Digitou 1 no Monitor Serial
        { 
          digitalWrite(10, HIGH);
          Serial.println(" LED ACESO!");
        } 
        else if(estebyte == '2') // Digitou 2 no Monitor Serial
        {
          digitalWrite(10, LOW);
          Serial.println(" LED APAGADO!");
        }
      }//end if
   }//end while
}//end loop

[4] Desafio: Acrescente mais um LED no seu experimento e, utilizando o comando switch..case, crie todas as possibilidades de acender e apagar os dois LEDs.


Icone voltar.png Icone menu.png Icone prox.png