Você está na página 1de 45

VisuALG Estruturas de Repetio

Professores:
Vilson Heck Junior
vilson.junior@ifsc.edu.br

Felipe Schneider Costa


felipe.costa@ifsc.edu.br

Agenda
O Problema.
Estruturas de Repetio:
Introduo;
Repita ate;
Exemplo;

Enquanto faca;
Exemplo;

Para faca;
Exemplo;

Exerccios.

O Problema
Exerccio:
1. Escreva um algoritmo que leia 20 valores inteiros e ao
final exiba:
a) a soma dos nmeros positivos;
b) a quantidade de valores negativos.

O Problema
Apresentao no Visualg
inicio

inst
inst
fim

Legenda:
inst = Instruo;
cl = Clusula;

O Problema
Apresentao no Visualg.
inst

inst
se

Legenda:
inst = Instruo;
cl = Clusula;

seno

cl

inst

inst
inst

repetir

cl
no repetir

VisuALG: Introduo a

ESTRUTURAS DE REPETIO

Estruturas de Repetio
Executar tarefas repetitivas;
Trs principais opes:
enquanto <clausula> faca
fimenquanto

repita ... ate <clausula>


para <contagem> faca
fimpara

enquanto faca
Verifica primeiro, executa depois;
Repete somente enquanto <clausula> = verdade;
enquanto <clausula> faca
...
fimenquanto

Exemplo Contagem at 10
x: inteiro
x <- 1
enquanto (x <= 10) faca
escreval(x)
x <- x + 1
fimenquanto

enquanto faca
Exemplo:
nota: real
escreva("Digite uma nota:")
leia(nota)
enquanto (nota < 0) ou (nota > 10) faca
escreval("Erro! A nota deve ser entre 0 e 10")
escreva("Digite novamente a nota: ")
leia(nota)
fimenquanto
se (nota >= 7) entao
escreval("Aluno aprovado!")
senao
escreval("Aluno reprovado!")
fimse

Exerccios - enquanto
1. Faa um algoritmo que escreva na tela os nmeros de
um nmero inicial a um nmero final. Os nmeros
inicial e final devem ser informados pelo usurio;
2. Escrever um algoritmo que imprima a tabuada de um
nmero informado pelo usurio;
3. Escrever um algoritmo que gera e escreve os nmeros
mpares entre 100 e 200;
4. Em uma turma h 10 alunos. Cada aluno tem 2 notas.
Um professor precisa calcular a mdia das duas notas
de cada aluno. Crie um programa que resolve este
problema.

Exerccios
1. Escrever um programa de computador que leia 10
nmeros inteiros e, ao final, apresente a soma de
todos os nmeros lidos;
2. Faa o mesmo que antes, porm, ao invs de ler 10
nmeros, o programa dever ler e somar nmeros
at que o valor digitado seja zero ( 0 ).

repita ate
Executa primeiro, verifica depois:
Repete somente enquanto: <clausula> = falso;
repita
...
ate <clausula>

Exemplo Contagem at 10
x: inteiro
x <- 1
repita
escreval(x)
x <- x + 1
ate (x > 10)

repita ate
Exemplo:
opcao: inteiro
repita
escreval("1 - Dizer ol!")
escreval("2 Dizer oi! ")
escreval("0 - Sair do programa")
leia(opcao)
se (opcao = 1) entao
escreval("Ol!")
fimse
se (opcao = 2) entao
escreval("Oi!")

fimse
ate (opcao = 0)

Exerccios - repita
1. Escreva um algoritmo que calcule a mdia dos
nmeros digitados pelo usurio, se eles forem
pares. Termine a leitura se o usurio digitar zero (0);
2. Escreva um algoritmo que leia valores inteiros e
encontre o maior e o menor deles. Termine a leitura
se o usurio digitar zero (0);

Exerccios - repita
3. Escreva uma programa que l o sexo de uma
pessoa. O sexo dever ser com o tipo de dado
caractere e o programa dever aceitar apenas os
valores M ou F.
4. Escreva um programa que leia dois valores reais.
Ambos valores devero ser lidos at que o usurio
digite um nmero no intervalo de 1 a 100.
Apresentar a soma dos dois valores lidos.

para faca
Repetio condicionada a uma contagem:
Opcional

para <varivel> de <valor inicial> ate <valor final> [passo <incremento>] faca
...
fimpara
Exemplo Contagem at 10
x: inteiro
para x de 1 ate 10 faca
escreval(x)
fimpara

Exemplo Contagem at 10 c/ passo


x: inteiro
para x de 1 ate 10 passo 1 faca
escreval(x)
fimpara

Ateno: a <varivel> utilizada nesta estrutura ter seu valor alterado.

para faca
Exemplo:
soma, num: real
i, n: inteiro
escreva("Digite o nmero de elementos: ")
leia(n)
soma <- 0
para i de 1 ate n faca
escreva("Digite um nmero: ")
leia(num)
soma <- soma + num
fimpara
escreval("Total dos ", n, " elementos: ", soma)

Exemplo Prtico

Exerccios - para
1. Escreva um programa que lido um nmero,
calcule e informe o seu fatorial.
Ex.: 5! = 5 * 4 * 3 * 2 * 1 = 120.
2. Escreva um programa que leia um valor
correspondente ao nmero de jogadores de
um time de vlei. O programa dever ler uma
altura para cada um dos jogadores e, ao final,
informar a altura mdia do time.

Estruturas de Repetio

CONDIES DE PARADA

Condies de Parada
Se uma estrutura de repetio serve para
executar uma determinada tarefa vrias vezes,
necessrio indicar quando as repeties
devem parar:
Pode ser feita por um nmero pr-determinado
de vezes;
Pode ser feita at que um evento ocorra;
Pode ser feita at a solicitao do usurio;

Condies de Parada
Para Faca mais simples e adequada para uso
nos casos de um nmero pr determinado de
repeties;
Principalmente em intervalos numricos, contadores e
outros do gnero;

Repita Ate() e Enquanto () Faca so mais


adequadas para repetir at que algo acontea:
Algo pode ser um comando do usurio ou at se obter
uma informao ou valor esperado;

Condies de Parada

Caso a condio de parada para qualquer


estrutura de repetio nunca seja satisfeita,
teremos problema com uma repetio infinita;
A repetio infinita ir travar o software, que
no ser capaz de terminar a operao.

Condies de Parada
Exemplos de loop infinito com Enquanto Faca:
cont: inteiro
cont <- 1
enquanto (cont < 10) faca
escreva(cont)
fimenquanto

Exemplos de loop infinito com Para Faca:


cont: inteiro
para cont de 1 ate 10 passo -1 faca
escreva(cont)
fimpara

Variveis de Controle
Ao estabelecer uma condio de parada,
automaticamente precisamos comparar uma
ou mais variveis;
Temos que cuidar muito do uso dessas
variveis, pois se alterarmos o seu contedo
de forma indiscriminada, podemos tornar o
comportamento da repetio instvel.

Variveis de Controle
Exemplos de variveis de controle com Enquanto:
cont: inteiro
cont <- 1
enquanto (cont < 10) faca
escreva(cont)
cont <- cont + 1
fimenquanto
Exemplos de variveis de controle com Para Faca:
cont: inteiro
para cont de 1 ate 10 faca
escreva(cont)
fimpara

Estruturas de Repetio

ACUMULADORES E CONTADORES

Acumuladores e Contadores
Contagens, somas e multiplicaes
acumulativas:
So utilizadas com frequncia em algoritmos;
Geralmente associadas repeties;
So representadas por variveis numricas;
E so incrementadas/alteradas conforme padres
recorrentes ocorrem.

Contadores
Contagem:
usada para, por exemplo:
contabilizar o nmero de execues de uma repetio;
determinar o nmero de vezes que um particular valor (ou ao)
ocorre em uma determinada sequncia;
entre outros;

A varivel associada geralmente inicia no valor zero


(elemento neutro da soma);
Sempre que conveniente, acrescenta-se 1 ao contador.

Acumuladores e Contadores
Somas ou Produtos Acumulativos:
So frequntes em clculos de somatrias, produtrias ou
consolidaes de resultados (totais, mdias, ...);
Somatrio:
Geralmente so inicializadas no valor zero (elemento neutro da
soma);
Sempre que apropriado, soma-se outros valores prpria varivel;

Produtrio:
So inicializadas usualmente com o valor um (elemento neutro da
multiplicao);
Sempre quando necessrio, so atualizadas com o resultado do
seu valor corrente multiplicado por um novo termo.

Estruturas de Repetio

EXEMPLOS

Exemplo (repita ate)


Exibir a tabuada de um nmero:
1.
2.
3.
4.
5.
6.
7.
8.

x, y: inteiro
escreva(Informe o nmero da tabuada: )
leia(x)
y <- 0
repita
escreval(x, x, y, =, x*y)
Contador
y <- y + 1
ate(y > 10)

Exemplo (enquanto faca)


Capturar nmeros inteiros do usurio at que ele digite 0 (zero);
Informar a soma dos nmeros e a mdia;
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.

dig, soma, qtdade: inteiro


media: real
soma <- 0
qtdade <- 0
escreva("Informe um nmero(0 para sair): ")
Somatrio
leia(dig)
Contador
enquanto (dig <> 0) faca
soma <- soma + dig
qtdade <- qtdade + 1
escreva("Informe um nmero(0 para sair): ")
leia(dig)
fimenquanto
media <- soma / qtdade
escreva("Qtdade: ", qtdade, " Soma: ", soma, " Mdia: ", media)

Exemplo (para faca)


Multiplicar dois nmeros apenas com somas:
1. x, y, z, multi: inteiro
2. escreva("Informe x: ")
3. leia(x)
4. escreva("Informe y: ")
5. leia(y)
6. multi <- 0
7. para z de y ate 1 passo -1 faca
8. multi <- multi + x
9. fimpara
10. escreva("Multiplicao = ", multi)

Somatrio

Estruturas de Repetio

EXERCCIOS

Exerccios - Repetio
1.

2.

Em um concurso de miss IFSC Lages, os jurados precisam digitar o nome das 16


candidatas e suas respectivas notas (0 a 10). Crie um programa que leia estas
informaes e que, ao final do programa, apresente apenas o nome e a nota da
vencedora.
Uma loja deseja fazer a avaliao com base na opinio de seus clientes. Para isto,
ela ir disponibilizar um computador que ir perguntar a cada cliente a sua idade
e a nota que ele avalia a loja. Voc dever elaborar o programa de computador
que far a leitura da opinio dos 100 primeiros clientes e dever informar os
dados solicitados abaixo:
NOTAS
A.
B.
C.
D.
E.

timo
Bom
Regular
Ruim
Pssimo

INFORMAES
3.
A quantidade de respostas A (timo);

1.
2. A mdia de idade das pessoas que responderam D (Ruim);
3. A percentagem de respostas E (Pssimo) e a menor idade de
quem informou esta resposta;
4. A maior idade de quem respondeu A (timo) e a maior
idade de quem respondeu D (Ruim);

Estruturas de Repetio

ANINHAMENTO

Aninhamento
Algumas vezes precisamos trabalhar com
conjuntos e sub-conjuntos de dados;
Neste caso precisamos de uma estrutura de
repetio para percorrer todos os conjuntos;
Mas para cada conjunto, precisamos percorrer um
sub-conjunto de dados;
Isso chamamos de aninhamento de estruturas de
repetio.

Aninhamento
Imagine um problema:

O usurio precisa somar Notas Fiscais (NF);


Ele possu um nmero indeterminado de notas fiscais;
Cada NF possu um nmero indeterminado de itens;
Cada item possu um valor que o usurio ir digitar;
Ao terminar de digitar cada nota, dever ser exibido o
valor total de soma dos itens da NF digitada;
Ao terminar de digitar TODAS as NFs, dever ser
exibido o valor total de soma de todas as NFs

A Nota Fiscal

Aninhamento
somaNF, somaTotal, val: real
nfa, nnf, ia, ni: inteiro
escreva("Digite o nmero de NFs a serem somadas: ")
leia(nnf)
somaTotal <- 0
para nfa de 1 ate nnf faca
escreval("======== Nota Fiscal ", nfa, " ========")
escreva("Digite o nmero de itens da NF", nfa, ": ")
leia(ni)
somaNF <- 0
para ia de 1 ate ni faca
Loop
escreva("Digite o valor do item ",ia,": ")
externo
leia(val)
somaNF <- somaNF + val
fimpara
somaTotal <- somaTotal + somaNF
escreval("Soma da NF", nfa, ": ", somaNF)
fimpara
escreval("=============================")
escreval("Soma de Todas as NFs: ", somaTotal)

Loop
interno

Estruturas de Repetio Aninhadas

EXERCCIOS

Exerccios Repetio
Implemente algoritmos que:
1. Informe se um nmero digitado primo.
Caso no for, informe por quais nmeros ele
divisvel;
2. Digitados dois nmeros (base e expoente
be), calcule o resultado utilizando apenas
multiplicaes;

Exerccios Repetio
(Repetio Aninhada)
3. Calcule a soma de todos os nmeros primos
existentes entre 1 e 100;
4. Faa o mesmo que em 2, mas usando apenas
somas;