quinta-feira, 6 de março de 2008

Capítulo 5 - Construções avançadas em C

Loopings:

main()
{
char letra = 'A';

do
printf("%c\n", letra++);
while(letra <= 'G');

getchar();
}



Executa:
A
B
C
D
E
F
G

Obs: Observe que após o comando while temos um ponto-e-vírgula.

main()
{
int count;

for(count = 0; count <= 100;count++)
if(count % 3 != 0)
printf("%d\n", count);

getchar();
}

Traduzindo: declarei uma variável chamada count, mas não inicializei.
Para count que recebe o valor 0 e enquanto count for menor ou igual a 100, some 1 no valor de count após essa linha de comando.
Se o resto da divisão de count por 3 for DIFERENTE de zero, imprima count, senão não imprime NADA.
Ou seja, serão impressos todos os valores de 1 a 100 menos aqueles que a divisão por 3 dá resto 0.
Agora um programa que gera o mesmo resultado, através do comando continue.


main()
{
int count;

for(count = 0; count <= 100; count++)
{
if(count % 3 == 0)
continue;
printf("%d\n", count);
}

getchar();
}


O comando continue interrompe a sequencia de comandos dentro das chaves {} da função for(), ou seja, não imprime o valor de count quando a divisão por 3 dá zero.

main()
{
char letra;

for(letra = 'A'; letra <= 'Z'; letra++)
if(letra == 'A')
printf("%c\n", letra);
else if(letra == 'E')
printf("%c\n", letra);
else if(letra == 'I')
printf("%c\n", letra);
else if(letra == 'O')
printf("%c\n", letra);
else if(letra == 'U')
{
printf("%c\n", letra);
break;
}

getchar();
}


Executa: AEIOU
A única coisa que o break faz aqui é impedir que sejam testadas as letras de V a Z.

main()
{
int count;
char letra;

for(count = 1; count <= 5; count++)
{
printf("\n%-2d", count);
/* Exibe count à esquerda da tela e
* com dois espaços para digitos
*/
for(letra = 'A'; letra <= 'Z'; letra++)
printf("%c", letra);
}

getchar();
}


Tradução: cria uma variável count do tipo inteiro e outra variável letra do tipo char. Para count de um até 5: incremente 1 e imprima count (formatado).
Para letra de A a Z, incremente 1 e imprima letra (formatado).
Cada for() imprime o conteúdo de sua variável e incrementa 1 na variável.

Executa:
1 ABCDEFGHIJKLMNOPQRSTUVWXYZ
2 ABCDEFGHIJKLMNOPQRSTUVWXYZ
3 ABCDEFGHIJKLMNOPQRSTUVWXYZ
4 ABCDEFGHIJKLMNOPQRSTUVWXYZ
5 ABCDEFGHIJKLMNOPQRSTUVWXYZ

main()
{
char letra;

for(letra = 'A'; letra <= 'Z'; letra++)
switch(letra)
{
case 'A': printf("%c", letra);
case 'E': printf("%c", letra);
case 'I': printf("%c", letra);
case 'O': printf("%c", letra);
case 'U': printf("%c", letra);
}

getchar();
}


Executa: AAAAAEEEEIIIOOU
Após testar se letra == A, ele efetua o comando na linha e todos abaixo dela. O mesmo ocorre com as outras letras.

main()
{
char letra;

for(letra = 'A'; letra <= 'Z'; letra++)

switch(letra)
{
case 'A': printf("%c", letra);
break;
case 'E': printf("%c", letra);
break;
case 'I': printf("%c", letra);
break;
case 'O': printf("%c", letra);
break;
case 'U': printf("%c", letra);
break;
}

getchar();
}


Executa: AEIOU

main()
{
char letra;
for(letra = 'A'; letra <= 'Z'; letra++)
switch(letra)
{
case 'A':
case 'E':
case 'I':
case 'O':
case 'U': printf("%c", letra);
}

getchar();
}


Executa: AEIOU

Obs: não é possível usar uma variável após o comando case, sempre é usada uma constante.


main()
{
char letra;
int vogais = 0;
int consoantes = 0;

for(letra = 'A'; letra <= 'Z'; letra++)
switch(letra)
{
case 'A':
case 'E':
case 'I':
case 'O':
case 'U': vogais++; break;
default: consoantes++;
}

printf("Vogais: %d\t Consoantes:\
%d", vogais, consoantes);
getchar();
}


O mesmo caso do exemplo anterior, só que em vez de exibir o valor da variável incrementa vogais em 1. Se não for vogal, a opção será default, onde incrementa consoantes em 1.

Comando goto:

main()
{
char letra = 'A';

loop:
printf("%c\n", letra++);

if(letra <= 'Z')
goto loop;

getchar();
}




Goto significa "Ir para". É totalmente intuitivo.

Operador condicional:


main()
{
int max, min, a = 10, b = 5;

max = (a > b) ? a : b;
min = (a < max =" %d\t" min =" %d">

getchar();
}




Tradução: declaro variáveis max e min, e constantes a e b, todos do tipo int, a = 10 e b = 5. Se a variável "a" for maior que "b", então max = a, senão max = b. Se a variável "a" for menor que "b", então min = a, senão min = b. Exiba max e min. Essa operação poderia ser feita com funções while, do while, for, etc. Essa é uma forma de simplificar o código, mas dependendo do caso pode complicar. Exemplo: outra pessoa ter que fazer manutenção no seu código fonte.
Essa operação poderia ter sido feita dentro de printf().

Strings longas:

main()
{
printf("Primeiro valor: %d Segundo valor: %d Soma: %d", \
5, 10, 5+10);
getchar();
}



Obs: Observe a barra invertida para "quebrar" o comando em outra linha.

Nenhum comentário: