O documento apresenta exemplos de uso de variáveis contadoras, acumuladoras e estruturas de repetição no desenvolvimento de algoritmos. São discutidas soluções para problemas que envolvem contagens e soma de valores iterados, tomando cuidado para evitar laços infinitos. Repetições aninhadas e o comando PARA são apresentados como formas de controlar laços múltiplos.
1. 1
Estruturas de RepetiçãoEstruturas de Repetição -- IIII
Programação I
ALG
2
Variáveis contadoras
Uma variável é chamada de contadora quando
armazena dentro de si um número referente a uma certa
quantidade de elementos ou iterações.
Este tipo de variável é muito comum em estruturas de
repetição, dada as suas diversas aplicações em
problemas que envolvem contagens de valores.
Exemplo:
Imprimir todos os números inteiros de 1 a 100.
3
Variáveis contadoras
Solução
O algoritmo não tem dados de entrada, e fica assim:
Variáveis
valor : inteiro;
Início
escrever “Valores inteiros de 1 a 100”;
valor = 1;
repita
escrever valor;
valor = valor + 1;
até valor > 100;
Fim
É possível resolver
utilizando o ENQUANTO?
4
Programa em VisuAlg
algoritmo "exemplo"
var
valor: inteiro
inicio
escrevaL ("Valores inteiros de 1 a 100")
valor <- 1
repita
escrevaL ( valor )
valor <- valor + 1
ate valor > 100
fimalgoritmo
5
Variáveis contadoras
Solução
Utilizando o ENQUANTO o algoritmo fica assim:
Variáveis
valor : inteiro;
Início
escrever “Valores inteiros de 1 a 100”;
valor = 1;
enquanto valor <= 100 faça
[[
escrever valor;
valor = valor + 1;
]];
Fim
6
Variáveis contadoras
Exercício:
Escrever um programa que leia 10 números inteiros fornecidos
pelo usuário, e exiba quantos números ímpares foram
informados.
2. 2
7
Variáveis contadoras
Solução
Serão necessárias 10 leituras. Podemos criar uma variável
contadora para controlar este laço.
Precisaremos de uma outra variável para contar a quantidade
de números ímpares.
Não podemos deixar para contar após a repetição, pois cada
número fornecido apaga o anterior. Logo precisamos ir contando
após cada entrada, incrementando uma nova variável contadora.
Esta nova variável contadora só é incrementada se o número
informado for ímpar.
8
Variáveis contadoras
Solução
Variáveis
cont, num, qtd_impar : inteiro;
Início
cont = 1;
qtd_impar = 0
enquanto cont <= 10 faça
[[
escrever “Digite um número: ”;
ler num;
se num % 2 <> 0 então
qtd_impar = qtd_impar + 1;
cont = cont + 1;
]];
escrever “O total de ímpares foi “ + qtd_impar;
Fim
A variável é iniciada
como 0 pois o usuário
poderá informar 10
números pares
9
Programa em VisuAlg
algoritmo "exemplo"
var
cont, num, qtd_impar : inteiro
inicio
cont <- 1
qtd_impar <- 0
enquanto cont <= 10 faca
escreva ("Digite um número: ")
leia (num)
se num % 2 <> 0 entao
qtd_impar <- qtd_impar + 1
fimse
cont <- cont + 1
fimenquanto
escrevaL ("O total de ímpares foi " , qtd_impar)
fimalgoritmo 10
Variáveis acumuladoras
Uma variável é chamada de acumuladora quando tem
por característica armazenar dentro de si o resultado
acumulado de uma série de valores.
Quando armazenamos a soma de uma quantidade
pequena de números, a atribuição é direta. Numa
repetição devemos armazenar a soma de diversos
números sucessivos, e para isto utilizamos uma variável
acumuladora.
Exemplo
Calcular a soma de diversos números reais informados pelo
usuário. A entrada de dados termina com o número -999.
11
Variáveis acumuladoras
Solução
O algoritmo fica assim:
Variáveis
num, soma : real;
Início
soma = 0;
escrever “Para sair, entre com -999”;
escrever “Entre com o número: “;
ler num;
enquanto num <> -999 faça
[[
soma = soma + num;
escrever “Entre com o número: “;
ler num;
]];
escrever “A soma foi ”, soma;
Fim
A variável é iniciada
como 0 pois, caso o usuário
forneça -999 na primeira
execução, o valor total da
soma é 0.
12
Variáveis acumuladoras
Exercício
Fazer um programa que leia diversos números reais e exiba
qual foi o maior de todos. O código -1 sinaliza o fim da leitura.
3. 3
13
Variáveis acumuladoras
Solução
Variáveis
num, maior : real;
Início
escrever “Para sair, entre com -1”;
escrever “Entre com o número: “;
ler num;
maior <- num;
enquanto num <> -1 faça
[[
se num > maior então
maior <- num;
escrever “Entre com o número: “;
ler num;
]];
se maior <> -1 então
escrever “O maior número digitado foi ”, maior
senão
escrever “Nenhum número válido foi informado.”;
Fim
14
Variáveis acumuladoras
Exercício:
Traduzir o programa anterior para
VisuAlg.
15
Laços infinitos
Ao trabalhar com repetições, é preciso tomar cuidado
para não criar um laço infinito, ou seja, um laço que não
termina.
Neste tipo de situação a máquina permaneceria
executando o laço indefinidamente, até que ocorra uma
intervenção externa.
Exemplo:
Imprimir os quadrados dos números inteiros de 1 a 10.
16
Laços infinitos
Solução:
Variáveis
valor, quadrado : real;
Início
escrever “Quadrados dos números inteiros de 1 a 10”;
escrever “Entre com o número: “;
valor = 1;
repita
quadrado = sqr(valor);
escrever quadrado;
valor = valor - 1;
até valor > 10;
escrever “Fim da impressão.”;
Fim
Este decremento provoca
um loop infinito.
17
Repetições encadeadas
Da mesma forma que é permitido o encadeamento de
testes, também é possível encadear comandos de
repetição.
Um encadeamento de repetições ocorre quando há
necessidade de efetuar um laço dentro de outro.
Neste tipo de situação, o algoritmo possui repetições
controladas por um teste interno e outro externo.
Exemplo
Imprimir as tabuadas de multiplicação dos números 3, 4, 5 e 6.
18
Repetições encadeadas
Solução
Variáveis
num, mult, cont : inteiro;
Início
num <- 3;
enquanto num <= 6 faça
[[
escrever “Tabuada de ”, num;
cont = 1;
enquanto cont <= 10 faça
[[
mult = num * cont;
escrever num, “x”, cont, “=“, mult;
cont = cont + 1;
]];
num = num + 1;
]];
Fim
4. 4
19
Repetições encadeadas
Exercício
Escreva o algoritmo anterior em VisuAlg e observe o seu
funcionamento. Em seguida, modifique o mesmo para mostrar a
tabuada dos números 1 a 5.
20
Comando PARA
É muito comum a existência de repetições que fazem
uso de variáveis contadoras, especialmente para
contagens de 1 em 1.
Para facilitar a construção deste tipo de laço, pode-se
utilizar um outro comando de repetição complementar
chamada PARA. Sua sintaxe é:
para <var> de <valor_inicial> até <valor_final> faça
<comando>;
21
Comando PARA
Exemplo:
Escrever os números inteiros de 1 a 100.
Solução com o comando PARA:
Variáveis
valor : inteiro;
Início
escrever “Valores inteiros de 1 a 100”;
para valor de 1 até 100 faça
escrever valor;
Fim
22
Comando PARA em VisuAlg
Esta estrutura repete uma seqüência de comandos
um determinado número de vezes.
para <variável> de <valor-inicial> ate <valor-limite> [passo <incremento>] faca
<seqüência-de-comandos>
fimpara
OBS: <valor-inicial >, <valor-limite > e <incremento > são avaliados uma
única vez antes da execução da primeira repetição, e não se alteram
durante a execução do laço, mesmo que variáveis eventualmente
presentes nessas expressões tenham seus valores alterados.
23
Comando PARA em VisuAlg
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
24
Comando PARA em VisuAlg
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
5. 5
25
Comando PARA em VisuAlg
Este outro exempo, 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
26
Exemplo 1:
Calcule e exiba a soma de todos os números
pares contidos entre zero e um número
fornecido via teclado (caso o número fornecido
seja par, o mesmo deverá fazer parte da soma).
27
Solução
algoritmo "exemplo1"
var
numero ,i , soma_pares: inteiro
inicio
soma_pares <-0
escreva("Digite um número > 0:")
leia(numero)
se numero >0 entao
para i de 1 ate numero faca
se (i % 2 = 0) entao
soma_pares <- soma_pares + i
fimse
fimpara
escrevaL("A soma dos pares é: ", soma_pares)
senao
escrevaL("Número inválido informado.")
fimse
fimalgoritmo
28
Comando PARA
Exercícios:
Faça um programa para exibir os números 1, 4, 9, 16, 25, 36, ...
, 10000.
Faça um programa que leia 10 valores inteiros e positivos e
depois informe:
Qual o maior valor;
Qual o menor valor;
A média dos números lidos.
DÚVIDAS ?DÚVIDAS ?
Programação I
ALG