controlo de fluxo em java

11
LTP-I 16/03/15 - 17/04/15 1 dr. Américo I. Langa 3. CONTROLO DE FLUXO A execução de um programa é feita “scannando” instruções carácter – a carácter de esquerda para direita e de cima para baixa. Porém em muitas situações depara-se com situações em que para se atingir os objectivos do problema em causa o programa deve desobedecer este princípio. Para que realmente se contorne princípio podemos obrigar que as instruções do programa seja executados de forma condicional ou seja repetidas varias vezes, estes mecanismos são conseguidos com recurso às instruções selectivas ou ciclos. 3.1. INSTRUÇÕES SELECTIVAS O Java contém três tipos de instruções de selecção, que são as seguintes: Instrução de uma única selecção (if) Realiza uma acção, ou mais, se uma condição for verdadeira ou salta a acção se a condição for falsa; Instrução de selecção dupla (if else ) Realiza uma acção se uma condição for verdadeira e realiza uma acção diferente se a condição for falsa, mas nunca as duas durante a mesma execução; Instrução de selecção múltipla (switch case ) Realiza uma de muitas acções diferentes, dependendo do valor de uma expressão. 3.1.1. Instrução if ou selecção simples A selecção simples permite decidir entre executar ou não um conjunto de instruções. A decisão é tomada em função do resultado de uma condição, ou seja, uma expressão com resultado lógico, que é calculada no inicio da execução da estrutura. As estruções são executadas se o resultado da condição for verdadeiro e não executadas se for falsa. ? Instruções F V

Upload: americolanga

Post on 12-Nov-2015

215 views

Category:

Documents


1 download

DESCRIPTION

Este capitulo mostra como podemos controlar a execução do fluxo das instruções recorrendo às instruções SELECTIVAS e CLICLICAS

TRANSCRIPT

  • LTP-I 16/03/15 - 17/04/15

    1

    dr. Amrico I. Langa

    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.

    ?

    Instrues

    F

    V

  • LTP-I 16/03/15 - 17/04/15

    2

    dr. Amrico I. Langa

    A sua sintaxe no Java a seguinte:

    if () {

    ;

    }

    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.

    ?

    Instrues - 1

    FV

    Instrues - 2

    A sua sintaxe no Java a seguinte:

    if () { //o uso do parnteses obrigatrio cdigo A e/ou

    cdigo B consiste mais de una ;

    } else {

    ;

    }

    Ex:

    public class ParImpar{ public static void main(String arsgs[]){

  • LTP-I 16/03/15 - 17/04/15

    3

    dr. Amrico I. Langa

    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.

    e

    Instrues - 1

    V1

    Instrues - 2

    ...

    Instrues - n

    V

    Instrues - d

    V2 Vn Vd

    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 (|< expresso>)

    {

    case : [break];

    case :< cdigo 2>[break];

    ...

    case : [break];

    default: cdigo default; //cdigo a ser executado caso nenhuma das opes seja atendida

    }

  • LTP-I 16/03/15 - 17/04/15

    4

    dr. Amrico I. Langa

    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"); 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;

  • LTP-I 16/03/15 - 17/04/15

    5

    dr. Amrico I. Langa

    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: 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");

  • LTP-I 16/03/15 - 17/04/15

    6

    dr. Amrico I. Langa

    } }

    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

  • LTP-I 16/03/15 - 17/04/15

    7

    dr. Amrico I. Langa

    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.

    ?

    Instrues

    F

    V

    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

    resultado da condio calculada for verdadeiro. Quando o resultado da condio for falso o

    ciclo terminar, prosseguindo a execuo normal do programa.

  • LTP-I 16/03/15 - 17/04/15

    8

    dr. Amrico I. Langa

    Sintaxe do while:

    while(){ }

    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

    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

  • LTP-I 16/03/15 - 17/04/15

    9

    dr. Amrico I. Langa

    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.

    F

    Instrues

    ?V

    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 { } while()

    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) { String funcionario=JOptionPane.showInputDialog("Nome do Funcionario"); double salInicial,salActual; do{ String sal=JOptionPane.showInputDialog("Valor do Salario"); salInicial=Double.parseDouble(sal); }while(salInicial

  • LTP-I 16/03/15 - 17/04/15

    10

    dr. Amrico I. Langa

    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.

    A sintaxe do ciclo for:

    For( ;< condio>; ){

    }

    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.

    inicializao

    instrues

    condio aco

    V F

  • LTP-I 16/03/15 - 17/04/15

    11

    dr. Amrico I. Langa

    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