Você está na página 1de 12

LTP-I

16/03/15 - 17/04/15

3. CONTROLO DE FLUXO
A execuo de um programa feita scannando instrues carcter a carcter de
esquerda para direita e de cima para baixa. Porm em muitas situaes depara-se com
situaes em que para se atingir os objectivos do problema em causa o programa deve
desobedecer este princpio.
Para que realmente se contorne princpio podemos obrigar que as instrues do programa
seja executados de forma condicional ou seja repetidas varias vezes, estes mecanismos so
conseguidos com recurso s instrues selectivas ou ciclos.

3.1. INSTRUES SELECTIVAS


O Java contm trs tipos de instrues de seleco, que so as seguintes:
Instruo de uma nica seleco (if) Realiza uma aco, ou mais, se uma
condio for verdadeira ou salta a aco se a condio for falsa;
Instruo de seleco dupla (if else ) Realiza uma aco se uma condio for
verdadeira e realiza uma aco diferente se a condio for falsa, mas nunca as duas
durante a mesma execuo;
Instruo de seleco mltipla (switch case ) Realiza uma de muitas aces
diferentes, dependendo do valor de uma expresso.
3.1.1. Instruo if ou seleco simples
A seleco simples permite decidir entre executar ou no um conjunto de instrues. A
deciso tomada em funo do resultado de uma condio, ou seja, uma expresso com
resultado lgico, que calculada no inicio da execuo da estrutura. As estrues so
executadas se o resultado da condio for verdadeiro e no executadas se for falsa.

1
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

A sua sintaxe no Java a seguinte:


if (<condicaoBooleana>) {
<codigo>;
}
NB: O uso dos parnteses obrigatrio se o cdigo consiste em mais de uma instruo;
Ex:
public class Par{
public static void main(String arsgs[]){
int b;
String y;
y=JOptionPane.showInputDialog("nter valor de y");
b=Integer.parseInt(y);
if(b%2==0){
System.out.println(b+ nmero Par);
}
}
}
.1.2. INSTRUO: if else ou seleco em alternativa
Muitas vezes interessa escolher de entre dois conjuntos de instrues qual deles deve ser
executado, esta escolha tambm ser feita em funo do resultado de uma condio.

A sua sintaxe no Java a seguinte:


if (<condicaoBooleana>) { //o uso do parnteses obrigatrio
cdigo A e/ou cdigo B consiste mais de una
<cdigo A>;
} else {
<cdigo B>;
}
Ex:
2
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

public class ParImpar{


public static void main(String arsgs[]){
int b;
String y;
y=JOptionPane.showInputDialog("nter valor de y");
b=Integer.parseInt(y);
if(b%2==0){
System.out.println(b+ nmero Par);
}else{
System.out.println(b+ nmero Impar);
}
}
}

3.1.3. INSTRUO: switch case ou seleco mltipla.


A instrues if-else permite seleccionar uma de varias hipteses como se viu nos
pargrafos anteriores, no entanto, se a escolha for feita em funo do valor de uma
expresso inteira ou carcter mais eficaz uma estrutura de seleco mltipla para o
mesmo efeito. A dinmica desta estrutura pode ser representada do fluxgrama.

A estrutura switch verifica uma varivel e age de acordo com seus casem. Os cases so as
possibilidades de resultados que so obtidos por switch. Basicamente, o switch serve para
controlar vrias aces diferentes de acordo com o case definido dentro dele.
Sintaxe:
switch (<valor inteiro>|< expresso>)
{
case <opo 1>: <cdigo 1>[break];
case <opo 2>:< cdigo 2>[break];
...
3
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

case <opo n>: <cdigo n>[break];


default: cdigo default; //cdigo a ser executado caso nenhuma das
opes seja atendida
}
Ento, detalhadamente, switch recebe uma varivel e abre um bloco de
dados ( { } ), dentro desse bloco de dados h os cases. Cada case
recebe um valor nico, ou seja, que no pode ser repetido no mesmo
bloco de dados. Ento, marcamos cada case com dois pontos ( : ). Aps
os dois pontos colocamos todo cdigo que dever ser executado que
pode conter quantas linhas de instrues que responde as
necessidades.
um bom costume sempre terminar um cdigo aps o case com um
comando break, assim, evitamos que o resto do cdigo seja executado
por acidente. case no gera resultados booleanos, portanto, no h a
possibilidade de fazer comparaes (Ex. Isso est totalmente errado
case var1 > var2:).
Default
Como switch pode receber vrias possibilidades, pode ocorrer situaes
de algum caso estar fora do alcance ou no estar definido, o default
tem o papel de cobrir as situaes. Default pega qualquer resultado que
no esteja definido no case, ou seja, ele o bloco de cdigo padro que
deve ser executado quando nenhum case for satisfeito. Podemos
coloca-lo onde quisermos dentro de switch , mas, geralmente, o
colocamos no final.
NB: A varivel fornecida instruo switch deve ser do tipo
byte, short, char, ou int. Ela no pode ser long, float, double,
boolean ou referncia a objectos.
Exemplo:
Import javax.swing.*;
public class ExemploSwitch {
public static void main(String args[]) {
int diaDaSemana = 1;
String y=JOptionPane.showInputDialog("nter valor de y");
diaDaSemana =Integer.parseInt(y);
switch (diaDaSemana) {
case 1:
System.out.println("Domingo");
break;
case 2:
System.out.println("Segunda-feira");
4
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

break;
case 3:
System.out.println("Tera-feira");
break;
case 4:
System.out.println("Quarta-feira");
break;
case 5:
System.out.println("Quinta-feira");
break;
case 6:
System.out.println("Sexta-feira");
break;
case 7:
System.out.println("Sbado");
break;
default:
System.out.println("Este no um dia vlido!");
}
}
}

import javax.swing.JOptionPane;
public class SwitchDemo2 {
public static void main(String[] args) {
int month = 2;
int year = 2000;
int numDays = 0;
String x=JOptionPane.showInputDialog("Enter valor de ano ");
String y=JOptionPane.showInputDialog("nter valor de mes");
year=Integer.parseInt(x);
month=Integer.parseInt(y);
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
5
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

case 9:
case 11:
numDays = 30;
break;
case 2:
if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year %
400 == 0) )
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Invalid month.");
break;
}
System.out.println(" O ms de " +month+" do ano "+year+"
tem "+ numDays+ " dias");
}
}

Como escolher a instruo de seleco adequada?


Foi referida em 3.1.3., que em seleco com instruo switch-case verificado se o
resultado da expresso igual a um dos valores indicadas na prpria instruo, e que a
expresso deve ter um resultado inteiro ou carcter. Pelo contrrio a instruo if/if-else
pode ser utilizada com valores de outros tipos, permitindo ainda a utilizao de outras
formas de comparao, tal como maior, menor e utilizao de operadores lgicos.

Objectivos:

O aluno deve ser capaz de resolver diferentes problemas com recurso as instrues
selectivas;

LISTA DE EXERCICIOS A SEREM DISCUTIDOS E RESOLVIDOS


ESTO NUMA FICHA AUXELIAR

6
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

3.2. CICLOS
O conceito ciclo ou repetio fundamental em programao, pois para a resoluo de
muitas tarefas comuns implica a utilizao de estruturas repetitivas, ora vejamos, se
pretendssemos registo de acadmico minimamente seria necessrio ler dados de
estudante, que podem consistir em nome, nmero de estudante, afiliao, endereo. Para o
efeito necessrio o nmero de instrues de leitura de dados correspondente ao nmero
de campos de estudante. Supondo que o numero de campo de estudante seja 5 e instituio
tivesse 50 estudantes seriam necessrios 250 instrues de leitura de dados. A maneira
mais eficaz de resolver esta situao passa por utilizar uma estrutura que se encarrega de
repetir as instrues que permitem a entrada de dados de um estudante, tantas vezes
quantas os estudantes envolvidos. Estas estruturas so designadas estruturas repetitivas ou
ciclos;
Neste capitulo abordaremos trs instrues repetitivas, que so while, do-while e for.

3.2.1. Ciclo while


Uma das formas mais comuns de repetio aquela que permite repetir um conjunto de
uma ou mais instrues enquanto uma condio mantiver o valor lgico verdadeiro. Este
comportamento pode ser representado da seguinte maneira.

No ciclo while o primeiro passo o clculo da condio, se o resultado for verdadeiro, as


instrues so executadas, depois um novo clculo da condio feita, se o resultado for
verdadeiro, instrues so executadas, este processo iterativo continuar enquanto o

7
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

resultado da condio calculada for verdadeiro. Quando o resultado da condio for falso o
ciclo terminar, prosseguindo a execuo normal do programa.
Sintaxe do while:
while(<condio>){
<Instrues>
}
O problema com estruturas de repetio, principalmente com while, o que chamamos de
looping infinito. Damos esse nome ao fato de que o programa fica repetindo a mesma
sequncia de cdigos esperando por um resultado que nunca ir acontecer.
Portanto, imprescindvel que uma determinada varivel seja modificada de acordo com
cada loop, por forma a garantir o termino do ciclo. Veja o exemplo
public class ExemploWhile {
public static void main(String args[]) {
int contador = 0;
while (contador < 50) {
System.out.println("Repetio nr: " + contador);
contador++;
}
}
}
Como podemos ver, existe a varivel contador que iniciada com valor 0, a cada loop
executado (repetio) somado 1 (uma unidade) ao contador. Perceba que o while ir
manter a repetio enquanto a varivel contador for menor que 50.
Outro ponto importante que a varivel contador inicializada antes de chegar ao while,
porque o while ir comparar a sentena e s depois permitir a execuo do bloco.
Se quisermos fazer todo o bloco primeiro e s depois fazer a comparao, devemos utilizar
o comando DO WHILE

8
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

3.2.2. Ciclo do-while


Uma segunda forma de repetio permite repetir um conjunto de instrues enquanto uma
condio mantiver o valor verdadeiro. Trata-se de uma forma de repetio semelhante
while mas que se difere na forma de repetio, enquanto no while o valor da condio
calculado e verificado s depois que so executadas as instrues se a condio for
verdadeira, no do-while as instrues so executadas e s depois que a condio
calculada. Assim em do-while as instrues so executadas pelo menos uma vez, pois o
teste da condio s feito depois da primeira execuo das instrues.

Como se pode ver na figura acima uma instruo executada, em seguida a condio
verificada, se a condio for verdadeira de novo instrues so executadas, depois
condio calculada, este processo iterativo continua at que a condio seja falsa.
Sintaxe do ciclo do-while:
do {
<Instrues>
} while(<condio>)
Neste caso, devemos ter as mesmas precaues quanto while, no que diz respeito a looping
infinito. Mas no necessrio inicializar a varivel antes do bloco de cdigo como
acontece com while, pois a comparao s ser feita aps todo o cdigo ter sido executado.
Exemplo: Fazer um programa que recebe o nome do funcionario e calcule o aumento
salarial. Deve garantir que o valario do salario no seja menor ou igual a zero.
import javax.swing.JOptionPane;
public class AumentoSalarial{
public static void main(String[] args) {
9
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

String funcionario=JOptionPane.showInputDialog("Nome do
Funcionario");
double salInicial,salActual;
do{
String sal=JOptionPane.showInputDialog("Valor do Salario");
salInicial=Double.parseDouble(sal);
}while(salInicial<=0);
salActual=salInicial*1.25;
System.out.println("O salario do(a) funcionario(a)"+funcionario+"
era de "+salInicial+" passa a ser "+salActual);
}
}

3.2.3. Ciclo for


Uma terceira forma de repetio normalmente utilizada quando o nmero de vezes que o
ciclo deve ser repetido conhecido antes do inicio da sua execuo.
O funcionamento desta instruo controlado pela inicializao, pela condio e pela
aco, e que as trs componentes so separadas pelo ponto e vrgula.

inicializa
o
aco

condi
o
V

instrues

A sintaxe do ciclo for:


For(<inicializao> ;< condio>; <aco>){
<Instrues >
}

10
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

Inicializao executada apenas una vez logo no inicio do ciclo. Serve


normalmente para inicializar a varivel que vai controlar o nmero de vezes que as
instrues vo ser repetidas;

Condio calculada antes de cada das instrues. Se o seu resultado for


verdadeiro, as instrues so executadas, se for falso, o ciclo termina;

Aco executada automaticamente em cada iterao aps as instrues do


ciclo. Normalmente serve para calcular o novo valor da varivel de controlo, que
usualmente um incremento ou decremento da varivel do controlo.

Exemplo: Para exerccio anterior pretende introduzir e calcular o salrio actual de


funcionrios para nmero de funcionrios conhecido pelo usurio.
import javax.swing.JOptionPane;
public class ExemploFor {
public static void main(String []args) {
String nF=JOptionPane.showInputDialog("Introduz Nmero de
Funcionarios");
int nrFunc=Integer.parseInt(nF);
for (int i = 0; i<nrFunc; i++){
String nome=JOptionPane.showInputDialog("Nome do
Funcionario");
String idaFun=JOptionPane.showInputDialog("Idade do
Funcionario");
int idade=Integer.parseInt(idaFun);
System.out.println("Funcionario["+i+"]="+nome+"\t
Idade="+idade);
};
}
}

Objectivos:

Munir o aluno em conhecimento das instrues repetitivas, para programar as


actividades que ocorre vrias vezes durante a resoluo de um problema

11
dr. Amrico I. Langa

LTP-I

16/03/15 - 17/04/15

LISTA DE EXERCICIOS A SEREM DISCUTIDOS E RESOLVIDOS


ESTO NUMA FICHA AUXELIAR

12
dr. Amrico I. Langa

Você também pode gostar