Jiraspiom

Blog Pessoal

Lição 06

Lição 6 – Estruturas de Iteração e Desvios Condicionais

Estruturas de Iteração

A maioria das linguagens de programação têm certas estruturas que servem para desviar o controle das instruções, repetir certos trechos de códigos, tomar cedisões, etc. As principais estruturas de controle em C++ serão mostradas nesta parte do curso.

If e Else

A palavra-chave IF é usada quando queremos executar certo trecho do código somente se alguma condição(ões) for(em) satisfeita(s).
Exemplo:

if (x == 123)
cout << “O valor de x é 123”;

Aqui, o programa imprime a string “O valor de x é 123” somente se o valor de x for igual (=) a 123. Para inserir mais de uma instrução quando a condição é verdadeira, basta usarmos as linhas de código entre chaves { }, assim:

if (x == 123)
{
cout << “O valor de x é 123”;
cout << “O valor de x não é 100”;
}

Se a condição tiver sido falsa e quisermos executar algum trecho de código neste caso, usamos o Else:

if (x > 123)
cout << “O valor de x é superior a 123”;
else (x < 123)
cout << “O valor de x é inferior a 123”;
else
cout << “O valor de x é zero”;

Aqui, se o valor de x for superior a 123, ele imprime:

O valor de x é superior a 123

já se o valor de x for inferior a 123, ele imprime:

O valor de x é inferior a 123

ou se for 0, ele imprime:

O valor de x é zero.

Estruturas de Iteração

Os Loops têm como propósito repetir um trecho de código um certo número de vezes enquanto/até que a condição seja satisfeita.

While

Uma destas estruturas é o loop while. Ele repete certo trecho enquanto a condição não for satisfeita.
Exemplo:

#include <iostream>
using namespace std;

int main ()
{
int n;
cout << “Insira um valor de início > “;
cin >> n;

while (n>0) {
cout << n << “, “;
–n;
}

cout << “BOOM!\n”;
return 0;
}


O que resulta em:

Insira um valor de início > 7
7, 6, 5, 4, 3, 2, 1, BOOM!


O programa anterior faz o que está descrito nos seguintes passos:

1- Quando é iniciado, pede ao usuário que insira um valor de entrada e ele acaba atribuindo um valor para n.
2- Quando o loop inicia, se o valor inserido atende à condição n>0:
verdadeira – a sentença é executada e vai para o passo 3
falsa – ignora a sentença e vai para o passo 5
3- Imprime o valor de n na tela e decrementa o valor de n em 1 unidade.
4- Fim do bloco e o programa retorna à parte descrita no passo 2.
5- Continua o programa logo após o bloco. Imprime BOOM e finaliza o programa.

OBS: ao criarmos a estrutura while, devemos levar em conta que ela deve terminar a algum ponto. Para isso, devemos fornecer algum método para forçar a condição a se tornar falsa em algum lugar. Caso contrário, o while se tornará um “loop infinito”.

Estruturas de iteração – Continuação


Do-While

Loop que funciona de maneira praticamente igual ao loop while, com a diferença que, neste, a condição do do-while será avaliada após a execução do bloco, ao invés de antes. Com isto, mesmo que a condição não seja atendida, o programa vai garantir que o código dentro do bloco seja executado ao menos 1 vez. Por exemplo:

#include <iostream>
using namespace std;

int main ()
{
unsigned long n;
do {
cout << “Insira um valor (Insira 0 para sair): “;
cin >> n;
cout << “Você inseriu: ” << n << “\n”;
} while (n != 0);
return 0;
}

que retorna na tela:

Insira um valor (Insira 0 para sair): 132
Você inseriu: 123
Insira um valor (Insira 0 para sair): 321
Você inseriu: 321
Insira um valor (Insira 0 para sair): 0
Você inseriu: 0

No programa anterior, se não inserirmos o valor 0, o programa pedirá um novo número para sempre.

For

A função do loop for é, além de repetir certo trecho de código enquanto a condição permanece verdadeira, como o while, fornecer uma inicialização e incremento de alguma variável específica (um contador) usada no trecho de código no seu escopo*.

Sua sintaxe é

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


Exemplo:

#include <iostream>
using namespace std;
int main ()
{
for (int n=10; n>0; n–) {
cout << n << “, “;
}
cout << “BOOM!\n”;
return 0;
}

que mostra na tela:

10, 9, 8, 7, 6, 5, 4, 3, 2, 1, BOOM!

OBS: ponto-e-vírgulas são obrigatórios, apesar do incremento e inicialização serem opcionais. Com isso, se não forem usados teríamos, por exemplo:


for (;n>10;){}


já as vírgulas podem ser usadas para especificar mais de uma expressão em um dos campos, assim:

for ( n=0, i=100 ; n!=i ; n++, i– ){}

Desvios

Break

Com o break, podemos deixar um loop mesmo que a condição não seja satisfeita. Útil em loops infinitos, ou para forçar um final antes do fim normal do bloco.
Exemplo:

#include <iostream>
using namespace std;

int main ()
{
int x;
for (x=10; x>0; x–)
{
cout << x << “, “;
if (x==3)
{
cout << “Contagem finalizada!”;
break;
}
}
return 0;
}


que retorna:

10, 9, 8, 7, 6, 5, 4, 3, Contagem finalizada!

Continue

Com o continue, o programa pula o resto do loop na iteração atual como se o fi do bloco tivesse sido atingido e pula ao começo da iteração seguinte.
Exemplo:

#include <iostream>
using namespace std;

int main ()
{
for (int x=10; x>0; x–) {
if (x==5) continue;
cout << x << “, “;
}
cout << “final!\n”;
return 0;
}


que mostra na tela:

10, 9, 8, 7, 6, 4, 3, 2, 1, final!

Goto

O goto permite desviarmos para um ponto qualquer no programa. Por este motivo, deve ser usado com cautela, já que sua execução causa um desvio incondicional que ignora qualquer tipo de limite de escopo. O destino é definido com um label, que é usado como um argumento para o goto. Este label é feito de um identificador válido seguido de dois-pontos ( : ).
Exemplo:

#include <iostream>
using namespace std;

int main ()
{
int x=10;
loop:
cout << x << “, “;
x–;
if (x>0) goto loop;
cout << “final!\n”;
return 0;
}


que mostra na tela:

10, 9, 8, 7, 6, 5, 4, 3, 2, 1, final!

Exit

O exit é uma função definida na biblioteca cstdlib cuja função é terminar o programa atual com um código específico. Seu protótipo é:

void exit (int exitcode);

O exitcode é usado por alguns sistemas operacionais e pode ser usado por programas que o chamem. por convenção, um exitcode 0 significa que o programa terminou normalmente. Outros valores indicam que algum erro ou resultados inesperados aconteceram.

Switch

O switch é uma estrutura que checa várias possibilidades de valores constantes para uma expressão.
Acompanhe o formato padrão do switch junto à sua explicação, a seguir:

switch (expressão)
{
case constante_1:
{bloco_de_código_1;}
break;
case constante_2:
{bloco_de_código_2;}
break;
.
.
.
default:
{bloco_de_código_padrao;}
}

Primeiramente ele avalia a expressão e verifica se o resultado dela é equivalente à constante_1. Se for, executa o bloco_de_código_1 até que encontre um break. Ao encontrá-lo, o programa desvia ao fim do switch.

Se o valor da expressão não for igual à constante_1, o switch checa a constante_2, seguindo o mesmo procedimento anterior. Note que os três-pontos mostram que podem ser usadas quantas constantes e blocos de códigos sejam necessáris. Se por ventura nenhuma dessas constantes for igual ao valor da expressão, o switch executará o bloco_de_código_padrao, do default. Por este motivo, um switch exige sempre que haja um label default.

OBS:
1) é importante ressaltar que se o break entre os labels e blocos de código não forem usados, o switch poderá entrar na primeira clausula, por exemplo, e continuar executando as outras sem interrução do loop. Esta é a importância do break dentro do switch. Apesar disso, como o default deve ser o último label a ser inserido, ele não exige o desvio break.

2) O switch só pode ser usado para comparar expressões com constantes. Assim, não podemos colocar variáveis como labels.

Ambos os seguintes trechos de código têm o mesmo funcionamento:

switch (x) {
case 1:
cout << “x é 1”;
break;
case 2:
cout << “x é 2”;
break;
default:
cout << “Valor desconhecido de x”;
}

Funciona da mesma maneira que:

if (x == 1) {
cout << “x é 1”;
}
else if (x == 2) {
cout << “x é 2”;
}
else {
cout << “Valor desconhecido de x”;
}

Veja um outro exemplo de switch:

switch (x*2)
{
case 2:
{
cout << “O valor da expressão é 2.”;
}
break;
case 4:
{
cout << “O valor da expressão é 4.”;
}
break;
case 6:
{
cout << “O valor da expressão é 6.”;
}
break;
default:
{
cout << “O valor da expressão é desconhecido”;
}
}

que, no caso em que x é 3 resulta:

O valor da expressão é 6.

Anúncios
%d blogueiros gostam disto: