Algoritmos – Estruturas Condicionais – Parte 1

Parte deste material foi adaptado dos conteúdos originais dos Professores Fábio Tirelo, Silvio Jamil e Theldo Cruz.

Material de Profa. Dulcinéia da Penha


Imagem DevMedia

1. Estruturas de Decisão

à Permite que os programas realizem um teste e depois executem comandos com base no resultado do teste

à Condicional simples

se <condição > então

|     <bloco de comandos 1>

fim se

Se a condição for verdadeira, o bloco de comandos é executado. Se for falsa, nenhum comando do bloco será executado.

O próximo comando a ser executado será aquele após o “fim se”.

à o comando if

if  (condição_for_verdadeira){

<comandos>;

}

Se tiver apenas um comando, não precisa das chaves para determinar o bloco de comandos.

Exemplo: Algoritmo para avaliar alunos


public class Exemplo01{

public static void main (String args[]){ int nota_final;

nota_final = 95;

if (nota_ final >= 60)

System.out.println (“O aluno foi aprovado.”);

if (nota_ final < 60)

System.out.println (“O aluno foi reprovado.”);

}//fim main

}//fim classe


Alternativas para condições falsas em estruturas condicionais (if).

se <condição > então

|     <bloco de comandos 1> senão

|     <bloco de comandos 2> fim se

Primeiro avalia-se a condição. Se for verdadeira, apenas o primeira bloco de comandos será executado; se for falsa, somente o segundo bloco de comandos será executado.

O próximo comando a ser executado será aquele após o “fim se”.

à o comando else

Executa o else se a condição_for_verdadeira for falsa

if (condição_for_verdadeira)

| comando1; else

| comando2;


ou

if (condição_for_verdadeira){

| lista_de_comandos1;

}

else{

| lista_de_comandos2;

}


a)   Algoritmo para determinar se um número lido é menor que zero, está entre 10 e 100 ou é maior que 100.

public class Exemplo02{

public static void main (String args[]){

int num;

num = Integer.parseInt(JOptionPane.showInputDialog(“Digite um numero: “));

if (número < 0) 

System.out.println ( “número menor que zero”);

else

System.out.println ( “número menor que zero”);

if (número < 10)

System.out.println ( “número > 0 e < 10”);

else

if (número < 100)

System.out.println ( “número > 10 e < 100”);

else

System.out.println (“número >= 100”);

}

}


b)   Algoritmo para ler dois valores e determinar o maior

public class Exemplo03{

public static void main (String args[]){

int A, B;

A = Integer.parseInt(JOptionPane.showInputDialog(“Digite o primeiro numero: “)); B = Integer.parseInt(JOptionPane.showInputDialog(“Digite o segundo numero: “));

if (A > B)

System.out.println (“A é o maior”);

else

System.out.println (“B é o maior”);

}//fim main

}//fim classe


 

Quando o programa Exemplo03 for executado, o usuário informará dois números e o sistema informa qual dos dois é maior. O que acontecerá durante a execução deste programa quando o usuário digitar A = 2 e B = 2?

Neste caso, o programa imprimirá a mensagem “B é maior do que A”. Essa mensagem não é correta, uma vez que os dois números são iguais. O que é necessário alterar neste programa para que a mensagem correta seja impressa?

 

Observe o programa Exemplo04.

 

c)   Algoritmo para ler dois valores e escrever se o primeiro é maior do que o segundo, se o segundo é maior do que o primeiro, ou se os dois números são iguais.

public class Exemplo04{

public static void main (String args[]){

int A, B;

A = Integer.parseInt(JOptionPane.showInputDialog(“Digite o primeiro numero: “)); B = Integer.parseInt(JOptionPane.showInputDialog(“Digite o segundo numero: “));

if (A > B)

System.out.println(“O primeiro número é maior que o segundo”);

if (A < B)

System.out.println (“O segundo número é maior que o primeiro”);

else

System.out.println (“Os números são iguais”);

}//fim main

}//fim classe

 

Este programa está correto? Qual será a saída do programa quando o usuário informar A = 2 e B = 5? O programa testará o primeiro if, a condição é falsa, então ele não escreve a mensagem na tela. Então o programa testará o segundo if, como A é menor do que B, a condição é verdadeira e o programa exibirá a mensagem “O segundo número é maior do que o primeiro”. Observe que para este caso, o resultado do programa está correto.


Por outro lado, qual será a saída do programa quando o usuário informar A = 2 e B = 2? No primeiro if, a condição é falsa, então o programa não exibe a mensagem. No segundo if, a condição também é falsa, e, como este if tem um else correspondente (é executado quando a condição do if não for satisfeita), a mensagem do else é exibida, ou seja, o programa imprime na tela: “Os números são iguais”. Para este caso, o resultado do programa também está correto.


No entanto, qual será a saída do programa quando o usuário informar A = 5 e B = 2? A condição do primeiro if é satisfeita (verdadeira), então o programa imprime na tela: “O primeiro número é maior do que o segundo”. Então o programa segue o seu fluxo e testa se “A < B” no segundo if. O que acontecerá neste ponto do programa? A condição do if não é satisfeita, uma vez que A não é menor que B. No entanto este if possui um else correspondente. O else é executado sempre que a condição do if não for satisfeita, o que é o caso deste exemplo. Deste modo, o programa exibirá em seguida: “Os números são iguais”.


Observe que a saída deste programa está incorreta para todos os casos em que o primeiro número é maior do que o segundo, uma vez que será impresso na tela:


“O primeiro número é maior do que o segundo” “Os números são iguais”


Observe agora o programa Exemplo05. Qual será a saída exibida por este programa para os casos em que A > B, B > A e A = B?

 

d)   Algoritmo para ler dois valores e escrever se o primeiro é maior do que o segundo, se o segundo é maior do que o primeiro, ou se os dois números são iguais.

public class Exemplo05{

public static void main (String args[]){

int A, B;

A = Integer.parseInt(JOptionPane.showInputDialog(“Digite o primeiro numero: “)); B = Integer.parseInt(JOptionPane.showInputDialog(“Digite o segundo numero: “));

if (A > B)

System.out.println(“O primeiro número é maior do que o segundo”);

else

if (A < B)

System.out.println(“O segundo número é maior do que o primeiro”);

else

System.out.println(“Os números são iguais”);

}//fim main

}//fim classe

 

à if aninhados

if  (condição 1)

instrução;

else

if (condição 2)

instrução;

else

if (condicao 3) ...

à Como o computador decide de qual if o else pertence?

if (n > 0)
if (a > b)
z = a;
else
z = b;

Quando z = b será executado? else é sempre associado ao if mais interno (mais próximo)

Note a diferença:


if (n > 0)
{
if (a > b)
z = a;
}
else
z = b;

Comentários