C#
Estruturas de Repetição
Estruturas de Controle
ESTRUTURA SEQUENCIAL
ESTRUTURAS CONDICIONAIS
Estrutura Condicional Simples
Estrutura Condicional Composta
Seleção entre duas ou mais Seqüências de Comandos
ESTRUTURA DE REPETIÇÃO
Repetição com Teste no Início
Repetição com Teste no Final
Repetição Contada
2
O Comando While
while (condição) { comandos;
}
1º avalia condição
se condição é verdadeira, executa comandos do bloco
ao término do bloco, volta a avaliar condição
repete o processo até que condição seja falsa
3 while
f v while
f v
O Comando While
O comando while que tem a seguinte forma geral:
while (condição) {
seqüência_de_comandos;
}
Embora o que se apresenta a seguir não exista, seria
“algo” equivalente a idéia:
if (condição) {
seqüência_de_comandos;
"Volte para o comando if"
}
Exemplo de utilização
Desenvolver algoritmo para o problema:
Ler a variável SEXO.
Enquanto o valor fornecido não for correto (M,m,F,f) exibir mensagem de erro e solicitar novamente a leitura.
Quando o valor fornecido estiver correto, ler a variável ANO.
Escrever ANO e SEXO
Algoritmo
programa TESTE1 declare as variáveis inicio
ler (SEXO)
enquanto SEXO (f, F, m, M) faça início
escrever “ERRO”
ler (SEXO) fim
ler ANO
escrever (ANO,SEXO)
fim
Exemplo
using System;
class Program {
static void Main(string[] args) { char sexo;
int ano;
Console.Write("Informe o sexo (m ou f): ");
sexo = Convert.ToChar( Console.ReadLine() );
while ( (sexo!='f') && (sexo!='F') && (sexo!='m') && (sexo!='M') ) { Console.Write("\nValor inválido, informe novamente: ");
sexo = Convert.ToChar(Console.ReadLine());
}
Console.Write("\nInforme o ano: ");
ano = Convert.ToInt32( Console.ReadLine() );
Console.WriteLine("\nAno:{0} sexo:{1}", ano, sexo);
Console.ReadLine();
} }
O Comando For
for (pré_cmd; teste; pós_cmd) { comandos;
}
em termos de while, equivale a:
pré_cmd;
while (teste) { comandos;
pós_cmd;
}
for
f v
pré_cmd teste
pós_cmd bloco for
f v
pré_cmd teste
pós_cmd bloco
O Comando For
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.
for (inicialização; condição; incremento) { seqüência_de_comandos;
}
9
O Comando For
for (pré_cmd; teste; pós_cmd) { comandos;
}
1º executa pré_cmd (inicialização), que permite iniciar variáveis
2º avalia teste (condição): se verdadeiro, executa comandos do bloco, senão encerra laço
ao término do bloco, executa pós_cmd (incremento)
reavalia teste
repete o processo até que teste seja falso
10
O Comando For
• Exemplo: Escrever a tabuada do 2 na tela
using System;
class Program {
static void Main(string[] args) { int i;
Console.WriteLine("‐:: Tabuada do 2 ::‐\n\n");
for(i = 0; i <= 10; i++)
Console.WriteLine("2 x {0} = {1}", i, 2*i);
Console.ReadLine();
} }
11
O Comando For
Podemos omitir qualquer um dos elementos (inicialização, condição ou incremento) do for.
Por exemplo:
for (inicialização; ;incremento) { seqüência de comandos;
}
Este é um 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. (aquele mesmo empregado no comando switch).
Exemplo: Lendo caractere a caractere ...
using System;
class Program {
static void Main(string[] args) { ConsoleKeyInfo tecla;
int total = 0;
int conta_minusculas = 0;
int conta_maiusculas = 0;
int conta_digitos = 0;
Boolean terminou = false;
Console.Write("Digite uma palavra ou frase, terminando‐a com o carater $\n‐> ");
while (!terminou) {
tecla = Console.ReadKey(true);
if (('a' <= tecla.KeyChar) && (tecla.KeyChar <= 'z')) conta_minusculas++;
13
Exemplo: Lendo caractere a caractere ...
if (('A' <= tecla.KeyChar) && (tecla.KeyChar <= 'Z')) conta_maiusculas++;
if (('0' <= tecla.KeyChar) && (tecla.KeyChar <= '9')) conta_digitos++;
if (tecla.KeyChar == '$') terminou = true;
Console.Write("{0}", tecla.KeyChar);
total++;
}
Console.WriteLine("\nTotal de caracteres:
{0}\n\tMinusculas:{1}\n\tMaiusculas:{2}\n\tDígitos:{3}", total, conta_minusculas, conta_maiusculas, conta_digitos);
Console.Write("\n\nPressione enter para encerrar ...");
Console.ReadLine();
} }
14
Exemplo: Lendo caractere a caractere ...
Podemos reescrever a repetição usando for e break.
for (total = 0; ; total++) { tecla = Console.ReadKey(true);
if (('a' <= tecla.KeyChar) && (tecla.KeyChar <= 'z')) conta_minusculas++;
if (('A' <= tecla.KeyChar) && (tecla.KeyChar <= 'Z')) conta_maiusculas++;
if (('0' <= tecla.KeyChar) && (tecla.KeyChar <= '9')) conta_digitos++;
if (tecla.KeyChar == '$') break;
Console.Write("{0}", tecla.KeyChar);
}
O Comando Do-While
do...while é utilizado sempre que o bloco de
comandos deve ser executado ao menos uma vez
do {
comandos;
} while (condição);
1º executa comandos
2º avalia condição:
se verdadeiro, executa novamente os comandos do bloco;
senão encerra laço
do
v f
teste bloco do
v f
teste bloco
O Comando Do-While
using System;
class Program {
static void Main(string[] args) {
int opcao;
do {
Console.WriteLine("Peça pelo número:");
Console.WriteLine("[1] BigMac");
Console.WriteLine("[2] McChicken");
Console.WriteLine("[3] BigTaste");
Console.Write("Opção: ");
opcao = Convert.ToInt32( Console.ReadLine() );
} while ((opcao < 1) || (opcao > 3));
17
O Comando Do-While
switch (opcao) { case 1:
Console.WriteLine("\n\nVc escolheu o BigMac.");
break;
case 2:
Console.WriteLine("\n\nVc escolheu o McChicken");
break;
case 3:
Console.WriteLine("\n\nVc escolheu o BigTaste");
break;
}
Console.Write("\n\nPressione enter para encerrar ...");
Console.ReadLine();
} }
18