|
16 - Estruturas de repetição
Agora iremos aprender um assunto que é muito usado durante o desenvolvimento de um jogo.
Uma estrutura de repetição permite ao programador especificar que uma ação deve ser repetida enquanto alguma condição for verdadeira.
Exemplo:
Enquanto existir itens na minha lista de compras
Compra próximo item e Excluí-lo da minha lista.
O exemplo acima mostra que enquanto existir um item na minha lista de compras o programa vai executar a função compra mais itens e a função excluir da minha lista.
Somente após não existir mais itens em minha lista a condição se torna falsa e a estrutura é desfeita.
Dessa forma podemos dar um exemplo de um loop principal de um jogo:
Enquanto não for pressionado ESC
Executa movimentos, animações, controle de periféricos, tratamento de mensagens...
Dessa forma fica fácil de perceber a importância da estrutura de repetição dentro de um jogo.
Ao total temos 3 tipos de estruturas de repetição.
Em C++ são eles:
- while () {}
- do while () {}
- for () {}
WHILE (){}
O comando while é precedido de uma condição para que o looping aconteça. Traduzindo ao pé da letra while significa “Enquanto”.
CÓDIGO...
// Exemplo de while
#include <iostream>
using namespace std;
int main()
{
int iNumero = 0;
while ( iNumero != 9 )
{
cout << "Digite um numero.: ";
cin >> iNumero;
}
cout << "PROGRAMA FINALIZADO" << endl;
system("pause");
return 0;
}
FIM DE CÓDIGO...
Se você executar o código acima irá perceber que enquanto o usuário digitar números diferentes de nove o programa continua escrevendo a mensagem “Digite um numero.: ”. Assim que o 9 for digitador o programa escreve a mensagem “PROGRAMA FINALIZADO” e pausa o resultado para o usuário analisar.
DO WHILE (){}
O comando do while é precedido do código em seguida de uma condição para que o looping aconteça.
Basicamente o código abaixo tem a mesma função que o anterior só que ao invés de declarar a condição no topo da estrutura ela é declarada no final da estrutura.
O comando do while não é muito utilizado, é mais facil usar o while comum.
CÓDIGO...
#include <iostream>
using namespace std;
int main()
{
int iNumero = 0;
do
{
cout << "Digite um numero.: ";
cin >> iNumero;
} while ( iNumero != 9 );
cout << "PROGRAMA FINALIZADO" << endl;
system("pause");
return 0;
}
FIM DE CÓDIGO...
O resultado do código acima é semelhante ao resultado do código escrito com a estrutura while.
A estrutura de repetição do/while é semelhante à estrutura while.
Na estrutura while a condição de continuação do laço é testada no principio do laço antes do corpo do laço ser executado.
A estrutura do/while testa a condição de continuação do laço depois do corpo do laço a ser executado; assim, o corpo do laço será executado pelo menos uma vez. Note que não é necessário usar chaves no comando do/while, mas nós usamos para uma melhor visualização do código e para evitar confusão com o comando while.
FOR () {}
O comando for é um contador, ele é precedido de uma expressão.
Para determinar essa expressão precisamos prestar atenção para os seguintes itens:
- O nome de uma variável de controle do contador
- O valor inicial da variável
- A condição que testa a condição final da variável
- O incremento ou decremento pelo qual a variável de controle é modificada a cada execução do laço.
Nessa estrutura o laço é controlado por um contador. Ou seja, nos dois exemplos acima nós dependíamos de uma intervenção do usuário ou de algum resultado para tornar no a condição do laço satisfatória. Agora, nosso laço terá, inicio, meio e fim que nós iremos pré-determinar.
CÓDIGO...
#include <iostream>
using namespace std;
int main()
{
int i = 0;
for ( i=0; i<10; i++ )
{
cout << "Contador.: " << i << endl;
}
cout << endl;
for ( i=9; i>=0; i-- )
{
cout << "Contador.: " << i << endl;
}
cout << "PROGRAMA FINALIZADO" << endl;
system("pause");
return 0;
}
FIM DE CÓDIGO...
No exemplo acima declaramos a variável i como sendo nosso contador.
Ao declarar a estrutura for na primeira vez iniciamos o contador com 0, testamos se ele é menor que 10, em seguida incrementamos a variável. Dessa forma o programa acima irá escrever os números de 0 a 9 na tela. No segundo comando for fizemos o contador mostrar o número em ordem decrescente.
Comando break
O comando break altera o fluxo de controle da estrutura de repetição. Dessa forma, podemos parar a execução do laço de imediato assim que uma condição for satisfatória. A execução do programa continua com o primeiro comando depois da estrutura.
CÓDIGO...
#include <iostream>
using namespace std;
int main()
{
int x = 0;
for ( x=0; x<10; x++ )
{
if (x == 5 )
{
break;
}
cout << "Valor de X.: " << x << endl;
}
cout << "A estrutura saiu do laco com x igual a " << x << endl;
system("pause");
return 0;
}
FIM DE CÓDIGO...
Note que sem usarmos o comando break a estrutura deveria imprimir na tela uma numeração de 0 a 9. No entanto, incluímos uma estrutura de seleção if para sair do laço assim que o valor de x for igual a 5.
Dessa forma, todos os comandos dentro da estrutura de repetição após o break são ignorados e o próximo comando a ser executado passa a ser o primeiro comando após o laço for, nesse caso, a mensagem que mostra o valor de x após a saída do laço.
Comando continue
O comando continue quando executado numa estrutura de repetição também altera o fluxo de controle. Dessa forma, salta os comandos restantes no corpo dessa estrutura e prossegue com a próxima repetição do laço. Diferente do comando break que sai da estrutura, a execução do programa com o comando continue continua com o primeiro comando dentro da estrutura de repetição.
CÓDIGO...
#include <iostream>
using namespace std;
int main()
{
int x = 0;
for ( x=0; x<10; x++ )
{
if ( x == 5 )
{
continue;
}
cout << "Valor de X.: " << x << endl;
}
cout << "A estrutura saiu do laco com x igual a " << x << endl;
system("pause");
return 0;
}
FIM DE CÓDIGO...
O código acima deverá imprimir na tela números de 0 a 9 com exceção do numero 5.
Esse exemplo utiliza o mesmo código que o primeiro exemplo com o comando break.
Só que ao invés de sair do laço quando o valor de x é igual a 5 o programa pula a impressão do numero 5 na tela e continua imprimindo os outros valores. Dessa forma temos todos os números de 0 a 9 na tela com exceção do número 5.
Contribuidor
Bruno A. Rovela
01/06/2007
|