Centro Tecnológico de Mecatrônica / Centro Tecnológico Automotivo Disciplina PROGRAMAÇÃO Instrutor DANIEL CORTELETTI O comando if. IF em inglês significa SE. O mais utilizado comando condicional da linguagem C. Como o nome já sugere, este comando define uma estrutura condicional para operações que serão realizadas perante uma determinada condição. Em outras palavras, este comando AVALIA uma condição, e se ela for verdadeira, executa uma instrução ou seqüência de instruções. Adicionando-se o comando ELSE (que do inglês significa SENÃO) é possível se incluir uma instrução ou lista de instruções que serão executadas no caso da condição ser negada. A forma geral de um if é if (condição) ... linha ou bloco de instruções se a condição for 1 (verdadeira) ... else ... linha ou bloco de instruções se a condição for 0 (falsa) ... É importante observar que o ELSE (senão) não é obrigatório. Lembre também que uma linha de instruções é sempre terminada por um ponto e vírgula (;), e um bloco de instruções é delimitado por chaves ({ ... }), mas após a condição (parênteses) do if NÃO DEVERÁ SER utilizada o ponto e vírgula. São exemplos de ifs válidos : if (x == 5) { x = 0; printf(lcd_putc,"\nX valia 5 e \nagora vale 0"); // zera x // escreve mensagem } else printf(lcd_putc,"\nX não vale 5..."); // por ser uma única instrução, não precisa das chaves if ( x % 2 == 1 ) printf (lcd_putc,"\n%u é um número ímpar.",x); if ( input(PIN_D7) x = 1; else { x ++; output_high(PIN_E0); delay_ms(100); output_low(PIN_E0); // se resto de X por 2 for igual a 1 // escreve mensagem // se A1 estiver acionado, x passa a valer 1 // senão // // // // aumenta X uma unidade liga pino D0 tempo de 100 milésimos desliga pino D0 } Isso é muito importante, portanto lembre-se : • • Após o comando if, entre parênteses, deve constar a condição, que deve resultar um valor lógico 0 ou 1. São válidos operadores relacionais e lógicos. Após o if (condição), pode existir uma expressão (Uma única linha finalizada por um ponto e vírgula, ou um bloco de instruções – várias linhas – delimitados por um abre e fecha chaves). Impresso em 7/10/2009 11:49 – Página 1 Centro Tecnológico de Mecatrônica / Centro Tecnológico Automotivo Disciplina PROGRAMAÇÃO Instrutor DANIEL CORTELETTI if’s aninhados Existem situações em que temos que implementar uma decisão dentro do código executado por outra decisão, ou seja, um if dentro de outro. A isso, chamamos de estruturas condicionais aninhadas, ou if’s aninhados. Exemplo: Exercícios 1) Complete as lacunas do programa abaixo, e execute o programa na estação PLCPiC #include <16f877.h> #use delay (clock=____________) // Verifique o valor do clock que irás utilizar void main() { while(1) // identifica laço infinito { ___________________________ // se o pino D0 estiver acionado ... { // inicia bloco de instruções para o if ______________________ // aciona o pino E2 delay_ms(50); // tempo de 50 milésimos de segundo ______________________ // desliga o pino E2 delay_ms(100); // tempo de 100 milésimos de segundo } // fim do bloco de instruções __________________________ // se o pino D1 estiver acionado ... ______________________ // inicia um bloco de instruções para o if ______________________ // aciona todos os bits do PORTC ______________________ // tempo de 100 milésmos de segundo ______________________ // finaliza o bloco de instruções do if } ___________________________ // se o pino D2 estiver acionado ... ______________________; // desativa todos os bits do PORTC } } Impresso em 7/10/2009 11:49 – Página 2 Centro Tecnológico de Mecatrônica / Centro Tecnológico Automotivo Disciplina PROGRAMAÇÃO Instrutor DANIEL CORTELETTI 2) Para o programa abaixo: 1 #include <16f877.h> 2 #use delay (clock=20000000) // Verifique o valor do clock que irás utilizar 3 void main() 4 { 5 int x = 0; 6 output_C(0); // desliga todo o PORTC 7 while(1) // identifica laço infinito 8 { 9 if (x < 30) 10 x ++; 11 else 12 { 13 if (input(PIN_D0) && input(PIN_D7)) 14 { 15 output_high(PIN_E2); 16 delay_ms(100); 17 output_low(PIN_E2); 18 delay_ms(100); 19 } 20 output_high(PIN_C0); 21 } 22 output_high(PIN_C7); 23 delay_ms(100); 24 output_low(PIN_C7); 25 delay_ms(900); 26 } 27 } 2.1) A linha 16 (delay_ms(100)) é executada em que situação? ( ) Somente uma vez. ( ) Em cada ciclo do programa. ( ) Somente quando X for inferior a 30. ( ) Se X for igual ou superior a 30. ( ) Se X for igual ou superior a 30 e D0 e D7 estiverem AMBOS acionados. ( ) Se X for maior que 30 e D0 ou D7 estiverem acionados. 2.2) A linha 24 é executada em que situação ? ( ) Somente uma vez. ( ) Em cada ciclo do programa. ( ) Somente quando X for inferior a 30. ( ) Se X for igual ou superior a 30. ( ) Se X for igual ou superior a 30 e D0 e D7 estiverem AMBOS acionados. ( ) Se X for maior que 30 e D0 ou D7 estiverem acionados. 2.3) A linha 6 é executada em que situação ? ( ) Somente uma vez. ( ) Em cada ciclo do programa. ( ) Somente quando X for inferior a 30. ( ) Se X for igual ou superior a 30. ( ) Se X for igual ou superior a 30 e D0 e D7 estiverem AMBOS acionados. ( ) Se X for maior que 30 e D0 ou D7 estiverem acionados. 2.4) Insira comentários apropriados ao lado das seguintes linhas: 6, 9, 10, 11, 13 Impresso em 7/10/2009 11:49 – Página 3