LPI
ESTRUTURA de CONTROLE
CONDICIONAL / de SELEÇÃO / de DECISÃO
(CONTINUAÇÃO)
IFs ANINHADOS E ELSE IF
É comum precisarmos selecionar um entre vários blocos de comandos a serem
executados e não apenas um entre dois (if/else) blocos de comandos.
Quando há vários blocos possíveis e não apenas dois, devemos utilizar um conjunto
de ifs subordinados uns aos outros.
Dizemos que neste caso os comandos ifs devem estar aninhados. Código usando ifs aninhados com else if. Exemplo 1:
string estado, capital;
Console.WriteLine("Digite a sigla de um estado"); estado = Console.ReadLine();
if (estado.ToUpper() == "RJ") {
capital = "Rio de Janeiro"; }
else if (estado.ToUpper() == "SP") {
capital = "São Paulo"; }
else if (estado.ToUpper() == "MG") {
capital = "Belo Horizonte"; }
else if (estado.ToUpper() == "BA") {
capital = "Salvador"; }
else
{
capital = "Não sei"; }
Console.WriteLine("Estado: " + estado.ToUpper() + " Capital: " + capital); Console.ReadKey();
.ToUpper()
converte os caracteres
para maiúsculos.
Obs.: .ToLower() converte os caracteres para minúsculos.
Qual a diferença para o comando switch ?
Código usando ifs aninhados com else if. Exemplo 2:
O exemplo a seguir determina se um caractere de entrada é um número, uma
letra maiúscula ou uma letra minúscula. Se todas as três condições forem falsas,
o caractere não é um caractere alfanumérico. O exemplo exibe uma mensagem para cada caso.
char ch; // char É UM SÓ CARACTERE, NESTE CASO USAR Read E NÃO ReadLine. Console.Write("Entre um caractere: ");
ch = Convert.ToChar(Console.Read()); // NOTE O Read NO LUGAR DO ReadLine
if (Char.IsUpper(ch)) // Char.IsUpper(ch) RETORNA True SE A VARIÁVEL ch { // GUARDA UMA LETRA MAIÚSCULA. Poderíamos escrever:
// if (Char.IsUpper(ch) == True) mas não é necessário. Console.WriteLine("O caractere é uma letra maiúscula.");
}
else if (Char.IsLower(ch)) //Char.IsLower(ch) RETORNA True SE A VARIÁVEL ch
{ // GUARDA UMA LETRA MINÚSCULA.
Console.WriteLine("O caractere é uma letra minúscula."); }
else if (Char.IsDigit(ch)) //Char.IsDigit(ch) RETORNA True SE A VARIÁVEL ch
{ // GUARDA UM DÍGITO (NÚMERO).
Console.WriteLine("O caractere é um número."); }
else
{
Console.WriteLine("O caractere não é alfanumérico."); }
Console.ReadKey();
//Exemplos de Entrada e Saída correspondente: //Entrada (valor informado para ch): E
//Saída: O caractere é uma letra maiúscula. //Entrada (valor informado para ch): e
//Saída: O caractere é uma letra minúscula. //Entrada (valor informado para ch): 4
//O caractere é um número.
//Entrada (valor informado para ch): # //O caractere não é alfanumérico.
Código usando ifs aninhados sem usar else if. Exemplos:
a) No exemplo a seguir, o texto “Result1” é exibido se m>10 e n>20 forem avaliadas como true (verdadeiro), quando m>10 for true e n>20 for false (falso), “Result2” é o texto que será exibido.
int m = 12; int n = 18; if (m > 10) { // a chave { é opcional if (n > 20) { Console.WriteLine("Result1"); } else { Console.WriteLine("Result2"); } } // a chave } é opcional Console.ReadKey(); Exercício 1:
Qual o resultado do código acima? __________________________ Qual o resultado quando m = 8? _____________________________
b) Se, em vez disso, desejamos que “Result2” seja a mensagem exibida
quando m>10 for false (independentemente do valor de n), podemos especificar
essa associação usando chaves para estabelecer o início e o fim da instrução if aninhada, como mostra o exemplo a seguir.
int m = 12; int n = 18; if (m > 10) { if (n > 20) Console.WriteLine("Result1"); } else { Console.WriteLine("Result2"); } Console.ReadKey(); Exercício 2:
Qual o resultado do código acima? _______________________________ Qual o resultado quando m=8? ___________________________________
As chaves
{ }
,tanto no if quanto no else, são opcionaisquando há apenas um comando a ser executado.
Obs.: Neste exemplo, dentro do 1º if “if (m>10)” há apenas um comando a ser executado: o if (n>20). Assim, não é necessário por as chaves envolvendo o código do 2º if.
Lembre-se! O else não existe só, ele pertence ao comando if.
c) No exemplo a seguir, o usuário insere um caractere do teclado e o programa usa uma construção (um código) com comandos if para determinar se o caractere de entrada é um caractere alfabético. Se o caractere de entrada é um caractere alfabético, o programa verifica se o caractere de entrada é
maiúsculo ou minúsculo. Será exibida uma mensagem para cada caso.
char c; // char É UM SÓ CARACTERE, NESTE CASO USAR Read E NÃO ReadLine. Console.Write("Entre um caractere: ");
c = (char)Console.Read(); // NOTE O Read (1 caractere) NO LUGAR DO ReadLine. // O (char) significa forçar a conversão de
// string para char (poderia usar Convert.ToChar). if (Char.IsLetter(c)) // Char.IsLetter(C) RETORNA True SE A VARIÁVEL
{ // C GUARDA UMA LETRA (CARACTERE ALBETICO).
if (Char.IsLower(c)) // Char.IsLower(C) RETORNA True SE A VARIÁVEL C { // GUARDA UMA LETRA MINÚSCULA (existe .IsUpper).
Console.WriteLine("O caractere é minúsculo"); }
else
{
Console.WriteLine("O caractere é maiúsculo."); }
} else
{
Console.WriteLine("O caractere não é alfabético."); }
Console.ReadKey();
Exercício 3:
Qual o resultado do código acima para c=b ? _________________________ Qual o resultado quando c=8 ? ______________________
Qual o resultado quando c=A ? ______________________
c = (char)Console.Read();
É semelhante ao comando de conversão que temos usado:
Exercício 4:
Execute mentalmente o código abaixo.
bool condição1 = true;
bool condição2 = true;
bool condição3 = true;
bool condição4 = true;
if (condição1) {
Console.WriteLine("Condição1 é verdadeira"); }
else if (condição2) {
Console.WriteLine("Condição1 é falsa e condição2 é verdadeira"); }
else if (condição3) {
if (condição4) {
Console.WriteLine("Condição1 e condição2 são falsas. Condição3 e condição4 são verdadeiras");
} else
{
Console.WriteLine("Condição1, condição2 e condição4 são falsas. Condição3 é verdadeira");
}
} // Esta chave é o fechamento de qual chave de abertura?
else
{
Console.WriteLine("Condição1, condição2 e condição3 são falsas."); }
Console.ReadKey();
Qual a resposta para a pergunta (comentário em verde)? ___________________________ Qual resultado será exibido pelo código acima? _____________________________________ Qual resultado será exibido para os dados de entrada abaixo? _______________________
bool condição1 = false;
bool condição2 = false;
bool condição3 = true;
bool condição4 = false;
As variáveis condição1, ..., condição4 são do tipo BOOL (lógico). Podem apenas assumir os valores True ou False (não são string!)