• Nenhum resultado encontrado

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

No documento Sebenta Algoritmia (páginas 32-40)

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.

No documento Sebenta Algoritmia (páginas 32-40)