O documento discute estruturas de controle de fluxo em algoritmos. Ele apresenta três tipos principais de estruturas de controle: estruturas sequenciais, estruturas de decisão e estruturas de repetição. Dentro das estruturas de decisão, descreve estruturas de decisão simples, compostas e múltiplas. Nas estruturas de repetição, diferencia laços contados e laços condicionais.
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);