SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Capítulo 8
ESTRUTURAS DE CONTROLE DO FLUXO DE EXECUÇÃO

        Até o momento os algoritmos estudados utilizam apenas instruções primitivas de
atribuição, e de entrada e saída de dados. Qualquer conjunto de dados fornecido a um algoritmo
destes será submetido ao mesmo conjunto de instruções, executadas sempre na mesma
sequência.
       No entanto, na prática muitas vezes é necessário executar ações diversas em função dos
dados fornecidos ao algoritmo. Em outras palavras, dependendo do conjunto de dados de entrada
do algoritmo, deve-se executar um conjunto diferente de instruções. Além disso, pode ser
necessário executar um mesmo conjunto de instruções um número repetido de vezes. Em resumo
é necessário controlar o fluxo de execução das instruções (a sequência em que as instruções são
executadas num algoritmo) em função dos dados fornecidos como entrada do mesmo.
       De acordo com o modo como o controle do fluxo de instruções de um algoritmo é feito, as
estruturas básicas de controle são classificadas em:
    Estruturas sequenciais
    Estruturas de decisão
    Estruturas de repetição




1. COMANDOS COMPOSTOS
      Um comando composto é um conjunto de zero ou mais comandos (ou instruções) simples,
como atribuições e instruções primitivas de entrada ou saída de dados, ou alguma das construções
apresentadas neste capítulo.
       Este conceito é bastante simples e será útil e conveniente nos itens seguintes, na definição
das estruturas básicas de controle de execução.




2. ESTRUTURA SEQUENCIAL
       Na estrutura sequencial os comandos de um algoritmo são executados numa sequência
pré-estabelecida. Cada comando é executado somente após o término do comando anterior.
       Uma estrutura sequencial é delimitada pelas palavras-reservadas Início e Fim e contém
basicamente comandos de atribuição, comandos de entrada e comandos de saída. Os algoritmos
do capítulo anterior são algoritmos que utilizam uma única estrutura sequencial.
       Um algoritmo puramente sequencial é aquele cuja execução é efetuada em ordem
ascendente dos números que identificam cada passo. A passagem de um passo ao seguinte é
natural e automática, e cada passo é executado uma única vez.
3. ESTRUTURAS DE DECISÃO
       Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do
resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica.
      A classificação das estruturas de decisão é feita de acordo com o número de condições que
devem ser testadas para que se decida qual o caminho a ser seguido. Segundo esta classificação,
têm-se três tipos de estruturas de decisão:
    Estrutura de Decisão Simples (Se ... então)
    Estrutura de Decisão Composta (Se ... então ... senão)
    Estrutura de Decisão Múltipla do Tipo Escolha (Escolha ... Caso ... Outrocaso)
       Os algoritmos puramente sequenciais podem ser usados na solução de um grande número
de problemas, porém existem problemas que exigem o uso de alternativas de acordo com as
entradas do mesmo.
      Nestes algoritmos, as situações são resolvidas através de passos cuja execução é
subordinada a uma condição. Assim, o algoritmo conterá passos que são executados somente se
determinadas condições forem observadas.
       Um algoritmo em que se tem a execução de determinados passos subordinada a uma
condição é denominado algoritmo com seleção.


3.1. ESTRUTURAS DE DECISÃO SIMPLES ( SE ... ENTÃO )
       Nesta estrutura uma única condição (expressão lógica) é avaliada. Dependendo do
resultado desta avaliação, um comando ou conjunto de comandos serão executados (se a
avaliação for verdadeira) ou não serão executados (se a avaliação for falsa).
      No diagrama de blocos a estrutura para instrução se...então é representado por:




      A sintaxe possível para a estrutura de decisão simples é:


       se <condição> entao
                     <sequência_de_comandos>
       fimse
A semântica desta construção é a seguinte: a condição é avaliada:
    Se o resultado for verdadeiro, então a sequência_de_comandos será executada. Ao
     término de sua execução, o fluxo do algoritmo prossegue pela instrução seguinte à palavra
     reservada fimse.
    No caso da condição ser falsa, o fluxo do algoritmo prossegue pela instrução seguinte à
     palavra reservada fimse, sem executar a sequência_de_comandos.


       Exemplo de algoritmo que lê um número e escreve se o mesmo é maior que 10:


algoritmo “exemplo_estrutura_de_decisão_simples”
var X : inteiro
inicio
escreva (“Digite um valor”)
leia(X)
se X > 10 entao
          escreva (“X é maior que 10”)
fimse
fimalgoritmo




3.2. ESTRUTURAS DE DECISÃO COMPOSTA ( SE ... ENTÃO ... SENÃO )
       Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta
avaliação for verdadeiro, um comando ou conjunto de comandos serão executados. Caso
contrário, ou seja, quando o resultado da avaliação for falso, um outro comando ou um outro
conjunto de comandos serão executados.
       No diagrama de blocos a estrutura para instrução se...então...senão é representado
por:




       A sintaxe possível para a estrutura de decisão composta é:

       se <expressão-lógica> entao
            <seqüência-de-comandos-1>
       senao
            <seqüência-de-comandos-2>
       fimse
A semântica desta construção é a seguinte: a condição é avaliada:
    Se o resultado for verdadeiro, então a sequência_de_comandos-1 será executada. Ao
     término de sua execução, o fluxo do algoritmo prossegue pela instrução seguinte à palavra
     reservada fimse.
    Nos casos em que a condição é avaliada como falsa, a seuêncvia_de_comandos-2 será
     executada. Ao término de sua execução, o fluxo do algoritmo prossegue pela instrução
     seguinte à palavra reservada fimse.


      Exemplo de algoritmo que lê um número e escreve se o mesmo é ou não maior que 10:


algoritmo “exemplo_estrutura_de_decisão_composta”
var X : inteiro
inicio
leia(X)
se X > 10 entao
     escreva(“X é maior que 10”)
senao
     escreva(“X não é maior que 10”)
fimse
fimalgoritmo




3.3. ESTRUTURAS DE DECISÃO MÚLTIPLA DO TIPO CASO ( ESCOLHA... CASO ... OUTROCASO )
        Este tipo de estrutura é uma generalização da construção Se, onde somente uma condição
era avaliada e dois caminhos podiam ser seguidos. Na estrutura de decisão do tipo Caso pode
haver uma ou mais condições a serem testadas e um comando diferente associado a cada uma
destas.
       No diagrama de blocos a estrutura para instrução escolha...caso...outrocaso é
representado por:
A sintaxe da construção de Caso é:


       escolha <expressão-de-seleção>
       caso <exp11>, <exp12>, ..., <exp1n>
            <seqüência-de-comandos-1>
       caso <exp21>, <exp22>, ..., <exp2n>
            <seqüência-de-comandos-2>
       ...
       outrocaso
            <seqüência-de-comandos-extra>
       fimescolha


       Seu funcionamento é o seguinte: ao entrar-se numa construção do tipo CASO, uma variável
é escolhida e depois testada com a condição expressa em caso <exp>. Se for verdadeira, a
sequência-de-comandos-1 é executada e após seu término, o fluxo de execução prossegue pela
primeira instrução seguinte à palavra reservada fimescolha. Se esta condição for falsa, o fluxo do
programa passa para o próximo caso <exp> e testa a condição seguindo o mesmo
comportamento descrito acima até encontrar a palavra reservada fimescolha.
        Um exemplo de aplicação desta construção é o algoritmo para reajustar o salário de acordo
com a função. Se for técnico, aumentar o salário 50%, se for gerente, aumentar 30% e se for outro
cargo, aumentar 20%.


algoritmo "exemplo_estrutura_do_tipo_escolha"
var
    salario, salario_reaj : real
    prof : caractere
inicio
escreva("Digite o salário: ")
leia (salario)
escreva("Digite a profissão: ")
leia(prof)
escolha prof
caso "Técnico"
     salario_reaj := 1.5 * salario
caso "Gerente"
     salario_reaj := 1.3 * salario
outrocaso
     salario_reaj := 1.2 * salario
fimescolha
escreva("Salário reajustado: ", salario_reaj)
fimalgoritmo
4. ESTRUTURAS DE REPETIÇÃO
       São muito comuns as situações em que se deseja repetir um determinado trecho de um
programa um certo número de vezes. Por exemplo, pode-se citar o caso de um algoritmo que
calcula a soma dos números impares entre 500 e 1000 ou então um algoritmo que escreve os
números maiores que 0 enquanto a sua soma não ultrapasse 1000.
       As estruturas de repetição são muitas vezes chamadas de Laços ou também de Loops.
     A classificação das estruturas de repetição é feito de acordo com o conhecimento prévio do
número de vezes que o conjunto de comandos será executado. Assim os Laços se dividem em:
    Laços Contados  quando se conhece previamente quantas vezes o comando composto
     no interior da construção será executado;
    Laços Condicionais  quando não se conhece de antemão o número de vezes que o
     conjunto de comandos no interior do laço será repetido, pelo fato do mesmo estar
     amarrado a uma condição sujeita à modificação pelas instruções do interior do laço.
       Todo algoritmo que possui um ou mais de seus passos repetidos um determinado número
de vezes denomina-se algoritmo com repetição.
       Com a utilização de estruturas de repetição para a elaboração de algoritmos, torna-se
necessário o uso de dois tipos de variáveis para a resolução de diversos tipos de problemas:
variáveis contadoras e variáveis acumuladoras.


        Uma variável contadora é uma variável que recebe um valor inicial, geralmente 0 (zero)
antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um
valor constante, geralmente 1, conforme o exemplo abaixo:
       ...
       cont := 0
       <estrutura_de_repetição>
             ...
             cont := cont + 1
             ...
       <fim_da_estrutura_de_repetição>
       ...



        Uma variável acumuladora é uma variável que recebe um valor inicial, geralmente 0 (zero)
antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um
valor variável, geralmente a variável usada na estrutura de controle, conforme o exemplo abaixo:
       ...
       soma := 0
       <estrutura_de_repetição_com_variável_x>
             ...
             soma := soma + x
             ...
       <fim_da_estrutura_de_repetição>
       ...
4.1. LAÇOS CONTADOS


4.1.1. Laços Contados (Para ... faça )
        Os laços contados são úteis quando se conhece previamente o número exato de vezes que
se deseja executar um determinado conjunto de comandos. Então, este tipo de laço nada mais é
que uma estrutura dotada de mecanismos para contar o número de vezes que o corpo do laço (ou
seja, o comando composto em seu interior) é executado.
       No diagrama de blocos a estrutura para instrução para...faça é representado por:




       Uma das sintaxes possíveis usadas em algoritmos para os laços contados é:


para <variável> de <valor-inicial> ate <valor-limite> [passo <incremento>] faca
     <seqüência-de-comandos>
fimpara



<variável >           É a variável contadora que controla o número de repetições do laço. Deve ser
                      necessariamente uma variável do tipo inteiro, como todas as expressões deste comando.
<valor-inicial>       É uma expressão que especifica o valor de inicialização da variável contadora antes da
                      primeira repetição do laço.
<valor-limite >       É uma expressão que especifica o valor máximo que a variável contadora pode alcançar.
<incremento >         É opcional. Quando presente, precedida pela palavra passo, é uma expressão que especifica
                      o incremento que será acrescentado à variável contadora em cada repetição do laço.
                      Quando esta opção não é utilizada, o valor padrão de <incremento> é 1. Vale a pena ter em
                      conta que também é possível especificar valores negativos para <incremento>. Por outro
                      lado, se a avaliação da expressão <incremento > resultar em valor nulo, a execução do
                      algoritmo será interrompida, com a impressão de uma mensagem de erro.
fimpara               Indica o fim da seqüência de comandos a serem repetidos. Cada vez que o programa chega
                      neste ponto, é acrescentado à variável contadora o valor de <incremento >, e comparado a
                      <valor-limite >. Se for menor ou igual (ou maior ou igual, quando <incremento > for
                      negativo), a seqüência de comandos será executada mais uma vez; caso contrário, a
                      execução prosseguirá a partir do primeiro comando que esteja após o fimpara.
Exemplo de um algoritmo que escreve a tabuada de um número específico:


algoritmo "tabuada"
var
    i, tab, num : inteiro
inicio
escreval("TABUADA DE MULTIPLICAÇÃO")
escreva("Tabuada: ")
leia(tab)
escreva("Até que número: ")
leia(num)
para i de 1 ate num faca
   escreval (i, " x ", tab, " = ", i * tab)
fimpara
fimalgoritmo




       No exemplo a seguir, os números de 1 a 10 são exibidos em ordem crescente.


algoritmo "Números de 1 a 10"
var j: inteiro
inicio
para j de 1 ate 10 faca
   escreva (j:3)
fimpara
fimalgoritmo



        Importante: Se, logo no início da primeira repetição, <valor-inicial> for maior que <valor-
limite> (ou menor, quando <incremento> for negativo), o laço não será executado nenhuma vez. O
exemplo a seguir não imprime nada.


algoritmo "Numeros de 10 a 1 (não funciona)"
var j: inteiro
inicio
para j de 10 ate 1 faca
   escreva (j:3)
fimpara
fimalgoritmo
Este outro exemplo, no entanto, funcionará por causa do passo -1:


algoritmo "Numeros de 10 a 1 (este funciona)"
var j: inteiro
inicio
para j de 10 ate 1 passo -1 faca
   escreva (j:3)
fimpara
fimalgoritmo



4.2. LAÇOS CONDICIONAIS
      Laços condicionais são aqueles cujo conjunto de comandos em seu interior é executado
até que uma determinada condição seja satisfeita. Ao contrário do que acontece nos laços
contados, nos laços condicionais não se sabe de antemão quantas vezes o corpo do laço será
executado.
      As construções que implementam laços condicionais mais comuns nas linguagens de
programação modernas são:
    Enquanto  laço condicional com teste no início
    Repita  laço condicional com teste no final
       Nos laços condicionais a variável que é testada, tanto no início quanto no final do laço,
deve sempre estar associada a um comando que a atualize no interior do laço. Caso isso não
ocorra, o programa ficará repetindo indefinidamente este laço, gerando uma situação conhecida
como “laço infinito”.


4.2.1. Laços Condicionais com Teste no Início (Enquanto ... faça )
        Caracteriza-se por uma estrutura que efetua um teste lógico no início de um laço,
verificando se é permitido ou não executar o conjunto de comandos no interior do laço.
       No diagrama de blocos a estrutura Enquanto ... faça é representada por:
Uma das sintaxes possíveis usadas para essa construção é:


enquanto <expressão-lógica> faca
         <seqüência-de-comandos>
fimenquanto



<expressão-lógica>       Esta expressão é avaliada antes de cada repetição do laço. Quando seu resultado for
                         VERDADEIRO, <seqüência-de-comandos> é executada.
fimenquanto              Indica o fim da <seqüência-de-comandos> que será repetida. Cada vez que a execução
                         atinge este ponto, volta-se ao início do laço para que <expressão-lógica> seja avaliada
                         novamente. Se o resultado desta avaliação for VERDADEIRO, a <seqüência-de-
                         comandos> será executada mais uma vez; caso contrário, a execução prosseguirá a
                         partir do primeiro comando após fimenquanto.



       Uma vez dentro do corpo do laço, a execução somente abandonará o mesmo quando a
condição for falsa. O usuário deste tipo de construção deve estar atento à necessidade de que em
algum momento a condição deverá ser avaliada como falsa. Caso contrário, o programa
permanecerá indefinidamente no interior do laço (laço infinito).
       Neste tipo de laço condicional a variável a ser testada deve possuir um valor associado
antes da construção do laço.
      Um exemplo desta construção é o algoritmo abaixo que escreve os números maiores que 0
enquanto a sua soma não ultrapasse 1000.


     algoritmo "exemplo_enquanto"
     var
         soma, num : inteiro
     inicio
     num := 1
     soma:= num
     Enquanto soma < 1000 faca
        escreval (num)
        num := num + 1
        soma := soma + num
     fimenquanto
     fimalgoritmo




4.2.2. Laços Condicionais com Teste no Final (Repita ... até )
        Caracteriza-se por uma estrutura que efetua um teste lógico no final de um laço,
verificando se é permitido ou não executar novamente o conjunto de comandos no interior do
mesmo.
No diagrama de blocos a estrutura Repita ... até é representada por:




       Uma das sintaxes possíveis usadas para essa construção é:


repita
    <seqüência-de-comandos>
ate <expressão-lógica>



repita                       Indica o início do laço.
ate <expressão-lógica>       Indica o fim da <seqüência-de-comandos> a serem repetidos. Cada vez que o
                             programa chega neste ponto, <expressão-lógica> é avaliada: se seu resultado for
                             FALSO, os comandos presentes entre esta linha e a linha repita são executados;
                             caso contrário, a execução prosseguirá a partir do primeiro comando após esta
                             linha.



       Seu funcionamento é bastante parecido ao da construção Enquanto. O comando é
executado uma vez. A seguir, a condição é testada: se ela for falsa, o comando composto é
executado novamente e este processo é repetido até que a condição seja verdadeira, quando
então a execução prossegue pelo comando imediatamente seguinte ao final da construção.
       Esta construção difere da construção Enquanto pelo fato de o comando composto ser
executado uma ou mais vezes (pelo menos uma vez), ao passo que na construção Enquanto o
comando composto é executado zero ou mais vezes (possivelmente nenhuma). Isto acontece
porque na construção Repita o teste é feito no final da construção, ao contrário do que acontece
na construção Enquanto, onde o teste da condição é efetuado no início da mesma.
         A construção Repita também difere da construção Enquanto no que se refere à
inicialização da variável, visto que na construção Repita a variável pode ser inicializada ou lida
dentro do laço.
O algoritmo que lê um número não determinado de vezes um valor do teclado e escreve o
valor e o seu quadrado, até que seja digitado um valor par, é um exemplo desta estrutura:


algoritmo "exemplo_repita"
var
   num : inteiro
inicio
repita
escreva("Entre com número inteiro: ")
leia (num)
escreval ("O quadrado de", num, " é:", num * num)
escreval
ate num mod 2 = 0
fimrepita
fimalgoritmo




5. ESTRUTURAS DE CONTROLE ENCADEADAS OU ANINHADAS
       Um aninhamento ou encadeamento é o fato de se ter qualquer um dos tipos de construção
apresentados anteriormente dentro do conjunto de comandos (comando composto) de uma outra
construção.
      Em qualquer tipo de aninhamento é necessário que a construção interna esteja
completamente embutida na construção externa.
      A figura abaixo ilustra aninhamentos válidos e inválidos.




                          Exemplos de aninhamentos (a) válidos e (b) inválidos
Nos algoritmos, a correta formulação de condições, isto é, expressões lógicas, é de
fundamental importância, visto que as estruturas de seleção são baseadas nelas. As diversas
formulações das condições podem levar a algoritmos distintos. Considerando o problema:
      “Dado um par de valores x, y, que representam as coordenadas de um ponto no plano,
determinar o quadrante ao qual pertence o ponto, ou se está sobre um dos eixos cartesianos.”
        A solução do problema consiste em determinar todas as combinações de x e y para as
classes de valores positivos, negativos e nulos.
      Os algoritmos podem ser baseados em estruturas concatenadas uma em sequência a outra
ou em estruturas aninhadas uma dentro da outra, de acordo com a formulação da condição.


      O algoritmo a seguir utiliza estruturas concatenadas.


algoritmo "estruturas_concatenadas"
var x, y : inteiro
inicio
leia(x, y)
se (x=0) e (y=0) entao
                 escreva("Ponto na origem")
fimse
se (x=0) e (y<>0) entao
                  escreva("Ponto sobre o eixo          y")
fimse
se (x<>0) e (y=0) entao
                  escreva("Ponto sobre o eixo          x")
fimse
se (x>0) e (y>0) entao
                 escreva("Ponto no quandrante          1")
fimse
se (x<0) e (y>0) entao
                 escreva("Ponto no quandrante          2")
fimse
se (x<0) e (y<0) entao
                 escreva("Ponto no quandrante          3")
fimse
se (x>0) e (y<0) entao
                 escreva("Ponto no quandrante          4")
fimse
fimalgoritmo



      O algoritmo a seguir utiliza estruturas aninhadas ou encadeadas.
algoritmo "estruturas_aninhadas"
var x, y : inteiro
inicio
leia(x, y)
se x<>0 entao
        se y=0 entao
               escreva("Ponto sobre o eixo x")
        senao
               se x>0 entao
                      se y>0 entao
                             escreva("Ponto no          quadrante 1")
                      senao
                             escreva("Ponto no          quadrante 4")
                      fimse
               senao
                      se y>0 entao
                             escreva("Ponto no          quadrante 2")
                      senao
                             escreva("Ponto no          quadrante 3")
                      fimse
               fimse
        fimse
senao
        se y=0 entao
               escreva("Ponto na origem")
        senao
               escreva("Ponto sobre o eixo y")
        fimse
fimse
fimalgoritmo


        As estruturas concatenadas tem a vantagem de tornar o algoritmo mais legível, facilitando
a correção do mesmo em caso de erros. As estruturas aninhadas ou encadeadas tem a vantagem
de tornar o algoritmo mais rápido pois são efetuados menos testes e menos comparações, o que
resulta num menor número de passos para chegar ao final do mesmo.
Normalmente se usa estruturas concatenadas nos algoritmos devido à facilidade de entendimento
das mesmas e estruturas aninhadas ou encadeadas somente nos casos em que seu uso é
fundamental.




EXERCÍCIOS PROPOSTOS


Questão 01:
Escreva um programa que leia um número inteiro e determine se ele é par ou ímpar.


Questão 02:
Deseja-se calcular a conta de consumo de energia elétrica de um consumidor. Para isto, escreva
um programa que leia o código do consumidor, o preço do Kw e a quantidade de Kw consumido, e
exiba o código do consumidor e o total a pagar.
    total a pagar = preço x quantidade / total a pagar mínimo = R$ 11,20
Questão 03:
Faça um programa que, dado as três notas de um aluno, determine e exiba a sua média final e o
seu conceito, sabendo-se que:
    a média final é calculada pela média aritmética das 3 notas;
    o conceito é determinado de com base na tabela abaixo:

                          Média Final                          Conceito
                              ≥ 8,0                                 A
                          ≥ 5,0 e < 8,0                             B
                              < 5,0                                 C


Questão 04:

Escreva um programa que determine o grau de obesidade de uma pessoa, sendo fornecido o peso
e a altura da pessoa. O grau de obesidade é determinado pelo índice da massa corpórea (Massa =
Peso / Altura2 ) através da tabela abaixo:

                               IMC                        Grau de Obesidade
                             < 18,5                            Magreza
                           18,5 – 24,9                         Saudável
                           25,0 – 29,9                        Sobrepeso
                           30,0 – 34,9                     Obesidade Grau I
                           35,0 – 39,9                     Obesidade Grau II
                             ≥ 40,0                       Obesidade Grau III


Questão 06:
Faça um programa para calcular a conta final de um hóspede de um hotel, considerando que:
   a) serão lidos o nome do hóspede, o tipo do apartamento utilizado (A, B, C ou D), o número
      de diárias utilizadas pelo hóspede e o valor do consumo interno do hóspede;
   b) o valor da diária é determinado pela seguinte tabela:

                      Tipo do Apartamento                 Valor da Diária (R$)
                                A                               150,00
                                B                               100,00
                                C                                75,00
                                D                                50,00

   c) o valor total das diárias é calculado pela multiplicação do número de diárias utilizadas pelo
      valor da diária;
d) o subtotal é calculado pela soma do valor total das diárias e o valor do consumo interno;
   e) o valor da taxa de serviço equivale a 10% do subtotal;
   f) o total geral resulta da soma do subtotal com a taxa de serviço.
   g) escreva a conta final contendo: o nome do hóspede, o tipo do apartamento, o número de
      diárias utilizadas, o valor unitário da diária, o valor total das diárias, o valor do consumo
      interno, o subtotal, o valor da taxa de serviço e o total geral.


Questão 07:
A Secretaria de Meio Ambiente que controla o índice de poluição mantém 3 grupos de indústrias
que são altamente poluentes do meio ambiente. O índice de poluição aceitável varia de 0,05 até
0,25. Se o índice sobe para 0,3 as indústrias do 1º grupo são intimadas a suspenderem suas
atividades, se o índice crescer para 0,4 as industrias do 1º e 2º grupo são intimadas a suspenderem
suas atividades, se o índice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas
atividades. Faça um diagrama de bloco que leia o índice de poluição medido e emita a notificação
adequada aos diferentes grupos de empresas.


Questão 08:
Uma rainha requisitou os serviços de um monge e disse-lhe que pagaria qualquer preço. O monge,
necessitando de alimentos, indagou à rainha sobre o pagamento, se poderia ser feito com grãos
de trigo dispostos em um tabuleiro de xadrez, de tal forma que o primeiro quadro deveria conter
apenas um grão e os quadros subseqüentes, o dobro do quadro anterior. A rainha achou o
trabalho barato e pediu que o serviço fosse executado, sem se dar conta de que seria impossível
efetuar o pagamento. Faça um algoritmo para calcular o número de grãos que o monge esperava
receber.


Questão 09:
Deseja-se calcular o imposto de renda de um contribuinte. Para isto, escreva um programa que:
   a) leia os seguintes dados do contribuinte: CPF, nome, rendimento anual, imposto retido na
      fonte, contribuição previdenciária, despesas médicas, número de dependentes;
   b) é deduzido o valor de R$ 1.080,00 por cada dependente;
   c) cálculo do valor total das deduções: contribuição previdenciária + despesas médicas +
      dedução dos dependentes;
   d) cálculo da base de cálculo: rendimento anual – total das deduções;
   e) com base na tabela abaixo:

               Base de Cálculo                Alíquota                Parcela a Deduzir
                Até 10.800,00                   Isento                         -
        De 10.800,01 até 21.600,00               15%                       1.620,00
              Acima de 21.600,01                 25%                       3.780,00

           Cálculo do imposto devido: ( (base de cálculo * alíquota) - parcela a deduzir )
f) haverá imposto a pagar se a diferença entre o imposto devido e o imposto retido na fonte
      for positiva; caso contrário, haverá imposto a restituir.
   g) exiba todos os dados lidos e calculados.


Questão 10:
Faça o acompanhamento da execução do programa abaixo e preencha a Tabela de Variáveis:
     ...
     N := 0;
     L := 1;
     enquanto N <>    6   faca
              L :=    L   * (-1);
              N :=    N   + 1;
              se L    >   0 entao
                            escreva(N);
              fimse
     fimenquanto
     ...


                                      Tabela de Variáveis
                    N                            L                    Saída




Questão 11:
Faça um programa que leia um número N, some todos os números inteiros de 1 a N, e mostre o
resultado obtido.


Questão 12:
Escreva um programa que leia um conjunto de 100 números inteiros positivos e determine o
maior deles.
Questão 13:
Escreva um programa que calcule o fatorial de um número inteiro lido, sabendo-se que:
    N! = 1 x 2 x 3 x ... x N-1 x N
    0! = 1


Questão 14:
Um número é, por definição, primo se ele não tem divisores, exceto 1 e ele próprio. Escreva um
programa que leia um número e determine se ele é ou não primo.


Questão 15:
Faça um programa que leia a altura de um grupo de 20 pessoas, calcule e exiba:
    a maior altura do grupo;
    a altura média;
    o número de pessoas com altura superior a 2 metros.


Questão 16:
O cardápio de uma casa de lanches, especializada em sanduíches, é dado abaixo. Escreva um
programa que leia o código e a quantidade de cada item comprado por um freguês, calcule e exiba
o total a pagar. Obs: A leitura do código "X" indica o fim dos itens.

                   Código                    Produto                  Preço (R$)
                      H                    Hamburguer                    1,50
                      C                  Cheeseburguer                   1,80
                     Q                     Queijo Prato                  1,00


Questão 17:
Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou não de um
novo produto lançado no mercado. Para isto, forneceu o sexo do entrevistado (M-masculino ou F-
feminino) e sua resposta (S-sim ou N-não). Sabendo-se que foram entrevistadas 2.000 pessoas,
fazer um programa que calcule e escreva:
    número de pessoas que responderam sim (S);
    número de pessoas que responderam não (N);
    a porcentagem de pessoas do sexo feminino (F);
    a porcentagem de pessoas do sexo masculino (M);

Contenu connexe

Tendances

Algoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoAlgoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoMauro Pereira
 
Guia prático para criar algoritmos
Guia prático para criar algoritmosGuia prático para criar algoritmos
Guia prático para criar algoritmosMauro Pereira
 
Guia para traducao algoritmos x l ps
Guia para traducao algoritmos x l psGuia para traducao algoritmos x l ps
Guia para traducao algoritmos x l psMauro Pereira
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigoMauro Pereira
 
Lógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de SeleçãoLógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de SeleçãoJanynne Gomes
 
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalFelipe J. R. Vieira
 
Java: Estruturas de Repetição
Java: Estruturas de RepetiçãoJava: Estruturas de Repetição
Java: Estruturas de RepetiçãoArthur Emanuel
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Gercélia Ramos
 
Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Adriano Teixeira de Souza
 
Como usar algoritmos e fluxogramas
Como usar algoritmos e fluxogramasComo usar algoritmos e fluxogramas
Como usar algoritmos e fluxogramasKleber Jacinto
 
Apostila de algoritimos
Apostila de algoritimosApostila de algoritimos
Apostila de algoritimosCleide Soares
 
Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01Eder Samaniego
 
Analise de funções de transferencia de malha fechada com Matlab
Analise de funções de transferencia de malha fechada com MatlabAnalise de funções de transferencia de malha fechada com Matlab
Analise de funções de transferencia de malha fechada com MatlabDavid Luna Santos
 
ICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saída
ICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saídaICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saída
ICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saídaFelipe J. R. Vieira
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoMarcelo Rodrigues
 

Tendances (18)

Algoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introduçãoAlgoritmos e lp parte 1-introdução
Algoritmos e lp parte 1-introdução
 
Guia prático para criar algoritmos
Guia prático para criar algoritmosGuia prático para criar algoritmos
Guia prático para criar algoritmos
 
Aula02
Aula02Aula02
Aula02
 
Visualg
VisualgVisualg
Visualg
 
Guia para traducao algoritmos x l ps
Guia para traducao algoritmos x l psGuia para traducao algoritmos x l ps
Guia para traducao algoritmos x l ps
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigo
 
Lógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de SeleçãoLógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de Seleção
 
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
 
Java: Estruturas de Repetição
Java: Estruturas de RepetiçãoJava: Estruturas de Repetição
Java: Estruturas de Repetição
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
 
Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2
 
Como usar algoritmos e fluxogramas
Como usar algoritmos e fluxogramasComo usar algoritmos e fluxogramas
Como usar algoritmos e fluxogramas
 
Apostila de algoritimos
Apostila de algoritimosApostila de algoritimos
Apostila de algoritimos
 
Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01Algoritmo 01 - Semana 01
Algoritmo 01 - Semana 01
 
Analise de funções de transferencia de malha fechada com Matlab
Analise de funções de transferencia de malha fechada com MatlabAnalise de funções de transferencia de malha fechada com Matlab
Analise de funções de transferencia de malha fechada com Matlab
 
ICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saída
ICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saídaICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saída
ICC - Aula 04 - Expressões literais, comando de atribuição e de entrada/saída
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de Programação
 

En vedette

En vedette (9)

Cap07
Cap07Cap07
Cap07
 
Cap09
Cap09Cap09
Cap09
 
Cap05
Cap05Cap05
Cap05
 
Cap09
Cap09Cap09
Cap09
 
Cap01
Cap01Cap01
Cap01
 
Cap02
Cap02Cap02
Cap02
 
Cap03
Cap03Cap03
Cap03
 
Cap04
Cap04Cap04
Cap04
 
Tecnologias De Redes De Computadores
Tecnologias De Redes De ComputadoresTecnologias De Redes De Computadores
Tecnologias De Redes De Computadores
 

Similaire à Estruturas de controle do fluxo de execução

Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch caseAlessandra Sra JM
 
Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Algoritmo e programação repeticao
Algoritmo e programação repeticaoAlgoritmo e programação repeticao
Algoritmo e programação repeticaoPriscila Costa Simon
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3guestd6da1cd
 
Aula 05 - Comandos de repeticao - JAVA.pdf
Aula 05 - Comandos de repeticao - JAVA.pdfAula 05 - Comandos de repeticao - JAVA.pdf
Aula 05 - Comandos de repeticao - JAVA.pdfCarlosCarlos73688
 
Conceitos base de programação - parte 2
Conceitos base de programação - parte 2Conceitos base de programação - parte 2
Conceitos base de programação - parte 2João Piedade
 
Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)Mario Sergio
 
Aula02 condicionais
Aula02   condicionaisAula02   condicionais
Aula02 condicionaisYuri Passos
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++Verônica Veiga
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de RepetiçãoProfessor Samuel Ribeiro
 
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
0000364 aula 5 estruturas de decisão
0000364 aula 5   estruturas de decisão0000364 aula 5   estruturas de decisão
0000364 aula 5 estruturas de decisãoEvelyneBorges
 
Algorítmo estruturado
Algorítmo estruturadoAlgorítmo estruturado
Algorítmo estruturadoNaldo Falaschi
 

Similaire à Estruturas de controle do fluxo de execução (20)

Estrutura de decisão switch case
Estrutura de decisão switch caseEstrutura de decisão switch case
Estrutura de decisão switch case
 
If
IfIf
If
 
EstrutControleC.pdf
EstrutControleC.pdfEstrutControleC.pdf
EstrutControleC.pdf
 
Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Algoritmo e programação repeticao
Algoritmo e programação repeticaoAlgoritmo e programação repeticao
Algoritmo e programação repeticao
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3
 
Aula 05 - Comandos de repeticao - JAVA.pdf
Aula 05 - Comandos de repeticao - JAVA.pdfAula 05 - Comandos de repeticao - JAVA.pdf
Aula 05 - Comandos de repeticao - JAVA.pdf
 
Aula3
Aula3Aula3
Aula3
 
Conceitos base de programação - parte 2
Conceitos base de programação - parte 2Conceitos base de programação - parte 2
Conceitos base de programação - parte 2
 
Java3
Java3Java3
Java3
 
Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 08 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)
 
Aula02 condicionais
Aula02   condicionaisAula02   condicionais
Aula02 condicionais
 
Estrutura de linguagem C++
Estrutura de linguagem C++Estrutura de linguagem C++
Estrutura de linguagem C++
 
Aula 11
Aula 11Aula 11
Aula 11
 
Aula03 - JavaScript
Aula03 - JavaScriptAula03 - JavaScript
Aula03 - JavaScript
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 06 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
0000364 aula 5 estruturas de decisão
0000364 aula 5   estruturas de decisão0000364 aula 5   estruturas de decisão
0000364 aula 5 estruturas de decisão
 
Algorítmo estruturado
Algorítmo estruturadoAlgorítmo estruturado
Algorítmo estruturado
 

Plus de mvbahamut (15)

Cap05
Cap05Cap05
Cap05
 
Cap04
Cap04Cap04
Cap04
 
Cap03
Cap03Cap03
Cap03
 
Cap02
Cap02Cap02
Cap02
 
Cap01
Cap01Cap01
Cap01
 
Cap06
Cap06Cap06
Cap06
 
Cap07
Cap07Cap07
Cap07
 
Cap06
Cap06Cap06
Cap06
 
Cap05
Cap05Cap05
Cap05
 
Cap04
Cap04Cap04
Cap04
 
Cap03
Cap03Cap03
Cap03
 
Cap02
Cap02Cap02
Cap02
 
Cap01
Cap01Cap01
Cap01
 
Cap09
Cap09Cap09
Cap09
 
Cap08
Cap08Cap08
Cap08
 

Estruturas de controle do fluxo de execução

  • 1. Capítulo 8 ESTRUTURAS DE CONTROLE DO FLUXO DE EXECUÇÃO Até o momento os algoritmos estudados utilizam apenas instruções primitivas de atribuição, e de entrada e saída de dados. Qualquer conjunto de dados fornecido a um algoritmo destes será submetido ao mesmo conjunto de instruções, executadas sempre na mesma sequência. No entanto, na prática muitas vezes é necessário executar ações diversas em função dos dados fornecidos ao algoritmo. Em outras palavras, dependendo do conjunto de dados de entrada do algoritmo, deve-se executar um conjunto diferente de instruções. Além disso, pode ser necessário executar um mesmo conjunto de instruções um número repetido de vezes. Em resumo é necessário controlar o fluxo de execução das instruções (a sequência em que as instruções são executadas num algoritmo) em função dos dados fornecidos como entrada do mesmo. De acordo com o modo como o controle do fluxo de instruções de um algoritmo é feito, as estruturas básicas de controle são classificadas em:  Estruturas sequenciais  Estruturas de decisão  Estruturas de repetição 1. COMANDOS COMPOSTOS Um comando composto é um conjunto de zero ou mais comandos (ou instruções) simples, como atribuições e instruções primitivas de entrada ou saída de dados, ou alguma das construções apresentadas neste capítulo. Este conceito é bastante simples e será útil e conveniente nos itens seguintes, na definição das estruturas básicas de controle de execução. 2. ESTRUTURA SEQUENCIAL Na estrutura sequencial os comandos de um algoritmo são executados numa sequência pré-estabelecida. Cada comando é executado somente após o término do comando anterior. Uma estrutura sequencial é delimitada pelas palavras-reservadas Início e Fim e contém basicamente comandos de atribuição, comandos de entrada e comandos de saída. Os algoritmos do capítulo anterior são algoritmos que utilizam uma única estrutura sequencial. Um algoritmo puramente sequencial é aquele cuja execução é efetuada em ordem ascendente dos números que identificam cada passo. A passagem de um passo ao seguinte é natural e automática, e cada passo é executado uma única vez.
  • 2. 3. ESTRUTURAS DE DECISÃO Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas para que se decida qual o caminho a ser seguido. Segundo esta classificação, têm-se três tipos de estruturas de decisão:  Estrutura de Decisão Simples (Se ... então)  Estrutura de Decisão Composta (Se ... então ... senão)  Estrutura de Decisão Múltipla do Tipo Escolha (Escolha ... Caso ... Outrocaso) Os algoritmos puramente sequenciais podem ser usados na solução de um grande número de problemas, porém existem problemas que exigem o uso de alternativas de acordo com as entradas do mesmo. Nestes algoritmos, as situações são resolvidas através de passos cuja execução é subordinada a uma condição. Assim, o algoritmo conterá passos que são executados somente se determinadas condições forem observadas. Um algoritmo em que se tem a execução de determinados passos subordinada a uma condição é denominado algoritmo com seleção. 3.1. ESTRUTURAS DE DECISÃO SIMPLES ( SE ... ENTÃO ) Nesta estrutura uma única condição (expressão lógica) é avaliada. Dependendo do resultado desta avaliação, um comando ou conjunto de comandos serão executados (se a avaliação for verdadeira) ou não serão executados (se a avaliação for falsa). No diagrama de blocos a estrutura para instrução se...então é representado por: A sintaxe possível para a estrutura de decisão simples é: se <condição> entao <sequência_de_comandos> fimse
  • 3. A semântica desta construção é a seguinte: a condição é avaliada:  Se o resultado for verdadeiro, então a sequência_de_comandos será executada. Ao término de sua execução, o fluxo do algoritmo prossegue pela instrução seguinte à palavra reservada fimse.  No caso da condição ser falsa, o fluxo do algoritmo prossegue pela instrução seguinte à palavra reservada fimse, sem executar a sequência_de_comandos. Exemplo de algoritmo que lê um número e escreve se o mesmo é maior que 10: algoritmo “exemplo_estrutura_de_decisão_simples” var X : inteiro inicio escreva (“Digite um valor”) leia(X) se X > 10 entao escreva (“X é maior que 10”) fimse fimalgoritmo 3.2. ESTRUTURAS DE DECISÃO COMPOSTA ( SE ... ENTÃO ... SENÃO ) Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro, um comando ou conjunto de comandos serão executados. Caso contrário, ou seja, quando o resultado da avaliação for falso, um outro comando ou um outro conjunto de comandos serão executados. No diagrama de blocos a estrutura para instrução se...então...senão é representado por: A sintaxe possível para a estrutura de decisão composta é: se <expressão-lógica> entao <seqüência-de-comandos-1> senao <seqüência-de-comandos-2> fimse
  • 4. A semântica desta construção é a seguinte: a condição é avaliada:  Se o resultado for verdadeiro, então a sequência_de_comandos-1 será executada. Ao término de sua execução, o fluxo do algoritmo prossegue pela instrução seguinte à palavra reservada fimse.  Nos casos em que a condição é avaliada como falsa, a seuêncvia_de_comandos-2 será executada. Ao término de sua execução, o fluxo do algoritmo prossegue pela instrução seguinte à palavra reservada fimse. Exemplo de algoritmo que lê um número e escreve se o mesmo é ou não maior que 10: algoritmo “exemplo_estrutura_de_decisão_composta” var X : inteiro inicio leia(X) se X > 10 entao escreva(“X é maior que 10”) senao escreva(“X não é maior que 10”) fimse fimalgoritmo 3.3. ESTRUTURAS DE DECISÃO MÚLTIPLA DO TIPO CASO ( ESCOLHA... CASO ... OUTROCASO ) Este tipo de estrutura é uma generalização da construção Se, onde somente uma condição era avaliada e dois caminhos podiam ser seguidos. Na estrutura de decisão do tipo Caso pode haver uma ou mais condições a serem testadas e um comando diferente associado a cada uma destas. No diagrama de blocos a estrutura para instrução escolha...caso...outrocaso é representado por:
  • 5. A sintaxe da construção de Caso é: escolha <expressão-de-seleção> caso <exp11>, <exp12>, ..., <exp1n> <seqüência-de-comandos-1> caso <exp21>, <exp22>, ..., <exp2n> <seqüência-de-comandos-2> ... outrocaso <seqüência-de-comandos-extra> fimescolha Seu funcionamento é o seguinte: ao entrar-se numa construção do tipo CASO, uma variável é escolhida e depois testada com a condição expressa em caso <exp>. Se for verdadeira, a sequência-de-comandos-1 é executada e após seu término, o fluxo de execução prossegue pela primeira instrução seguinte à palavra reservada fimescolha. Se esta condição for falsa, o fluxo do programa passa para o próximo caso <exp> e testa a condição seguindo o mesmo comportamento descrito acima até encontrar a palavra reservada fimescolha. Um exemplo de aplicação desta construção é o algoritmo para reajustar o salário de acordo com a função. Se for técnico, aumentar o salário 50%, se for gerente, aumentar 30% e se for outro cargo, aumentar 20%. algoritmo "exemplo_estrutura_do_tipo_escolha" var salario, salario_reaj : real prof : caractere inicio escreva("Digite o salário: ") leia (salario) escreva("Digite a profissão: ") leia(prof) escolha prof caso "Técnico" salario_reaj := 1.5 * salario caso "Gerente" salario_reaj := 1.3 * salario outrocaso salario_reaj := 1.2 * salario fimescolha escreva("Salário reajustado: ", salario_reaj) fimalgoritmo
  • 6. 4. ESTRUTURAS DE REPETIÇÃO São muito comuns as situações em que se deseja repetir um determinado trecho de um programa um certo número de vezes. Por exemplo, pode-se citar o caso de um algoritmo que calcula a soma dos números impares entre 500 e 1000 ou então um algoritmo que escreve os números maiores que 0 enquanto a sua soma não ultrapasse 1000. As estruturas de repetição são muitas vezes chamadas de Laços ou também de Loops. A classificação das estruturas de repetição é feito de acordo com o conhecimento prévio do número de vezes que o conjunto de comandos será executado. Assim os Laços se dividem em:  Laços Contados  quando se conhece previamente quantas vezes o comando composto no interior da construção será executado;  Laços Condicionais  quando não se conhece de antemão o número de vezes que o conjunto de comandos no interior do laço será repetido, pelo fato do mesmo estar amarrado a uma condição sujeita à modificação pelas instruções do interior do laço. Todo algoritmo que possui um ou mais de seus passos repetidos um determinado número de vezes denomina-se algoritmo com repetição. Com a utilização de estruturas de repetição para a elaboração de algoritmos, torna-se necessário o uso de dois tipos de variáveis para a resolução de diversos tipos de problemas: variáveis contadoras e variáveis acumuladoras. Uma variável contadora é uma variável que recebe um valor inicial, geralmente 0 (zero) antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor constante, geralmente 1, conforme o exemplo abaixo: ... cont := 0 <estrutura_de_repetição> ... cont := cont + 1 ... <fim_da_estrutura_de_repetição> ... Uma variável acumuladora é uma variável que recebe um valor inicial, geralmente 0 (zero) antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor variável, geralmente a variável usada na estrutura de controle, conforme o exemplo abaixo: ... soma := 0 <estrutura_de_repetição_com_variável_x> ... soma := soma + x ... <fim_da_estrutura_de_repetição> ...
  • 7. 4.1. LAÇOS CONTADOS 4.1.1. Laços Contados (Para ... faça ) Os laços contados são úteis quando se conhece previamente o número exato de vezes que se deseja executar um determinado conjunto de comandos. Então, este tipo de laço nada mais é que uma estrutura dotada de mecanismos para contar o número de vezes que o corpo do laço (ou seja, o comando composto em seu interior) é executado. No diagrama de blocos a estrutura para instrução para...faça é representado por: Uma das sintaxes possíveis usadas em algoritmos para os laços contados é: para <variável> de <valor-inicial> ate <valor-limite> [passo <incremento>] faca <seqüência-de-comandos> fimpara <variável > É a variável contadora que controla o número de repetições do laço. Deve ser necessariamente uma variável do tipo inteiro, como todas as expressões deste comando. <valor-inicial> É uma expressão que especifica o valor de inicialização da variável contadora antes da primeira repetição do laço. <valor-limite > É uma expressão que especifica o valor máximo que a variável contadora pode alcançar. <incremento > É opcional. Quando presente, precedida pela palavra passo, é uma expressão que especifica o incremento que será acrescentado à variável contadora em cada repetição do laço. Quando esta opção não é utilizada, o valor padrão de <incremento> é 1. Vale a pena ter em conta que também é possível especificar valores negativos para <incremento>. Por outro lado, se a avaliação da expressão <incremento > resultar em valor nulo, a execução do algoritmo será interrompida, com a impressão de uma mensagem de erro. fimpara Indica o fim da seqüência de comandos a serem repetidos. Cada vez que o programa chega neste ponto, é acrescentado à variável contadora o valor de <incremento >, e comparado a <valor-limite >. Se for menor ou igual (ou maior ou igual, quando <incremento > for negativo), a seqüência de comandos será executada mais uma vez; caso contrário, a execução prosseguirá a partir do primeiro comando que esteja após o fimpara.
  • 8. Exemplo de um algoritmo que escreve a tabuada de um número específico: algoritmo "tabuada" var i, tab, num : inteiro inicio escreval("TABUADA DE MULTIPLICAÇÃO") escreva("Tabuada: ") leia(tab) escreva("Até que número: ") leia(num) para i de 1 ate num faca escreval (i, " x ", tab, " = ", i * tab) fimpara fimalgoritmo No exemplo a seguir, os números de 1 a 10 são exibidos em ordem crescente. algoritmo "Números de 1 a 10" var j: inteiro inicio para j de 1 ate 10 faca escreva (j:3) fimpara fimalgoritmo Importante: Se, logo no início da primeira repetição, <valor-inicial> for maior que <valor- limite> (ou menor, quando <incremento> for negativo), o laço não será executado nenhuma vez. O exemplo a seguir não imprime nada. algoritmo "Numeros de 10 a 1 (não funciona)" var j: inteiro inicio para j de 10 ate 1 faca escreva (j:3) fimpara fimalgoritmo
  • 9. Este outro exemplo, no entanto, funcionará por causa do passo -1: algoritmo "Numeros de 10 a 1 (este funciona)" var j: inteiro inicio para j de 10 ate 1 passo -1 faca escreva (j:3) fimpara fimalgoritmo 4.2. LAÇOS CONDICIONAIS Laços condicionais são aqueles cujo conjunto de comandos em seu interior é executado até que uma determinada condição seja satisfeita. Ao contrário do que acontece nos laços contados, nos laços condicionais não se sabe de antemão quantas vezes o corpo do laço será executado. As construções que implementam laços condicionais mais comuns nas linguagens de programação modernas são:  Enquanto  laço condicional com teste no início  Repita  laço condicional com teste no final Nos laços condicionais a variável que é testada, tanto no início quanto no final do laço, deve sempre estar associada a um comando que a atualize no interior do laço. Caso isso não ocorra, o programa ficará repetindo indefinidamente este laço, gerando uma situação conhecida como “laço infinito”. 4.2.1. Laços Condicionais com Teste no Início (Enquanto ... faça ) Caracteriza-se por uma estrutura que efetua um teste lógico no início de um laço, verificando se é permitido ou não executar o conjunto de comandos no interior do laço. No diagrama de blocos a estrutura Enquanto ... faça é representada por:
  • 10. Uma das sintaxes possíveis usadas para essa construção é: enquanto <expressão-lógica> faca <seqüência-de-comandos> fimenquanto <expressão-lógica> Esta expressão é avaliada antes de cada repetição do laço. Quando seu resultado for VERDADEIRO, <seqüência-de-comandos> é executada. fimenquanto Indica o fim da <seqüência-de-comandos> que será repetida. Cada vez que a execução atinge este ponto, volta-se ao início do laço para que <expressão-lógica> seja avaliada novamente. Se o resultado desta avaliação for VERDADEIRO, a <seqüência-de- comandos> será executada mais uma vez; caso contrário, a execução prosseguirá a partir do primeiro comando após fimenquanto. Uma vez dentro do corpo do laço, a execução somente abandonará o mesmo quando a condição for falsa. O usuário deste tipo de construção deve estar atento à necessidade de que em algum momento a condição deverá ser avaliada como falsa. Caso contrário, o programa permanecerá indefinidamente no interior do laço (laço infinito). Neste tipo de laço condicional a variável a ser testada deve possuir um valor associado antes da construção do laço. Um exemplo desta construção é o algoritmo abaixo que escreve os números maiores que 0 enquanto a sua soma não ultrapasse 1000. algoritmo "exemplo_enquanto" var soma, num : inteiro inicio num := 1 soma:= num Enquanto soma < 1000 faca escreval (num) num := num + 1 soma := soma + num fimenquanto fimalgoritmo 4.2.2. Laços Condicionais com Teste no Final (Repita ... até ) Caracteriza-se por uma estrutura que efetua um teste lógico no final de um laço, verificando se é permitido ou não executar novamente o conjunto de comandos no interior do mesmo.
  • 11. No diagrama de blocos a estrutura Repita ... até é representada por: Uma das sintaxes possíveis usadas para essa construção é: repita <seqüência-de-comandos> ate <expressão-lógica> repita Indica o início do laço. ate <expressão-lógica> Indica o fim da <seqüência-de-comandos> a serem repetidos. Cada vez que o programa chega neste ponto, <expressão-lógica> é avaliada: se seu resultado for FALSO, os comandos presentes entre esta linha e a linha repita são executados; caso contrário, a execução prosseguirá a partir do primeiro comando após esta linha. Seu funcionamento é bastante parecido ao da construção Enquanto. O comando é executado uma vez. A seguir, a condição é testada: se ela for falsa, o comando composto é executado novamente e este processo é repetido até que a condição seja verdadeira, quando então a execução prossegue pelo comando imediatamente seguinte ao final da construção. Esta construção difere da construção Enquanto pelo fato de o comando composto ser executado uma ou mais vezes (pelo menos uma vez), ao passo que na construção Enquanto o comando composto é executado zero ou mais vezes (possivelmente nenhuma). Isto acontece porque na construção Repita o teste é feito no final da construção, ao contrário do que acontece na construção Enquanto, onde o teste da condição é efetuado no início da mesma. A construção Repita também difere da construção Enquanto no que se refere à inicialização da variável, visto que na construção Repita a variável pode ser inicializada ou lida dentro do laço.
  • 12. O algoritmo que lê um número não determinado de vezes um valor do teclado e escreve o valor e o seu quadrado, até que seja digitado um valor par, é um exemplo desta estrutura: algoritmo "exemplo_repita" var num : inteiro inicio repita escreva("Entre com número inteiro: ") leia (num) escreval ("O quadrado de", num, " é:", num * num) escreval ate num mod 2 = 0 fimrepita fimalgoritmo 5. ESTRUTURAS DE CONTROLE ENCADEADAS OU ANINHADAS Um aninhamento ou encadeamento é o fato de se ter qualquer um dos tipos de construção apresentados anteriormente dentro do conjunto de comandos (comando composto) de uma outra construção. Em qualquer tipo de aninhamento é necessário que a construção interna esteja completamente embutida na construção externa. A figura abaixo ilustra aninhamentos válidos e inválidos. Exemplos de aninhamentos (a) válidos e (b) inválidos
  • 13. Nos algoritmos, a correta formulação de condições, isto é, expressões lógicas, é de fundamental importância, visto que as estruturas de seleção são baseadas nelas. As diversas formulações das condições podem levar a algoritmos distintos. Considerando o problema: “Dado um par de valores x, y, que representam as coordenadas de um ponto no plano, determinar o quadrante ao qual pertence o ponto, ou se está sobre um dos eixos cartesianos.” A solução do problema consiste em determinar todas as combinações de x e y para as classes de valores positivos, negativos e nulos. Os algoritmos podem ser baseados em estruturas concatenadas uma em sequência a outra ou em estruturas aninhadas uma dentro da outra, de acordo com a formulação da condição. O algoritmo a seguir utiliza estruturas concatenadas. algoritmo "estruturas_concatenadas" var x, y : inteiro inicio leia(x, y) se (x=0) e (y=0) entao escreva("Ponto na origem") fimse se (x=0) e (y<>0) entao escreva("Ponto sobre o eixo y") fimse se (x<>0) e (y=0) entao escreva("Ponto sobre o eixo x") fimse se (x>0) e (y>0) entao escreva("Ponto no quandrante 1") fimse se (x<0) e (y>0) entao escreva("Ponto no quandrante 2") fimse se (x<0) e (y<0) entao escreva("Ponto no quandrante 3") fimse se (x>0) e (y<0) entao escreva("Ponto no quandrante 4") fimse fimalgoritmo O algoritmo a seguir utiliza estruturas aninhadas ou encadeadas.
  • 14. algoritmo "estruturas_aninhadas" var x, y : inteiro inicio leia(x, y) se x<>0 entao se y=0 entao escreva("Ponto sobre o eixo x") senao se x>0 entao se y>0 entao escreva("Ponto no quadrante 1") senao escreva("Ponto no quadrante 4") fimse senao se y>0 entao escreva("Ponto no quadrante 2") senao escreva("Ponto no quadrante 3") fimse fimse fimse senao se y=0 entao escreva("Ponto na origem") senao escreva("Ponto sobre o eixo y") fimse fimse fimalgoritmo As estruturas concatenadas tem a vantagem de tornar o algoritmo mais legível, facilitando a correção do mesmo em caso de erros. As estruturas aninhadas ou encadeadas tem a vantagem de tornar o algoritmo mais rápido pois são efetuados menos testes e menos comparações, o que resulta num menor número de passos para chegar ao final do mesmo. Normalmente se usa estruturas concatenadas nos algoritmos devido à facilidade de entendimento das mesmas e estruturas aninhadas ou encadeadas somente nos casos em que seu uso é fundamental. EXERCÍCIOS PROPOSTOS Questão 01: Escreva um programa que leia um número inteiro e determine se ele é par ou ímpar. Questão 02: Deseja-se calcular a conta de consumo de energia elétrica de um consumidor. Para isto, escreva um programa que leia o código do consumidor, o preço do Kw e a quantidade de Kw consumido, e exiba o código do consumidor e o total a pagar.  total a pagar = preço x quantidade / total a pagar mínimo = R$ 11,20
  • 15. Questão 03: Faça um programa que, dado as três notas de um aluno, determine e exiba a sua média final e o seu conceito, sabendo-se que:  a média final é calculada pela média aritmética das 3 notas;  o conceito é determinado de com base na tabela abaixo: Média Final Conceito ≥ 8,0 A ≥ 5,0 e < 8,0 B < 5,0 C Questão 04: Escreva um programa que determine o grau de obesidade de uma pessoa, sendo fornecido o peso e a altura da pessoa. O grau de obesidade é determinado pelo índice da massa corpórea (Massa = Peso / Altura2 ) através da tabela abaixo: IMC Grau de Obesidade < 18,5 Magreza 18,5 – 24,9 Saudável 25,0 – 29,9 Sobrepeso 30,0 – 34,9 Obesidade Grau I 35,0 – 39,9 Obesidade Grau II ≥ 40,0 Obesidade Grau III Questão 06: Faça um programa para calcular a conta final de um hóspede de um hotel, considerando que: a) serão lidos o nome do hóspede, o tipo do apartamento utilizado (A, B, C ou D), o número de diárias utilizadas pelo hóspede e o valor do consumo interno do hóspede; b) o valor da diária é determinado pela seguinte tabela: Tipo do Apartamento Valor da Diária (R$) A 150,00 B 100,00 C 75,00 D 50,00 c) o valor total das diárias é calculado pela multiplicação do número de diárias utilizadas pelo valor da diária;
  • 16. d) o subtotal é calculado pela soma do valor total das diárias e o valor do consumo interno; e) o valor da taxa de serviço equivale a 10% do subtotal; f) o total geral resulta da soma do subtotal com a taxa de serviço. g) escreva a conta final contendo: o nome do hóspede, o tipo do apartamento, o número de diárias utilizadas, o valor unitário da diária, o valor total das diárias, o valor do consumo interno, o subtotal, o valor da taxa de serviço e o total geral. Questão 07: A Secretaria de Meio Ambiente que controla o índice de poluição mantém 3 grupos de indústrias que são altamente poluentes do meio ambiente. O índice de poluição aceitável varia de 0,05 até 0,25. Se o índice sobe para 0,3 as indústrias do 1º grupo são intimadas a suspenderem suas atividades, se o índice crescer para 0,4 as industrias do 1º e 2º grupo são intimadas a suspenderem suas atividades, se o índice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas atividades. Faça um diagrama de bloco que leia o índice de poluição medido e emita a notificação adequada aos diferentes grupos de empresas. Questão 08: Uma rainha requisitou os serviços de um monge e disse-lhe que pagaria qualquer preço. O monge, necessitando de alimentos, indagou à rainha sobre o pagamento, se poderia ser feito com grãos de trigo dispostos em um tabuleiro de xadrez, de tal forma que o primeiro quadro deveria conter apenas um grão e os quadros subseqüentes, o dobro do quadro anterior. A rainha achou o trabalho barato e pediu que o serviço fosse executado, sem se dar conta de que seria impossível efetuar o pagamento. Faça um algoritmo para calcular o número de grãos que o monge esperava receber. Questão 09: Deseja-se calcular o imposto de renda de um contribuinte. Para isto, escreva um programa que: a) leia os seguintes dados do contribuinte: CPF, nome, rendimento anual, imposto retido na fonte, contribuição previdenciária, despesas médicas, número de dependentes; b) é deduzido o valor de R$ 1.080,00 por cada dependente; c) cálculo do valor total das deduções: contribuição previdenciária + despesas médicas + dedução dos dependentes; d) cálculo da base de cálculo: rendimento anual – total das deduções; e) com base na tabela abaixo: Base de Cálculo Alíquota Parcela a Deduzir Até 10.800,00 Isento - De 10.800,01 até 21.600,00 15% 1.620,00 Acima de 21.600,01 25% 3.780,00 Cálculo do imposto devido: ( (base de cálculo * alíquota) - parcela a deduzir )
  • 17. f) haverá imposto a pagar se a diferença entre o imposto devido e o imposto retido na fonte for positiva; caso contrário, haverá imposto a restituir. g) exiba todos os dados lidos e calculados. Questão 10: Faça o acompanhamento da execução do programa abaixo e preencha a Tabela de Variáveis: ... N := 0; L := 1; enquanto N <> 6 faca L := L * (-1); N := N + 1; se L > 0 entao escreva(N); fimse fimenquanto ... Tabela de Variáveis N L Saída Questão 11: Faça um programa que leia um número N, some todos os números inteiros de 1 a N, e mostre o resultado obtido. Questão 12: Escreva um programa que leia um conjunto de 100 números inteiros positivos e determine o maior deles.
  • 18. Questão 13: Escreva um programa que calcule o fatorial de um número inteiro lido, sabendo-se que:  N! = 1 x 2 x 3 x ... x N-1 x N  0! = 1 Questão 14: Um número é, por definição, primo se ele não tem divisores, exceto 1 e ele próprio. Escreva um programa que leia um número e determine se ele é ou não primo. Questão 15: Faça um programa que leia a altura de um grupo de 20 pessoas, calcule e exiba:  a maior altura do grupo;  a altura média;  o número de pessoas com altura superior a 2 metros. Questão 16: O cardápio de uma casa de lanches, especializada em sanduíches, é dado abaixo. Escreva um programa que leia o código e a quantidade de cada item comprado por um freguês, calcule e exiba o total a pagar. Obs: A leitura do código "X" indica o fim dos itens. Código Produto Preço (R$) H Hamburguer 1,50 C Cheeseburguer 1,80 Q Queijo Prato 1,00 Questão 17: Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou não de um novo produto lançado no mercado. Para isto, forneceu o sexo do entrevistado (M-masculino ou F- feminino) e sua resposta (S-sim ou N-não). Sabendo-se que foram entrevistadas 2.000 pessoas, fazer um programa que calcule e escreva:  número de pessoas que responderam sim (S);  número de pessoas que responderam não (N);  a porcentagem de pessoas do sexo feminino (F);  a porcentagem de pessoas do sexo masculino (M);