Teoria linguagem c


Tipos de Estruturas de Controle



Baixar 2.75 Mb.
Página14/30
Encontro30.10.2016
Tamanho2.75 Mb.
1   ...   10   11   12   13   14   15   16   17   ...   30

Tipos de Estruturas de Controle

As estruturas de controle são usadas nos programas em lugares em que a máquina deve realizar repetidas operações ou precisa de tomadas de decisão.
A linguagem C oferece um grande número de estruturas de controle do fluxo de um programa.


if

else

do

switch case

while

for


    1. A Estrutura if (se)

A estrutura if (‘se’ em português) é uma estrutura de tomada de decisão baseada no resultado lógico de um teste. Sua forma geral é:
if(condição) comando;

ou

if(condição){



comando 1;

comando 2;

comando n;

}
Em C, qualquer número diferente de zero é tido como verdadeiro. O que significa que uma condição em C só é falsa, quando o resultado dos operadores que foram aplicados for zero (0). Qualquer outro valor, mesmo quando negativo, ou seja, não zero é considerado verdadeiro.


No comando if, se a condição resultar verdadeira (não zero), então o comando é executado. Se a condição for falsa, a execução de comando é ignorada.
Exemplo:

#include //contém as definições do chip

void main(){ //declara início do programa

int contagem=0; //declara variável e inicializa em 0


if(P3_0) contagem++; //se P3.0 receber nível alto,

//incrementa contagem em 1

} //declara fim do programa



No exemplo acima, a estrutura if verifica se a entrada P3.0 é verdadeira (ou não zero). Se a entrada P3.0 estiver conectada ao +5Vcc, o teste if retornará valor verdadeiro e o comando contagem++ será executado.


Vejamos agora um programa onde a instrução contagem++ será executada apenas se a entrada P3.0 for zero (ou seja, tiver nível lógico zero).

#include //contém as definições do chip

void main(){ //declara início do programa

int contagem=10; //declara variável e inicializa em 10


if(P3_0==1) contador--; //se entrada P3.0 estiver em 1

//decrementa uma unidade,

} //fim do programa

A estrutura if permite que a condição seja uma expressão da linguagem C, com todas as possibilidades de combinação de operadores. Veja os exemplos:


int i=10;

int j=5;


if(i==1)j++;

if(i!=10)i=5;

if(i==j)i--;


      1. Observação Importante

O operador de atribuição de igualdade em C (=) é diferente do operador relacional de igualdade (==) igual a. Para testar uma variável usamos o operador relacional de igualdade (==). Exemplo:
int a=10;

if(a==10)a++;

Vejamos agora, o uso incorreto do operador relacional de atribuição. Este erro é muito comumente cometido pelos programadores. Exemplo:
if(a=10)a++;
Se utilizarmos o operador de atribuição (=), pensando em comparar uma variável, veja como o compilador interpreta essa expressão:

if(a=10)a++;  Se a=10, então o valor 10 é armazenado na variável a. O que equivale a comparar: if(10)a++;  Se 10 for um valor verdadeiro (ou não zero), então a condição é verdadeira e a variável a é incrementada em um.





    1. A Estrutura if-else

A estrutura if else é mais completa do que a simples estrutura if. Isto ocorre por que a estrutura else (senão) permite definir comandos a serem executados caso o teste seja falso (0).
int i=10;

int j=5;
if(i==10)j++; //se i for igual a 10, incrementa j

else j--; //senão, decrementa j
Além disso, podemos ter um conjunto de comandos em cada teste if else. Exemplo:

if(P3_0==1){ //se a entrada P3.0 receber +5V,

P0_0=1; // Ativa saída P0.0

P0_1=1; // Ativa saída P0.1

}

else{ // senão, se entrada P3.0 receber 0V



P0_0=0; // desliga saída P0.0 (0 Volt)

P0_1=0; // desliga saída P1.0 (0 Volt)

}

Caso haja mais de um comando if, o comando else estará sempre relacionado ao último comando if. Exemplo:


if(P3_5==1)P0=15; //se P3_6 receber +5V, ativa P0.0 a P0.3

if(P3_6==1)P0=240; //se P3_5 receber +5V, ativa P0.4 a P0.7

else P0=0;


Note que não há necessidade de abre e fecha-chaves quando as expressões possuem apenas um comando a ser executado ao final do teste. Tipicamente os programadores iniciantes optam por sempre utilizar chaves independentemente do tamanho da condição.
Observe um erro de programação:

if(i==1)P0_0=1;

P0_1=1;

else P0=0;


Neste caso, como não existem chaves delimitando os comandos do bloco if, o compilador assume que apenas a atribuição P0_0=1 pertence ao teste if(i==1). Por esta razão, o comando P0_1=1 sempre será executado e, além disso, o compilador irá gerar um erro referente a palavra else, pois ela não estará associada a nenhum bloco if.
Corrigindo o erro anterior, temos:
if(i==1){

P0_0=1;


Todo comando else deve ser escrito logo após o comando if

P0_1=1; Nota

}

else P0=0;



    1. A Estrutura if, else, if

Este tipo de estrutura permite um enorme número de alinhamentos (nesting) de comandos. Podemos colocar estruturas if dentro de outras estruturas if e assim sucessivamente. Seu formato geral é:
if(condição 1){

commandos;

}

else if(condição 2){



commandos;

}

else if(condição 3){



commandos;

}

}


A estrutura if é uma das mais utilizadas para tomada de decisões lógicas. A estrutura if else if, muitas vezes é alternativa que o programador pode adotar para tornar os blocos de tomadas de decisão mais rápidos. Isto ocorre por que, no momento em que a condição é satisfeita, os demais blocos if não são testados. Vejamos um exemplo comparando com a estrutura if simples:

if(P3_0==1) P2=1; //se o pino P3.0 tiver nível 1

if(P3_1==1) P2=2; //se o pino P3.1 tiver nível 1

if(P3_2==1) P2=4; //se o pino P3.2 tiver nível 1

if(P3_3==1) P2=8; //se o pino P3.3 tiver nível 1

if(P3_4==1) P2=16; //se o pino P3.4 tiver nível 1


Neste caso, se o primeiro teste if(P3_0==1) for verdadeiro, o Port P2.1 receberá nível 1. No entanto, o processador continuará testando as demais condições desnecessariamente.
Agora vejamos o mesmo teste utilizando a estrutura if else if.

if(P3_0==1) P2=0;

else if(P3_1==1) P2=1;

else if(P3_2==1) P2=2;

else if(P3_3==1) P2=4;

else if(P3_4==1) P2=8;


No exemplo acima, o processador irá testar o primeiro teste e caso seja verdadeiro, nenhum bloco else é testado. É importante observar que esta estrutura só é mais eficiente se a condição é satisfeita mais próxima do topo da lista. Portanto, para que o programa funcione com maior rapidez, é importante que o programador insira os testes mais prováveis para o topo da lista.

    1. A Estrutura switch

A estrutura switch é muito parecida com a estrutura if else if estudada anteriormente e é utilizada para testar uma condição de uma variável no programa. Diferente da estrutura if, a estrutura switch não aceita expressões para a tomada da decisão. Para a tomada de decisões a estrutura switch somente aceita constantes. O comando switch testa o valor da variável e executa a declaração (ou declarações) que encontrar correspondente em case A cláusula default será executada quando nenhuma das condições for correspondente a case e o seu uso é opcional.
Formato da estrutura switch:
switch(variável){

case constante 1: commando 1;

commando 2;

break;


case constante 2: commando 3;

break;


case constante n: commando 4;

break;


default: commando 5;

break;


}
Exemplo de uso da estrutura switch:
contador=2;

switch(contador){

case 0: x++;

P2_0=1;


break;

case 1: P2_1=1;

break;

case 2: P2_2=1;

break;


default: P2_3=1;

break;


}

Por testar apenas um valor em cada case, a estrutura switch se torna mais rápida do que a estrutura if else if. Entretanto, a capacidade de testar apenas um valor constante (e não uma condição) faz com que o uso da estrutura if else seja mais utilizada pelos programadores do que a estrutura switch.



    1. Estruturas de Loops




      1. Tipos de Loops

As estruturas de loops (repetições) servem para repetir uma ou mais vezes determinada instrução ou bloco de instruções. As estruturas de controle de loops na linguagem C são:


  • for

  • while

  • do (não abordado neste livro)



      1. O Comando for

O laço for é utilizado quando necessitamos de um ciclo controlado de repetições, pois em sua inicialização podemos inicializar e incrementar ou decrementar a variável de controle. Antes de serem executados os comandos do laço for, primeiramente é avaliada a condição do teste. Caso seja verdadeira, são executados os comandos do laço. A cada ciclo que é executado o laço (iterações), a variável de controle será incrementada no valor programado.
Veja a estrutura do comando for:
for(inicialização;condição;incremento){

comandos que devem ser repetidos;

}

Veja um exemplo de uso do comando for:


for(i=0;i<10;i++){

P2_0=1; //liga P2_0

delay_ms(1000); //aguarda 1 segundo

P2_0=0; //desliga P2_0

delay_ms(1000); //aguarda 1 segundo

}

Na estrutura anterior, a variável i inicialmente é carregada com o valor dado pela inicialização (i=0) e os comandos do laço for são executados. Após a execução de todos os comandos presentes no laço for, a variável i é incrementada na condição do incremento (i++), e novamente os comandos do laço for são executados. A estrutura de repetição for termina quando a variável i assume o valor da condição final. Neste exemplo, o Port P2.0 (pino 21 do microcontrolador) irá ligar e desligar dez vezes.


Ainda é possível utilizar o laço for em passos decrescentes. Veja um exemplo:
#include

#include


void main(){

int i=0;


for(i=10;i>0;i--){

P2_0=1; //liga P2_0

delay_ms(1000); //aguarda 1 segundo

P2_0=0; //desliga P2_0

delay_ms(1000); //aguarda 1 segundo

}

}


Suponha que o programa acima tenha a função de fazer um LED piscar dez vezes. Então temos o seguinte hardware:

Chave de RESET



Figura 6.1. – Circuito pisca LED.
6.2.2.1. O Comando break (quebrar)

O Comando break é utilizado para quebrar um laço for antes deste completar todas as repetições. Quando o laço é quebrado, o programa desvia para a próxima linha de programa após o laço. Por exemplo, se durante as repetições ocorrer um evento que deva ser executado, devemos inserir o comando break e algum teste para validar o cancelamento do comando for. Veja o exemplo:


#include

#include


void main(){

int i=0;


for(i=0;i<10;i++){

if(P3_0==1) break;//se o pino P3.0 receber nível 1

P2_0=1; //liga P2_0

delay_ms(1000); //aguarda 1 segundo

P2_0=0; //desliga P2_0

delay_ms(1000); //aguarda 1 segundo



}

}
Neste caso, o laço for é encerrado (quebrado) se o Port P3.0 estiver em nível alto (1). Se tivermos uma tecla conectada a este Port, o led irá parar de piscar quando esta tecla for pressionada.


A seguir temos um exemplo de hardware para este programa:

Tecla reset

Tecla ‘break’


Figura 6.2. – Pisca com comando break.



Baixar 2.75 Mb.

Compartilhe com seus amigos:
1   ...   10   11   12   13   14   15   16   17   ...   30




©bemvin.org 2020
enviar mensagem

    Página principal
Prefeitura municipal
santa catarina
Universidade federal
prefeitura municipal
pregão presencial
universidade federal
outras providências
processo seletivo
catarina prefeitura
minas gerais
secretaria municipal
CÂmara municipal
ensino fundamental
ensino médio
concurso público
catarina município
Dispõe sobre
reunião ordinária
Serviço público
câmara municipal
público federal
Processo seletivo
processo licitatório
educaçÃo universidade
seletivo simplificado
Secretaria municipal
sessão ordinária
ensino superior
Relatório técnico
Universidade estadual
Conselho municipal
técnico científico
direitos humanos
científico período
espírito santo
pregão eletrônico
Curriculum vitae
Sequência didática
Quarta feira
prefeito municipal
distrito federal
conselho municipal
língua portuguesa
nossa senhora
educaçÃo secretaria
segunda feira
Pregão presencial
recursos humanos
Terça feira
educaçÃO ciência
agricultura familiar