Introdução à programação e aos algoritmos
3.5 Estruturas de Repetição
conta 9 anos. Acima de dois anos, temos de contar 5,2 anos por ano para um
beagle (raça pequena), 5,7 para um golden retriever (raça média) e 7,8 para um
pastor alemão (raça grande). Considere que um cão pequeno pesa até 3 quilos,
um cão médio pesa entre 10 e 23 quilos e um cão grande tem acima de 23 quilos.
Escreva um programa que solicite o peso do cão e a sua idade. Com esses
dados, seu programa deve calcular a “idade humana” do cão usando como
exemplo os cães citados anteriormente.
3.5 ESTRUTURAS DE REPETIÇÃO
Como dito anteriormente, os computadores executam muito bem as tarefas repetitivas. Com frequência, temos de executar uma ação enquanto alguma condição seja verdadeira. Assim, por exemplo, quando procuramos um nome em uma lista, devemos ler nomes enquanto o nome lido for diferente daquele que procuramos. O mecanismo em algoritmos para isso é o bloco “Enquanto condição faça comandos”:
Enquanto condição for verdade
execute comandos
Por exemplo, se quiséssemos calcular a soma de todos os
inteiros até determinado número, ou seja, se eu digitar o número 10, meu programa irá somar 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 e dar o resultado da soma. Primeiro, é preciso armazenar o resultado entre cada execução do laço e depois executar o número de vezes determinado pela leitura. Um programa em Python seria:
n = int(input(‘Qual o número final? ‘))
soma = 0
i = 1
while i <= n:
soma = soma + i
i = i + 1
print(‘A soma de 1 até ‘, n, ‘ = ‘, soma)
■ Programa 3.11: soma_numeros.py.
Este programa, apesar de funcionar corretamente, ainda apresenta um problema: se você digitar um número igual a zero ou negativo, o programa ainda assim dará uma resposta. Vamos consertar isso fazendo um teste sobre o número lido:
n = int(input(‘Qual o número final? ‘)) if n > 0:
soma = 0
i = 1
while i <= n:
soma = soma + i
i = i + 1
print(‘A soma de 1 até ‘, n, ‘ = ‘, soma)
else:
print(‘Use números positivos’)
■ Programa 3.12: soma_numeros_v2.py.
Observe como a indentação deixa claro que o bloco ‘while’ está dentro do bloco ‘ if’. Se não for digitado um número positivo, o programa irá emitir uma mensagem e terminar.
Podemos aprimorar este programa e fazer com que termine apenas quando for digitado o número zero. Para tanto, vamos criar mais um nível para os blocos. O algoritmo ficaria:
Leia n
Enquanto n for diferente de 0 faça:
Se n > 0 faça:
soma números
Senão
escreva ‘Use números positivos’
Escreva a soma final
Pergunte por novo n
Intencionalmente, mostrei apenas o que é essencial ao algoritmo, sem entrar em muitos detalhes. Não é necessário. O bloco da soma de números, por exemplo, pode ser implementado de diversas formas e deixando o bloco sem detalhes podemos modificar suas diversas implementações. Em Python, teríamos:
n = int(input(‘Qual o número final? (0 para terminar
‘))
while n != 0:
if n > 0:
soma = 0
i = 1
while i <= n:
soma = soma + i
i = i + 1
print(‘A soma de 1 até ‘, n, ‘ = ‘, soma)
else:
print(‘Use números positivos’)
n = int(input(‘Qual o número final? (0 para termin
ar) ‘))
■ Programa 3.13: soma_numeros_v3.py.
Perceba que as linhas de carga inicial dos valores de soma e i
foram deslocadas para dentro do laço principal. Outra novidade aqui é o comando
while n != 0:
Em Python, “n != 0” é equivalente a dizer n diferente de 0.
Note como o programa é montado com diversos blocos, cada um
sendo englobado por um bloco mais externo. A Figura 3.8 mostra isso esquematicamente.
Figura 3.8 Blocos do programa 3.13.
EXERCÍCIO 3.11
Escreva um programa que receba um número inteiro n e calcule a soma dos
quadrados dos números até n-1. Exemplo: se n for igual a 3, seu programa
deve dar o resultado da soma dos números 12 + 22.
EXERCÍCIO 3.12
Escreva um programa que calcule a média dos números digitados pelo usuário. O
programa deve calcular a média quando o usuário digitar o número zero.
Niklaus E. Wirth – 1934-
Niklaus Wirth é um cientista suíço, pioneiro em assuntos ligados à engenharia de
software. Foi o criador da linguagem Pascal que, graças à sua sólida implementação
dos conceitos da programação estruturada, foi durante anos a linguagem preferida
para o ensino da programação em diversas universidades. Apesar de excelente para o
ensino, Pascal nunca foi considerada uma linguagem bem adaptada a projetos
pro ssionais em programação e, por isso, foi sendo substituída aos poucos por
linguagens mais adequadas tanto ao ensino quanto ao uso pro ssional.
Além de Pascal, Wirth criou diversas outras linguagens, por exemplo, Modula-2 e
Oberon. Por seu trabalho pioneiro em linguagens e sua inestimável contribuição nesta
área, Wirth ganhou em 1984 o Prêmio Turing.
Wirth ainda é autor de importantes textos sobre o ensino da programação, bem
como sobre engenharia de software.
Figura 3.9 Niklaus E. Wirth. Fonte: Reproduzida com permissão de Niklaus Wirth.