Você está na página 1de 4

Fernando Ferreira – ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES

Geralmente, o laço infinito ocorre quando esquecemos


COMANDOS DE REPETIÇÃO
de modificar, dentro do bloco, a variável testada na
INTRODUÇÃO condição ou quando cometemos algum erro de sintaxe

Existem casos em que precisamos que uma sequência em relação às chaves que delimitam o escopo dos

de comandos seja executada várias vezes e ficar comandos de repetição.

programando caso a caso, linha a linha, é inviável. Por


Um laço infinito é considerado um erro de programação
isso, os comandos de repetição são muito úteis na
nessa disciplina.
linguagem C.
O COMANDO WHILE
A fórmula geral, em pseudocódigo, é:
 Significa “enquanto” em inglês, tornando a
Enquanto (condição) faça utilização mais intuitiva
sequência de comandos;
 O while analisa uma condição e executa o bloco de
Fim enquanto
comandos se ela for verdadeira. Se for falsa, o bloco
Os comandos de repetição analisam uma expressão é ignorado
relacional, lógica ou matemática e verificam se aquela  O uso de chaves é obrigatório quando o comando
condição é verdadeira ou falsa. Enquanto a relação não é único (quase sempre)
retornar como verdadeira para o programa, o bloco de
comandos (laço de repetições) é executado. Assim que
a expressão avaliada for falsa, a sequência é ignorada e
o programa passa a ler a linha exatamente depois do fim
do bloco. O funcionamento é o seguinte: Teste da
condição  Retorna verdadeiro  Execução do bloco Nesse exemplo, declaramos valores para x e y e enquanto x
de comandos  Teste da condição  ...  Retorna for menor que y, o programa deve imprimir o valor de x e,
falso  Fim da repetição. logo após, incrementar x em uma unidade. No primeiro teste,
1 é menor que 10 (verdadeiro), então o programa imprime 1
LAÇO INFINITO e soma uma unidade a x, ou seja, x passa a receber o valor 2.

Um laço infinito acontece quando a repetição nunca Nesse momento, o teste é realizado novamente: 2 é menor que
10 (verdadeiro), então a sequência é executada novamente.
para, ou seja, a condição determinada para que aquele
Em algum momento, x valerá 11, retornando falso para o teste
bloco seja repetido nunca retorna como falsa. Isso pode
e, consequentemente, finalizando o comando while.
acontecer quando não existe uma condição de parada
ou, quando existe, a condição nunca será atingida. Note Copie esse código e rode em modo de debug para visualizar

um exemplo em pseudocódigo: a mudança do valor da variável x a cada repetição.

Declare x e y; OBS: Se a chave que determina o fim do bloco fosse


x recebe 5 e y recebe 1; colocada antes da linha que atualiza o valor da variável
Enquanto (y < x) faça x, seria criado um laço infinito.
Imprimia x + y;
Note que pelo menos uma das variáveis é modificada
Note que o programa imprimirá 6 para sempre, visto que dentro da sequência, de maneira que a condição de
1 (y) sempre será menor que 5 (x). Essa relação retorna parada seja atingida em algum momento.
verdadeiro toda vez que é avaliada.
Fernando Ferreira – ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES

 Cuidado! Se você colocar um ponto e vírgula logo  Analise esse código: queremos saber a soma dos
depois da determinação da condição a ser testada, o números de 1 a 10.
compilador entende que o comando acabou e tudo
aquilo que estiver depois dele será executado
mesmo que a condição seja falsa

A variável soma armazena um valor durante toda a repetição.


As chaves são dispensáveis, pois o comando aqui é único.
O COMANDO FOR Vamos analisar o comando for: primeiramente, fizemos uma

 O comando for segue a mesma sintaxe do comando inicialização atribuindo 1 à variável i. Partimos para o teste:

while em relação às chaves e ao ponto e vírgula; i é menor que dez? Nesse momento, sim, pois i vale 1. Teste
verdadeiro implica na execução do comando. Como soma
 Ele é utilizado, geralmente, quando uma contagem
vale 0 e i vale 1, o novo valor da variável soma é 1. Comando
é feita. A partir de agora, precisaremos declarar
executado, desviamos para o incremento: i++ significa
variáveis que servem unicamente para contar
adicionarmos 1 à variável i. Agora, ela vale 2. Incremento
repetições (serão usadas, geralmente, nas condições feito, desviamos para a condição: i é menor que dez? Nesse
de parada) e armazenarem determinado dado ao momento, sim, pois i vale 2. Teste verdadeiro implica na
longo da repetição execução do comando. Como soma vale 1 e i vale 2, o novo
 Esse comando possui três cláusulas: inicialização, valor atribuído à variável soma é 3. Comando executado,

condição é incremento. desviamos para o incremento: i++ significa adicionarmos 1 à


variável i. Agora, ela vale 3. Incremento feito, desviamos para
 Com o comando for, fazemos uma atribuição, um
a condição: i é menor que 10?....
teste e um incremento na mesma linha:
E por aí vai! Chegará um momento em que o teste retornará
falso, ignorando o comando e partindo para o printf, que
 Inicialização: Geralmente atribuímos valores para deverá imprimir a soma dos 10 primeiros números naturais
as variáveis que serão usadas dentro da sequência. não nulos.
 Condição: Após atribuir os valores, o programa
 As cláusulas do comando for podem ser omitidas, o
parte para o teste da condição, a qual deverá ser uma
único requisito do comando é que existam os dois
expressão relacional, lógica ou aritmética. Se a
sinais de ponto e vírgula. Tanto a inicialização e o
condição retornar verdadeira, a sequência de
incremento podem ser ocultados, mas omitir a
comandos é executada.
condição gera um laço infinito, pois, sem condição,
 Incremento: Logo depois do bloco de comandos
o compilador entende que o teste deve retornar
ser executado, o programa desvia para a linha do for
sempre verdadeiro.
e realiza o incremento determinado (é sempre uma
atribuição, que pode ser feita por meio de um
operador matemático, uma leitura de teclado, etc.).
 Nesse caso, a inicialização foi omitida. Isso
Quando o incremento é realizado, o programa desvia acontece quando você já declarou o valor da
para o teste da condição, avalia, executa os comandos, variável que seria declarada ali. Quando o
incrementa, volta para o teste, avalia, executa os incremento é omitido, provavelmente ele foi feito
comandos, incrementa ... até que o teste retorne falso. dentro do próprio bloco de repetição.
Fernando Ferreira – ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES

 Analise, agora, esse código mais complexo em que comandos pelo menos uma vez, mesmo que a
usamos um contador para atingir nossa condição de condição analisada seja falsa.
parada, um comando de condição e um de repetição:  Analise a forma geral:

 Traduzindo: faça a sequência de comandos


enquanto a condição for verdadeira.
 O bloco de comandos, delimitado pelas chaves, é
realizado e então a condição é avaliada. Se ela
retornar como verdadeira, o programa desvia de
Um determinado valor deverá ser digitado pelo usuário (n). volta para o comando do e repete o bloco. A
Se (if) esse valor for maior que zero, então, serão impressos condição, novamente, será uma expressão
na tela todos os enésimos primeiros números pares e a soma relacional, lógica ou aritmética.
de todos esses números. O programa faz isso inicializando o
 Resposta falsa ao teste de condição implica no fim
comando for atribuindo 2, o primeiro número par, à variável
do laço.
i. Realiza o teste, que depende do numero n digitado, e
 Nesse comando, o ponto e vírgula é necessário após
executa o bloco de comandos. Desvia para o incremento do
contador, testa a condição... Repete até que o contador seja
determinar a condição do while, pois a sua

maior que o número n digitado. sequência de ações já foi feita. Sendo assim, o
compilador exige um operador que finaliza o
Copie o código e rode em modo de debug para analisar o que
comando, pois o do-while já foi definido.
acontece linha a linha.

 A vírgula pode ser muito útil dentro das cláusulas


do comando for: você pode atribuir valores a
quantas variáveis quiser, determinar quantos
Nesse exemplo, o programa pedirá ao usuário para digitar um
incrementos quiser. Os comandos só param quando
numero pelo menos uma vez. Se esse numero for negativo,
o compilador encontra o ponto e vírgula:
ele repete o bloco de comandos. Ficará aparecendo a
mensagem do printf na tela enquanto o usuário não digitar um
numero positivo.
 A variável utilizada no comando for pode ser do
tipo char também. O COMANDO BREAK

 Esse comando foi visto no capítulo sobre comandos


O COMANDO DO-WHILE
de condição e era utilizado para evitar que o
 Esse comando é bastante semelhante ao while. A
programa executasse todos os comandos
sintaxe das chaves segue igual.
posteriores ao comando case que retornasse
 A principal diferença entre o while e o do-while é
verdadeiro no comando switch.
que o primeiro comando apenas executa o bloco de
 Agora, o break funciona para quebrar o laço de uma
ações se a condição for verdadeira logo no primeiro
repetição. Geralmente, se quisermos que a repetição
teste, enquanto o segundo faz a sequência de
pare caso ela alcance determinada condição,
usamos o break.
Fernando Ferreira – ALGORITMOS E PROGRAMAÇÃO DE COMPUTADORES

 Ao encontrar um comando break, o fluxo do  A grande diferença é que o break acaba com o laço
programa é desviado para a primeira linha e o continue apenas para a repetição em
exatamente após o bloco de comandos da repetição determinadas condições e, como ele desvia de volta
usada (for, while ou do-while). para o teste de condição (for e while), o laço
 Esse comando deve ser sempre colocado no escopo continua a partir daquele ponto.
de um if ou else dentro da repetição. Se o break não  Também deve ser colocado no escopo de um if ou
for colocado nessas condições, o laço da repetição else. Pode causar um laço infinito se usado de
para logo na primeira execução. maneira incorreta.
 Todos os comandos que estejam abaixo do break
dentro do bloco da repetição serão ignorados assim
que a linha em que ele estiver for lida.

Nesse exemplo, o usuário digita valores para a e b e o


programa imprime todos os números entre eles, mas, se o
número 10 estiver entre esses números, tudo aquilo que está
abaixo do continue dentro do bloco da repetição é ignorado e
o fluxo do programa é direcionado de volta para a linha do
Nesse exemplo, o usuário digita valores para a e b e o
while. Ou seja, o teste é feito novamente, o valor de a será
programa imprime todos os números entre eles, mas, se o
incrementado e, agora, o continue não será executado, pois a
número 10 estiver entre esses números, o laço da repetição é
não vale 10 mais. Resumindo: esse programa imprimirá todos
quebrado e o fluxo do programa é direcionado para o ultimo
os números entre a e b, menos o 10. Copie o código e rode em
printf. Como todos os comandos que estão abaixo do break
modo de debug para analisar o que acontece linha a linha.
dentro do bloco da repetição são ignorados quando ele é
identificado, o 10 não será impresso na tela (a impressão para
O COMANDO GOTO
no 9).
 A programação estruturada mostra que existem
O COMANDO CONTINUE diversos meios para evitar o uso do goto.

 Sua função é parar o laço de uma repetição.  O grande problema é que ele pode causar uma

Enquanto o break faz com que o fluxo do programa grande confusão no momento em que um

seja desviado para linha exatamente depois da programador analisa um código-fonte com esse

sequência de comandos, o continue desvia de volta comando. A estrutura fica desorganizada e deixa

para a linha que está o comando de repetição. tudo muito confuso.

 Todos os comandos que estejam abaixo do


continue dentro do bloco da repetição serão
ignorados assim que a linha em que ele estiver for
lida.

Você também pode gostar