• No results found

Tilgjengelighet til behandling i spesialisthelsetjenesten og samarbeid

In document opptrappingsplanen for rusfeltet (sider 97-100)

Os laços de repetição permite que um conjunto de instruções seja repetido até que uma condição seja encontrada. A linguagem C suporta os mesmos tipos de laços que outras linguagens estruturadas modernas. Os laços em C são o

for, o while e o do-while. Cada um deles será examinado separadamente. 3.7 O LAÇO for

A forma geral do laço for é

for (inicialização; condição; incremento){ comandos;

}

Na sua forma simples, a inicialização é um comando de atribuição usado para inicializar a variável de controle do laço.

A condição é usualmente uma expressão relacional que determina quando o laço terminará pelo teste da variável de controle do laço contra algum valor.

O incremento usualmente define como a variável de controle do laço mudará cada vez que a repetição for realizada.

Estas três maiores divisões devem ser separadas por ponto-e-vírgula. O laço for continuará a execução do programa no comando seguinte a for.

Para um exemplo simples, o seguinte programa imprime os números de 1 a 100 na tela: #include <stdio.h> void main(){ int x; for (x = 1; x <= 100; x++){ printf (“%d “, x); } }

Neste programa, x é inicializado em 1. Desde que x seja menor ou igual a 100, a função printf( ) é chamada. Depois que a função printf( ) retorna, x é incrementado em 1 e testado para ver se é menor ou igual a 100. Este processo

repete-se até que x seja maior que 100, ponto este em que a repetição termina. Neste exemplo, x é a variável de controle do laço, que é modificada e verificada cada vez que o laço é executado.

O laço for nem sempre precisa executar de maneira crescente. Um laço negativo é criado pelo decremento em vez do incremento da variável de controle do laço. Por exemplo, este programa imprime os números de 100 a 1 na tela.

#include <stdio.h> void main(){ int x; for (x = 100; x > 0; x--){ printf (“%d “, x); } }

Porém, você não está restrito a incrementar ou decrementar a variável de controle do laço. Você pode mudar esta variável da maneira que desejar. Por exemplo, este laço imprime os números de 0 a 100 de cinco em cinco.

#include <stdio.h> void main(){ int x; for (x = 0; x <= 100; x = x + 5){ printf (“%d “, x); } }

Usando-se um bloco de código, é possível que um for repita múltiplas comandos, como mostrado neste exemplo, que imprime o quadrado dos números de 0 a 99.

#include <stdio.h> void main(){

int i;

for (i = 100; i < 100; i++){

printf (“Este é o valor de i: %d “, i); printf (“ e i ao quadrado: %d\n”, i * i); }

}

Um ponto importante sobre o laço for é que o teste condicional é sempre realizado no início do laço. Isso significa que o código dentro do laço pode nunca ser

executado se a condição é falsa logo de início. Por exemplo: x = 10; for (y = 10; y != x; ++y){ printf (“%d “, y); } printf (“%d”, y);

Este laço nunca será executado, pois as variáveis x e y são de fato iguais quando o laço é testado pela primeira vez. Isso faz com que a expressão seja avaliada como falsa, nem o corpo do laço nem a parte de incremento do próprio laço será executado. Portanto, a variável y terá o valor 10 associado a ela e a saída será somente o número 10 impresso uma vez na tela.

3.7.1 VARIÁVEIS DO LAÇO for

A discussão mencionada descreve a forma mais comum do laço for. Entretanto, muitas variações são permitidas, o que aumenta o seu poder, flexibilidade e aplicabilidade em certas situações em programação.

Uma das variações mais comuns é o uso de duas ou mais variáveis de controle do laço. Aqui está um exemplo que usa duas variáveis, x e y, para controlar o laço. #include <stdio.h> void main(){ int x, y; for (x = 0, y = 0; x + y < 100; x++, y++){ printf (“%d”, x + y); } }

Este programa imprime os números de 0 a 98 de dois em dois. Note que as vírgulas são usadas para separar os comandos de inicialização e incremento. A vírgula é um operador da linguagem C que significa essencialmente “faça isto e isto”. A cada interação por meio do laço, tanto x como y são incrementadas e os dois devem estar com o valor correto para que o laço se encerre.

A expressão condicional não tem necessariamente que envolver teste de variáveis de controle do laço com algum valor-alvo. De fato, a condição pode ser qualquer expressão válida da linguagem C. Isso significa que é possível fazer o teste por meio de muitas condições de terminação. Por exemplo, este programa ajuda a ensinar crianças a somar. Se a criança cansa e quer parar, ela digita N quando perguntada se quer mais. Preste especial atenção à parte da condição do laço for. A expressão condicional faz com que o for seja executado até 99 ou até que o usuário responda não à solicitação.

#include <stdio.h> #include <ctype.h> void main(){

int i, j, resposta; char fim = ‘ ‘;

for (i = 0, i < 100 && fim != ‘N’; i++){ for (j = 1; j < 10; j++){ printf (“quanto é %d + %d? “, i, j); scanf (“%d”, &resposta); if (resposta != (i + j)){ printf (“errado\n”); } else{ printf (“certo\n”); } } printf (“Mais ?”); fim = toupper(getche()); printf (“\n”); } }

Uma outra interessante variação do laço for é possível porque, atualmente, cada uma das três partes da declaração do for podem consistir de qualquer expressão válida da linguagem C. Elas não precisam ter nada que faça a seção ser usada de maneira padrão. Considerando isso, vejamos o seguinte exemplo:

#include <stdio.h> void main(){

int t;

for (prompt(); t = readnum(); prompt()) { sqrnum(t);

} }

void prompt(){

printf (“Informe um inteiro: ”); }

int readnum(){ int t;

scanf (“%d”, &t); return t;

}

void sqrnum (int num){

printf (“%d\n”, num * num); }

Esse programa primeiro apresenta uma solicitação e, então, aguarda pela resposta. Quando um número é informado, o seu quadrado é exibido e novamente é feita uma solicitação. Isso prossegue até que um 0 seja digitado. Se você olhar com atenção o laço for na função main( ), verá que cada parte do for é compreendida por chamadas a funções que fazem a solicitação ao usuário e lêem um número do teclado. Se o número informado é zero, o laço termina, já que a expressão condicional será falsa; caso contrário, o quadrado do número é calculado. Assim, nesse laço for as partes de inicialização e incremento são usadas de modo não tradicional, mas perfeitamente válido.

Outra característica interessante do laço for é que pedaços da definição do laço não necessitam estar lá. Na verdade, não é necessário que uma extensão esteja presente em qualquer das partes – as expressões são opcionais. Por exemplo, este laço será executado até que o número 10 seja informado.

for (x = 0; x!= 10; ) scanf (“%d”, &x);

Note que a parte de incremento da definição do for está vazia. Isso significa que, cada vez que o laço é repetido, a variável x é testada para verificar se ela é igual a 10, mas x não é modificado de nenhuma forma. Entretanto, se você digital 10, a condição do laço torna-se falsa e o laço encerra-se.

3.7.2 O LAÇO INFINITO

Um dos usos mais interessantes do laço for é na criação de laços infinitos. Nenhuma das três expressões que formam o laço for são requeridas, portanto, é possível fazer um laço sem fim, deixando-se a expressão condicional vazia, como mostra este exemplo.

for ( ; ; ){

printf (“Este laço será executado para sempre.\n”); }

3.7.3 A INTERRUPÇÃO DE UM LAÇO for

A construção for ( ; ; ) não cria necessariamente um laço infinito tendo em vista uma nova aplicação da declaração break da linguagem C. Quando encontrada

em algum lugar dentro do corpo de um laço, a declaração break faz com que o laço termine. O controle do programa segue no código posterior do laço, como mostrado aqui.

for ( ; ; ){

ch = getche(); //lê um caractere if (ch = ‘A’) break; //sai do laço }

printf (“Você digitou a letra A”);

Este laço é executado até que um caractere A seja digitado no teclado.

3.7.4 USANDO LAÇOS for SEM CONTEÚDO

Um bloco de comandos, como definido pela sintaxe da linguagem C, pode ser vazio. Isso significa que o conteúdo do for (ou qualquer outro laço) também pode ser vazio.

Essa característica pode ser usada para aumentar a eficiência de certos algoritmos, bem como para criar laços de tempo e espera. É assim que se cria um tempo de espera usando-se o for.

for (t = 0; t < ALGUM VALOR; t++);

Exercícios:

1) Fazer uma função que receba um número e retorne o fatorial deste número, usando for. (Lembre que 0!=1 e 1!=1).

2) Fazer uma rotina para contar as ocorrências do caractere 'a' em uma string, usando for.

3) Fazer uma rotina para achar o maior valor de um vetor de 10 posições, usando for.

4) Fazer uma rotina para contar o número de ocorrências das letras de 'A' até 'Z' em um string.

5) Escrever um programa que gera e escreve os 5 primeiros números perfeitos. Um número perfeito é aquele que é igual a soma dos seus divisores. Por exemplo: 6 = 1 + 2 + 3

28 = 1 + 2 + 4 + 7 + 14 etc.

In document opptrappingsplanen for rusfeltet (sider 97-100)