Exercícios
2. Construa um algoritmo que disponha do cálculo do valor da área de três figuras geométricas O utilizador escolherá uma das três figuras disponíveis a tratar e o algoritmo
produzirá o valor da área.
Sugestão: A partir de um menu em que são apresentadas as figuras geométricas disponíveis, o utilizador escolherá a pretendida. De seguida, ser-lhe-ão pedidos os dados referentes à figura e produzir-se-á o cálculo do valor da área que será apresentado no ecrã.
E
Essttrruuttuurraassddee
RReeppeettiiççããoo
oouuCCiiccllooss
Frequentemente é necessários repetir, um determinado número de vezes, uma certa instrução ou conjunto de instruções.
Frequentemente é necessários manter, um número indeterminado de vezes, um ciclo ("Loop") de repetições, enquanto se verificar certa condição.
Essa repetição, na maior parte das vezes, não tem que ser uma repetição exacta das mesmas operações, pois pode haver pelo meio certos dados (variáveis) ou parâmetros que se vão alterando à medida que o ciclo vai decorrendo.
Exemplo de estruturas de repetição:
• Para... fazer
• Enquanto... fazer
• Repetir ... até
Enquanto numa estrutura do tipo "Para... fazer" o número de vezes que vai ocorrer a repetição do ciclo é determinada à partida por uma variável de controlo que é incrementada ou decrementada à medida que o ciclo decorre. Na estrutura "Enquanto.. fazer" e "Repetir...até" o ciclo decorrerá um número indeterminado de vezes, dependendo da verificação ou não da condição de controlo - o que depende dos acontecimentos no decurso do próprio ciclo.
E
Essttrruuttuurraa
ddee
RReeppeettiiççããoo
--
""PPaarraa......FFaazzeerr""
Esta estrutura de repetição é controlada por uma variável - Variável de controlo - que parte de um determinado valor e incrementa ou decrementa até um outro determinado valor.
A Sintaxe, em pseudocódigo, é a seguinte:
Para <variável> de <valor inicial> até <valor final> fazer
<Instrução>
Fim Para
As expressões <valor inicial> e <valor final> podem ser valores numéricos directos, valores de outras variáveis ou expressões, desde que esses valores sejam números inteiros.
À variável que controla o ciclo, também é costume chamar "contador" ou variável de iteração, na medida em que vai assumindo valores sucessivos.
Os valores da variável de controlo podem variar num sentido crescente ou decrescente. O fluxograma seria da forma:
Variável
Valor_Inicial até Valor_Final
Instrução
A variável toma um valor inicial que vai incrementando (ou decrementando) até um valor final. À partida já sei quantas vezes vou repetir a instrução ou conjunto de instruções.
Exemplo: Faça um algoritmo para ler e escrever o nome de 20 pessoas. Algoritmo Ler_escrever
Variáveis
NOME: Caracteres CONTADOR: Inteiro
Início
Para CONTADOR de 1 até 20 fazer
Ler(NOME) Escrever(NOME) Fim para
Fim
E
Essttrruuttuurraa
ddee
RReeppeettiiççããoo
--
""EEnnqquuaannttoo......
FFaazzeerr""
O ciclo ou estrutura de repetição começa com a verificação de uma expressão ou condição, digamos, a "condição de controlo".
Se a condição for verdadeira, a instrução ou conjunto de instruções, será executado um número vezes indeterminado à partida, dependendo de a condição de controlo se manter verdadeira ou passar a falsa.
A Sintaxe, em pseudocódigo, é a seguinte: Enquanto <Condição> fazer
<Instrução>
Fim enquanto
O fluxograma seria da forma:
Condição
Instrução
Sim Não
• Neste caso, a Instrução repete-se enquanto a condição for verdadeira.
• A condição é testada antes de se iniciar a Instrução.
• Se a condição for verdadeira executa-se a instrução, se for falsa já não se executa a instrução.
Exemplo: Faça um algoritmo para ler e escrever o Nome de 20 pessoas. Algoritmo Ler_escrever Variáveis NOME: Caracteres TOTAL: Inteiro Início TOTAL ← 0
Enquanto TOTAL < 20 fazer Ler(NOME)
TOTAL ← TOTAL + 1 Fim enquanto
Fim
Exercícios
O algoritmo seguinte produz um ciclo infinito. Corrija-o.
CONTAGEM 1
Enquanto CONTAGEM <= 10 fazer
Escrever(‘Não acabou’)
Fim enquanto
E
Essttrruuttuurraa
ddee
RReeppeettiiççããoo
--
""RReeppeettiirr......
aattéé""
Como a condição de controlo de repetição só é avaliada no final do ciclo, a instrução ou instruções será(ão) executada(s) sempre pelo menos uma vez.
O ciclo será interrompido quando a condição de controlo for verdadeira.
A instrução será executada sempre pelo menos uma vez.
A Sintaxe em pseudocódigo: Repetir <Instrução> até <Condição> Na forma de fluxograma: Condição Sim Não Instrução
• A instrução será repetida até que a condição seja verdadeira.
• A condição será testada depois de realizada a instrução.
• Portanto, a acção realizar-se-á pelo menos uma vez.
• Se a condição for falsa executa-se a instrução, se for verdadeira já não se executa a instrução.
Exemplo: Faça um algoritmo para ler e escrever o Nome de 20 pessoas. Algoritmo Ler_escrever Variáveis NOME: Caracteres TOTAL: Inteiro Início TOTAL ← 0 Repetir Ler(NOME) Escrever(‘Nome = ‘, NOME) TOTAL ← TOTAL + 1 até TOTAL >= 20 Fim
A estrutura “Repetir... até” pode ser realizada utilizando a estrutura “Enquanto... fazer”. Basta mudar de “Repetir... até <condição>”, para “Enquanto Não <Condição>... fazer”.
A estrutura “Repetir... até” pode ser realizada utilizando a estrutura “Enquanto... fazer”.
Apresentamos um exemplo. Trata-se de um algoritmo para o cálculo dos múltiplos de um número até um determinado valor definido por LIMITE.
Assim, temos:
Algoritmo múltiplos
NUMERO, LIMITE, MULTIPLO: Inteiro
Início
Ler(NUMERO, LIMITE) MULTIPLO NUMERO
Repetir
Escrever (MULTIPLO)
MULTIPLO MULTIPLO + NUMERO
até (MÚLTIPLO >= LIMITE) Fim
Algoritmo múltiplos
NUMERO, LIMITE, MULTIPLO: Inteiro
Início
Ler(NUMERO, LIMITE) MULTIPLO NUMERO
Enquanto (MÚLTIPLO < LIMITE)
Escrever (MULTIPLO)
MULTIPLO MULTIPLO + NUMERO
Fim enquanto Fim
Nota: Não (MÚLTIPLO >= LIMITE) = (MÚLTIPLO < LIMITE)
E
ExxeemmppllooPPrrááttiiccoo––NNúúmmeerrooPPrriimmoo
Vamos ver um algoritmo para verificar se um número é ou não primo. Algoritmo Números_Primos
[Vamos verificar se é primo] NUMERO, CONTAGEM: Inteiro FRASE: Caracteres
PRIMO: Lógico
Início
Ler(NUMERO)
PRIMO ← verdadeiro
Para contagem de 2 até NUMERO-1 fazer [Se for divisível não é primo]
Se (NUMERO mod CONTAGEM = 0) então
PRIMO ← falso
Fim se Fim para
Se PRIMO então
FRASE ← ‘É número primo’
senão
FRASE ← ‘Não é primo’
Fim se
Escrever(FRASE)
Fim
Análise do Algoritmo
Um número primo é aquele que é divisível, só e somente, pela unidade e por ele próprio. Se for divisível por qualquer outro, não é número primo.
Como todos os números são divisíveis por um e por si próprios não necessitamos de verificar a divisibilidade. Assim, temos de verificar todos os outros números desde 2 até ao número anterior ao que queremos verificar (NUMERO - 1).
Por isso aparece a estrutura:
Para CONTAGEM de 2 até NUMERO-1 fazer
Instrução
Fim para
Se um número ‘a’ for divisível por outro ‘b’ então o resto da divisão será zero. Temos uma operação que nos dá o resto da divisão de inteiros. É o mod.
Neste caso temos que se (NUMERO mod CONTAGEM = 0) então o número não será primo. Daí que surge:
Para contagem de 2 até NUMERO-1 fazer
Se (NUMERO mod CONTAGEM = 0) então
PRIMO ← falso
Fim se Fim para
Na realidade estamos a verificar se o número não é primo. Para indicar se o número é ou não primo usamos uma variável lógica que toma um de dois valores: ou verdadeiro ou falso. A variável está identificada com o nome PRIMO.
Por isso usamos:
Se (NUMERO mod CONTAGEM = 0) então
PRIMO ← falso
Fim se
Para mandar a indicação para o ecrã, usamos o valor da variável lógica para fazer a diferenciação. Se for primo (primo terá o valor verdadeiro) é apresentado no ecrã “É número primo”; se não for será apresentada a frase “Não é primo”.
Se PRIMO então
FRASE ← ‘É número primo’
senão
FRASE ← ‘Não é primo’
Fim se
Escrever(FRASE)
Pode-se considerar uma variante da estrutura “Enquanto... fazer” Vejamos: Algoritmo Números_Primos
[Vamos verificar se é primo] NUMERO, CONTAGEM: Inteiro FRASE: Caracteres
PRIMO: Lógico
Início
Ler(NUMERO)
PRIMO ← verdadeiro
1 e ele próprio, isto é, de 2 até número-1] CONTAGEM 2 [Para iniciar a contagem]
Enquanto (CONTAGEM <= NUMERO-1) fazer
[Se for divisível não é primo]
Se (NUMERO mod CONTAGEM = 0) então
PRIMO ← falso
Fim se
CONTAGEM CONTAGEM + 1 [Incremento de uma unidade]
Fim enquanto
Se PRIMO então
FRASE ← ‘É número primo’
senão
FRASE ← ‘Não é primo’
Fim se
Escrever(FRASE)
Fim
Neste caso é necessária a inicialização da variável contador (CONTAGEM) antes da estrutura “Enquanto... fazer”.
Dentro do ciclo, é necessário proceder ao incremento da variável contador (CONTAGEM) para que alcance o valor final pretendido.
CONTAGEM <= NUMERO-1 Sim Início Ler NUMERO PRIMO <-- verdadeiro CONTAGEM <-- 2 NUMERO mod CONTAGEM = 0 PRIMO <-- falso Sim Não CONTAGEM <-- CONTAGEM + 1 Não PRIMO
FRASE <-- 'Não é primo'
FRASE <-- 'É número primo'
Escrever FRASE
Fim
Melhoria do Algoritmo
O algoritmo pode ser melhorado em dois aspectos:
1. Não tem interesse a verificação de números negativos, nem o zero nem o número um.