apostila 2pp

apostila 2pp

(Parte 7 de 15)

Um exemplo da estrutura acima:

#include <stdlib.h> #include <iostream> using namespace std; int main () { int num; cout << "Digite um numero: "; cin >> num; if (num>10) cout << "O numero eh maior que 10" << endl; else if (num==10) { cout << "Voce acertou!" << endl; cout << "O numero e igual a 10." << endl; } else if (num<10) cout << "O numero e menor que 10" << endl; system("pause"); return (0); }

- A expressão condicional

Quando o compilador avalia uma condição, ele quer um valor de retorno para poder tomar a decisão. Mas esta expressão não necessita ser uma expressão no sentido convencional. Uma variável sozinha pode ser uma "expressão" e esta retorna o seu próprio valor. Isto quer dizer que teremos as seguintes expressões:

if (num!=0)
if (num==0)

int num; for (i = 0; string[i] != '\0'; i++)

equivalem a
if (num)
if (!num)

int num; for (i = 0; string[i]; i++)

Isto quer dizer que podemos simplificar algumas expressões simples. - ifs aninhados

O if aninhado é simplesmente um if dentro da declaração de um outro if externo. O único cuidado que devemos ter é o de saber exatamente a qual if um determinado else está ligado.

Vejamos um exemplo:

#include <stdlib.h> #include <iostream> using namespace std; int main () { int num; cout << "Digite um numero: "; cin >> num; if (num==10) { cout << "Voce acertou!" << endl; cout << "O numero e igual a 10." << endl; } else { if (num>10) cout << "O numero eh maior que 10" << endl; else cout << "O numero e menor que 10" << endl; } system("pause"); return (0); }

- O Operador ?

Uma expressão como:

if (a>0) b=-150; else b=150; pode ser simplificada usando-se o operador ? da seguinte maneira: b=a>0?-150:150;

De uma maneira geral expressões do tipo:

if (condição) expressão_1; else expressão_2; podem ser substituídas por:

condição?expressão_1:expressão_2;

O operador ? é limitado (não atende a uma gama muito grande de casos) mas pode ser usado para simplificar expressões complicadas. Uma aplicação interessante é a do contador circular.

Veja o exemplo:

#include <stdlib.h> #include <iostream> using namespace std; int main() { int index = 0, contador; char letras[5] = "Joao"; for (contador=0; contador < 1000; contador++) { cout << letras[index] << "\n"; (index==3) ? index=0: ++index; }

término do programa. Enquanto isto a variável index assume os valores 0, 1, 2, 3, , 0, 1,

O nome Joao é escrito na tela verticalmente até a variável contador determinar o progressivamente.

Veja como você está:

Altere o último exemplo para que ele escreva cada letra 5 vezes seguidas. Para isto, use um 'if' para testar se o contador é divisível por cinco (utilize o operador %) e só então realizar a atualização em index.

O Comando switch

O comando if-else e o comando switch são os dois comandos de tomada de decisão.

Sem dúvida alguma o mais importante dos dois é o if, mas o comando switch tem aplicações valiosas. Mais uma vez vale lembrar que devemos usar o comando certo no local certo. Isto assegura um código limpo e de fácil entendimento. O comando switch é próprio para se testar uma variável em relação a diversos valores pré-estabelecidos. Sua forma geral é:

switch (variável)

{ case constante_1: declaração_1; break; case constante_2: declaração_2; break; . . . case constante_n: declaração_n; break; default declaração_default; }

Podemos fazer uma analogia entre o switch e a estrutura if-else-if apresentada anteriormente. A diferença fundamental é que a estrutura switch não aceita expressões. Aceita apenas constantes. O switch testa a variável e executa a declaração cujo case corresponda ao valor atual da variável. A declaração default é opcional e será executada apenas se a variável, que está sendo testada, não for igual a nenhuma das constantes.

comando switch:

O comando break, faz com que o switch seja interrompido assim que uma das declarações seja executada. Mas ele não é essencial ao comando switch. Se após a execução da declaração não houver um break, o programa continuará executando. Isto pode ser útil em algumas situações, mas eu recomendo cuidado. Veremos agora um exemplo do

#include <stdlib.h> #include <iostream> using namespace std; int main () { int num; cout << "Digite um numero: "; cin >> num; switch (num) { case 9: cout << "\n\nO numero e igual a 9.\n"; break; case 10: cout << "\n\nO numero e igual a 10.\n"; break; case 1: cout << "\n\nO numero e igual a 1.\n"; break; default: cout << "\n\nO numero e igual a 9 nem 10 nem 1.\n"; } return(0); }

Veja como você está.

Escreva um programa que pede para o usuário entrar um número correspondente a um dia da semana e que então apresente na tela o nome do dia. utilizando o comando switch.

O Comando for for é a primeira de uma série de três estruturas para se trabalhar com loops de repetição. As outras são while e do. As três compõem a segunda família de comandos de controle de fluxo. Podemos pensar nesta família como sendo a das estruturas de repetição controlada.

Como já foi dito, o loop for é usado para repetir um comando, ou bloco de comandos, diversas vezes, de maneira que se possa ter um bom controle sobre o loop. Sua forma geral é:

for (inicialização;condição;incremento) declaração;

for é equivalente a se fazer o seguinte:

O melhor modo de se entender o loop for é ver como ele funciona "por dentro". O loop inicialização; if (condição) { declaração; incremento; "Volte para o comando if" }

Abaixo vemos um programa que coloca os primeiros 100 números inteiros na tela:

Podemos ver, então, que o for executa a inicialização incondicionalmente e testa a condição. Se a condição for falsa ele não faz mais nada. Se a condição for verdadeira ele executa a declaração, faz o incremento e volta a testar a condição. Ele fica repetindo estas operações até que a condição seja falsa. Um ponto importante é que podemos omitir qualquer um dos elementos do for, isto é, se não quisermos uma inicialização poderemos omiti-la.

#include <stdlib.h> #include <iostream> using namespace std; int main () { int count; for (count=1; count<=100; count++) cout << count << endl; system("pause"); return(0); }

Note que, no exemplo acima, há uma diferença em relação ao exemplo anterior. O incremento da variável count é feito usando o operador de incremento que nós agora já conhecemos. Esta é a forma usual de se fazer o incremento (ou decremento) em um loop for.

O for na linguagem C é bastante flexível. Temos acesso à inicialização, à condição e ao incremento. Qualquer uma destas partes do for pode ser uma expressão qualquer do C, desde que ela seja válida. Isto nos permite fazer o que quisermos com o comando. As três formas do for abaixo são válidas:

for (count = 1; count < 100 ; count++) {}
for (count = 1; count < NUMERO_DE_ELEMENTOS ; count++) {}
for (count = 1; count < BusqueNumeroDeElementos() ; count+=2) {}
etc

Preste atenção ao último exemplo: o incremento está sendo feito de dois em dois. Além disto, no teste está sendo utilizada uma função (BusqueNumeroDeElementos() ) que retorna um valor que está sendo comparado com count.

- O loop infinito

O loop infinito tem a forma for (inicialização; ;incremento) declaração;

Este loop chama-se loop infinito porque será executado para sempre (não existindo a condição, ela será sempre considerada verdadeira), a não ser que ele seja interrompido. Para interromper um loop como este usamos o comando break. O comando break vai quebrar o loop infinito e o programa continuará sua execução normalmente.

correspondente ao <ENTER>

Como exemplo vamos ver um programa que faz a leitura de uma tecla e sua impressão na tela, até que o usuario aperte uma tecla sinalizadora de final (um FLAG). O nosso FLAG será a letra 'X'. Repare que tivemos que usar dois scanf() dentro do for. Um busca o caractere que foi digitado e o outro busca o outro caracter digitado na seqüência, que é o caractere

#include <stdlib.h> #include <iostream> using namespace std; int main () { int Count; char ch; cout << "Digite uma letra - <X para sair>: "; for (Count=1;;Count++) { cin >> ch; if (ch == 'X') break; cout << ch << endl; } cout << "Numero de caracteres digitados = " << Count << endl; system("pause"); return (0); }

- O loop sem conteúdo

Loop sem conteúdo é aquele no qual se omite a declaração. Sua forma geral é (atenção ao ponto e vírgula!):

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

Uma das aplicações desta estrutura é gerar tempos de espera.

O programa

(Parte 7 de 15)

Comentários