A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento.

Apresentações semelhantes


Apresentação em tema: "1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento."— Transcrição da apresentação:

1

2 1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento de Informática e Matemática Aplicada Universidade Federal do Rio Grande do Norte Transparências baseadas no capítulo 5 do livro Deitel e Deitel

3 2 Estruturas de Controle - Parte 2 Roteiro 5.1Introdução 5.2Repetição controlada por contador 5.3Estrutura de Repetição FOR 5.4Exemplos 5.5Estrutura de Seleção Múltipla switch 5.6Estrutura de repetição do/while 5.7Instruções break e continue 5.8Instruções rotuladas break e continue 5.9Operadores Lógicos 5.10Resumo

4 3 5.1Introdução Antes de escrever um programa Ter um entendimento do problema Planejamento cuidadoso para resolvê-lo Ao escrever um programa Conhecer quais tipos de blocos de construção existem Utilizar bons princípios de programação

5 4 Bloco Qualquer número de instruções simples que são delimitadas por um par de chaves ({}) Os blocos definem o escopo das variáveis. public static void main(String[] args) { int n; //... { int k; // k é local, pertence ao bloco e /*... */ } // definida somente até o final } // do bloco

6 5 5.2Repetição Controlada por contador Repetição controlada por contador requer Nome de uma variável de controle (ou contador de laço) Valor inicial Condição que testa o valor final da variável de controle (ou seja se o laço deve continuar) Incremento pelo qual a variável de controle é modificada a cada passagem do laço Exemplo a seguir de um applet

7 6 1// Fig. 5.1: WhileCounter.java 2// Counter-controlled repetition 3import java.awt.Graphics; 4import javax.swing.JApplet; 5 6public class WhileCounter extends JApplet { 7 public void paint( Graphics g ) 8 { 9 int counter = 1; // initialization while ( counter <= 10 ) { // repetition condition 12 g.drawLine( 10, 10, 250, counter * 10 ); 13 ++counter; // increment 14 } 15 } 16}

8 7 Algoritmo 1. import 2. Class WhileCounter 3. Método Paint 3.1 Inicialização do contador 3.2 Loop 3.3 chamada do método drawline 3.4 Incremento Program Output

9 8 5.2 Repetição Controlada por contador Variável de controle é nomeada e iniciada Declarações com inicialização são instruções executáveis Condição para testar o valor da variável Método drawLine( x1, y1, x2, y2 ) Referencia o objeto Graphics Desenha linha de ( x1, y1 ) para ( x2, y2 ) Incrementa o contador 9 int counter = 1; // initialization 11 while ( counter <= 10 ) { // repetition condition 12 g.drawLine( 10, 10, 250, counter * 10 ); 13 ++counter; // increment

10 9 5.2 Repetição Controlada por contador Este programa pode ser mais conciso Inicializando o contador com zero while ( ++counter <= 10 ) g.drawLine( 10, 10, 250, counter * 10 ); O incremento é feito dentro do while

11 10 5.3Estrutura de Repetição For Vamos refazer o exemplo anterior usando a estrutura For

12 11 Loop using for Program Output 1// Fig. 5.2: ForCounter.java 2// Counter-controlled repetition with the for structure 3import java.awt.Graphics; 4import javax.swing.JApplet; 5 6public class ForCounter extends JApplet { 7 public void paint( Graphics g ) 8 { 9 // Initialization, repetition condition and incrementing 10 // are all included in the for structure header. 11 for ( int counter = 1; counter <= 10; counter++ ) 12 g.drawLine( 10, 10, 250, counter * 10 ); 13 } 14}

13 Estrutura de Repetição For No for temos :inicializãção, condição e incremento Formato geral for ( inicialização ; teste de continuação do loop ; incremento ) instrução Se existem muitas instruções utilize as chaves para delimitar o bloco Variável controle existe apenas no corpo da estrutura for Se o teste de condição é inicialmente false o corpo do for não é nem executado 11 for ( int counter = 1; counter <= 10; counter++ ) 12 g.drawLine( 10, 10, 250, counter * 10 );

14 Estrutura de Repetição For Pode ser usada expressão aritmética Seja x = 2, y = 10 for ( int j = x; j <= 4 * x * y; j += y / x ) Equivalente a for ( int j = 2; j <= 80; j += 5 ) For pode ser representada por uma estrutura while inicialização ; while ( condição teste ) { instrução incremento ; }

15 Estrutura de Repetição For 11 for ( int counter = 1; counter <= 10; counter++ ) 12 g.drawLine( 10, 10, 250, counter * 10 ); verd falso int counter = 1 counter <= 10 counter++ g.drawLine( 10, 10, 250, counter * 10 ); Inicializa o valor da variável de controle Determina se o valor final da variável de controle foi alcançado Corpo do laço pode conter muitas instruções Incrementa a varia'vel de controle

16 Exemplos Calcular o valor de um depósito de R$1000 com taxa de juros de 5% ao ano Calcular para 10 anos Use a = p (1 + r ) n p – quantidade original r – taxa de juros anual n – número de anos a – quantidade em depósito no fim do n-ésimo ano Use um laço for para calcular o valor n

17 16 Use for loop to calculate interest 1// Fig. 5.6: Interest.java 2// Calculating compound interest 3import java.text.DecimalFormat; 4import javax.swing.JOptionPane; 5import javax.swing.JTextArea; 6 7public class Interest { 8 public static void main( String args[] ) 9 { 10 double amount, principal = , rate =.05; DecimalFormat precisionTwo = new DecimalFormat( "0.00" ); 13 JTextArea outputTextArea = new JTextArea( 11, 20 ); outputTextArea.append( "Year\tAmount on deposit\n" ); for ( int year = 1; year <= 10; year++ ) { 18 amount = principal * Math.pow( rate, year ); 19 outputTextArea.append( year + "\t" + 20 precisionTwo.format( amount ) + "\n" ); 21 } JOptionPane.showMessageDialog( 24 null, outputTextArea, "Compound Interest", 25 JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminate the application 28 } 29}

18 17 Saída do programa

19 18 5.4Exemplos variáveis Classe DecimalFormat (package java.text ) String de controle de formato indica a apresentação dos números ponto flutuante " 0.00" Dois dígitos a direita do decimal e pelo menos 1 a esquerda Método format retorna um String formatado Classe JTextArea (package javax.swing ) Componente gráfico que mostra muitas linhas Inicializado para apresentar 11 linhas e 20 colunas de texto 10 double amount, principal = , rate =.05; 12 DecimalFormat precisionTwo = new DecimalFormat( "0.00" ); 13 JTextArea outputTextArea = new JTextArea( 11, 20 );

20 Exemplos Método append (of class JTextArea ) Adiciona texto no objeto JTextArea Inicialmente possui string vazio Laço for executa 10 vezes Método pow (class Math ) Math.pow( x, y ) Retorna um double 15 outputTextArea.append( "Year\tAmount on deposit\n" ); 21 } 17 for ( int year = 1; year <= 10; year++ ) { 18 amount = principal * Math.pow( rate, year ); 19 outputTextArea.append( year + "\t" + 20 precisionTwo.format( amount ) + "\n" );

21 20 5.4Exemplos static método showMessageDialog Classe JOptionPane showMessageDialog mostra um String ou componente GUI, como JTextArea 23 JOptionPane.showMessageDialog( 24 null, outputTextArea, "Compound Interest", 25 JOptionPane.INFORMATION_MESSAGE );

22 21 1// Fig. 5.6: Interest.java 2// Calculating compound interest 3 3import java.text.DecimalFormat; 4import javax.swing.JOptionPane; 5import javax.swing.JTextArea; 6 7public class Interest { 8 public static void main( String args[] ) 9 { 10 double amount, principal = , rate =.05; DecimalFormat precisionTwo = new DecimalFormat( "0.00" ); JTextArea outputTextArea = new JTextArea( 11, 20 ); outputTextArea.append( "Year\tAmount on deposit\n" ); for ( int year = 1; year <= 10; year++ ) { amount = principal * Math.pow( rate, year ); outputTextArea.append( year + "\t" precisionTwo.format( amount ) + "\n" ); 21 } JOptionPane.showMessageDialog( 24 null, outputTextArea, "Compound Interest", 25 JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminate the application 28 } 29} Notice the import statements required. New JTextArea object initialized to hold 11 rows and 20 columns of text. new operator used to create new objects. Use method append to add to the String in the JTextArea object. Notice the format of method Math.pow Use method format to output the formatted number as a String. Use the JTextArea reference as an argument to showMessageDialog

23 22 1. import 2. Class Interest 2.1 Initialize variables 2.2 DecimalFormat 3. for loop 3.1 Math.pow 3.2 append 3.3 format 3.4 showMessageDialog Algoritmo

24 23 Saída do Programa

25 24 5.5Estrutura Switch switch Estrutura de múltipla seleção Format Série de rótulos case e um opcional default case switch ( value ){ case value1: actions case value2: actions default: actions } break; sai da estrutura

26 25 5.5Estrutura Switch true false case a case a action(s)break case b case b action(s)break false case z case z action(s)break true default action(s)

27 Estrutura Switch Method init Entrada do usuário 9 public void init() 10 { 11 String input; input = JOptionPane.showInputDialog( 14 "Enter 1 to draw lines\n" + 15 "Enter 2 to draw rectangles\n" + 16 "Enter 3 to draw ovals\n" ); choice = Integer.parseInt( input ); 19 } 7 int choice;

28 Estrutura Switch Estrutura switch - compara choice com cases case rótulos – pode ser valores do tipo byte, short, int, long e char Usa aspas simples para caracter: 'A' Pode haver múltiplas ações para cada case break – sai da estrutura switch Rótulo default – opcional, ação pode ser tomada caso não ocorra nenhum dos rótulos acima 24 switch( choice ) { 25 case 1: 26 g.drawLine( 10, 10, 250, 10 + i * 10 ); 27 break; 36 default: 37 JOptionPane.showMessageDialog( 38 null, "Invalid value entered" );

29 28 1. Class SwitchTest 2. init 3. paint 3.1 for 3.2 switch 1// Fig. 5.7: SwitchTest.java 2// Counting letter grades 3import java.awt.Graphics; 4import javax.swing.*; 5 6public class SwitchTest extends JApplet { 7 int choice; 8 9 public void init() 10 { 11 String input; input = JOptionPane.showInputDialog( 14 "Enter 1 to draw lines\n" + 15 "Enter 2 to draw rectangles\n" + 16 "Enter 3 to draw ovals\n" ); choice = Integer.parseInt( input ); 19 } public void paint( Graphics g ) 22 { 23 for ( int i = 0; i < 10; i++ ) { switch( choice ) { case 1: 26 g.drawLine( 10, 10, 250, 10 + i * 10 ); break; 28 case 2: 29 g.drawRect( 10 + i * 10, 10 + i * 10, i * 10, 50 + i * 10 ); 31 break; Notice how case labels are used to test for the integer entered. break exits the switch structure. Place the value to compare inside the switch statement.

30 29 Program Output i * 10, 50 + i * 10 ); 35 break; default: 37 JOptionPane.showMessageDialog( 38 null, "Invalid value entered" ); 39 } // end switch 40 } // end for 41 } // end paint() 42} // end class SwitchTest 32 case 3: 33 g.drawOval( 10 + i * 10, 10 + i * 10,

31 30

32 31 5.6Estrutura do while Similar a estrutura while Condição é testada depois do corpo do laço Açoes são executadas pelo menos uma vez Formato do { instrução } while ( condição ); Boa prática coloca chaves mesmo se não for requerido

33 Estrutura do while true false action(s) condition

34 33 1// Fig. 5.9: DoWhileTest.java 2// Using the do/while repetition structure 3import java.awt.Graphics; 4import javax.swing.JApplet; 5 6public class DoWhileTest extends JApplet { 7 public void paint( Graphics g ) 8 { 9 int counter = 1; do { g.drawOval( counter * 10, counter * 10, 13 counter * 20, counter * 20 ); 14 ++counter; 15 } while ( counter <= 10 ); 16 } 17} Method drawOval( x1, y1, width, height ) Same arguments as drawRect, but the rectangle defines the oval's bounding box. Notice format of do / while loop.

35 34 Algoritmo 1. Class DoWhileTest 2. paint 3. do / while loop

36 35 5.7Instruções break e continue break Saída imediata do while, for, do/while or switch Continua a partir da próxima instrução depois do laço Uso comum do break Saída antecipada do laço Pula os outros rótulos da estrutura switch

37 Instruções break e continue continue Pula as outras instruçoes do corpo do while, for ou do/while Procede com a próxima interação do laço while e do/while A condição do laço é avaliada imediatamente após o continue Estrutura for Expressão de incremento é executada, então o teste é avaliado

38 37 1// Fig. 5.11: BreakTest.java 2// Using the break statement in a for structure 3import javax.swing.JOptionPane; 4 5public class BreakTest { 6 public static void main( String args[] ) 7 { 8 String output = ""; 9 int count; for ( count = 1; count <= 10; count++ ) { 12 if ( count == 5 ) break; // break loop only if count == output += count + " "; 16 } output += "\nBroke out of loop at count = " + count; 19 JOptionPane.showMessageDialog( null, output ); 20 System.exit( 0 ); 21 } 22} break causes an immediate exit from the loop.

39 38 1// Fig. 5.12: ContinueTest.java 2// Using the continue statement in a for structure 3import javax.swing.JOptionPane; 4 5public class ContinueTest { 6 public static void main( String args[] ) 7 { 8 String output = ""; 9 10 for ( int count = 1; count <= 10; count++ ) { 11 if ( count == 5 ) continue; // skip remaining code in loop 13 // only if count == output += count + " "; 16 } output += "\nUsed continue to skip printing 5"; 19 JOptionPane.showMessageDialog( null, output ); 20 System.exit( 0 ); 21 } continue skips the rest of the body and goes to the next iteration.

40 // Fig. 5.13: BreakLabelTest.java 2// Using the break statement with a label 3import javax.swing.JOptionPane; 4 5public class BreakLabelTest { 6 public static void main( String args[] ) 7 { 8 String output = ""; stop: { // labeled compound statement 11 for ( int row = 1; row <= 10; row++ ) { 12 for ( int column = 1; column <= 5 ; column++ ) { if ( row == 5 ) break stop; // jump to end of stop block output += "* "; 18 } output += "\n"; 21 } // the following line is skipped 24 output += "\nLoops terminated normally"; 25 } 26 Begins labeled compound statement stop: Labeled break statement to exit stop block.

41 40 5.9Operadores Lógicos Operadores Lógicos Até o momento utilizamos, ==, etc para testar condições Operadores lógicos permitem condições mais complexas && ( AND ) Retorna true se ambas condições são verdadeiras || ( OR ) Retorna true se pelo menos uma condição for verdaderia

42 41 5.9Operadores Lógicos ! (NOT, negação) Inverte o significado de uma condição Se a condição for false torna-se true Se a condição for true torna-se false Operador unário, tem apenas um operando Como é feita a avaliação Avalia o operando da esquerda, depois avalia o operando direita Se o operando da esquerda de um && (and) for false, o operando da direita não será avaliado

43 Operadores Lógicos Operadores Lógicos ^ (Ou exclusivo) true se existe exatamente uma condição true AND Lógico ( & ) e Or inclusivo ( | ) trabalha identico ao regular AND and OR Sempre avalia as 2 expressões Util em situações como esta birthday == true | ++age >= 65

44 Operadores Lógicos Exemplos ExpressãoResultado true && false false true || false true !false true true ^ truefalse if ( ( gender == 1 ) && ( age >= 65 ) ) ++seniorFemales; seniorFemales é atualizado se ambas as condições são true

45 44 1. Class LogicalOperators 1.1 JTextArea 1.2 JScrollPane 2. Logical operators 1// Fig. 5.19: LogicalOperators.java 2// Demonstrating the logical operators 3import javax.swing.*; 4 5public class LogicalOperators { 6 public static void main( String args[] ) 7 { 8 8 JTextArea outputArea = new JTextArea( 17, 20 ); 9 9 JScrollPane scroller = new JScrollPane( outputArea ); 10 String output = ""; output += "Logical AND (&&)" "\nfalse && false: " + ( false && false ) + 14 "\nfalse && true: " + ( false && true ) + 15 "\ntrue && false: " + ( true && false ) + 16 "\ntrue && true: " + ( true && true ); output += "\n\nLogical OR (||)" + 19 "\nfalse || false: " + ( false || false ) + 20 "\nfalse || true: " + ( false || true ) + 21 "\ntrue || false: " + ( true || false ) + 22 "\ntrue || true: " + ( true || true ); output += "\n\nBoolean logical AND (&)" + 25 "\nfalse & false: " + ( false & false ) + 26 "\nfalse & true: " + ( false & true ) + 27 "\ntrue & false: " + ( true & false ) + 28 "\ntrue & true: " + ( true & true ); 29 JTextArea can display many lines of text. This one can display 17 rows and 20 columns. This creates a JScrollPane object and initializes it with outputArea. This adds scrolling to outputArea. Use the logical operators. Boolean values converted to String s.

46 45 3. setText 34 "\ntrue | true: " + ( true | true ); output += "\n\nBoolean logical exclusive OR (^)" + 37 "\nfalse ^ false: " + ( false ^ false ) + 38 "\nfalse ^ true: " + ( false ^ true ) + 39 "\ntrue ^ false: " + ( true ^ false ) + 40 "\ntrue ^ true: " + ( true ^ true ); output += "\n\nLogical NOT (!)" + 43 "\n!false: " + ( !false ) + 44 "\n!true: " + ( !true ); outputArea.setText( output ); 47 JOptionPane.showMessageDialog( null, scroller, 48 "Truth Tables", JOptionPane.INFORMATION_MESSAGE ); 49 System.exit( 0 ); 50 } 51} 30 output += "\n\nBoolean logical inclusive OR (|)" + 31 "\nfalse | false: " + ( false | false ) + 32 "\nfalse | true: " + ( false | true ) + 33 "\ntrue | false: " + ( true | false ) + Method setText replaces the String in the JTextArea.

47 46

48 Resumo Programação Estruturada Programação estruturada Fácil de entender, testar, debug, modificar programas Regras para programação estruturada 1) inicie com um fluxograma simples 2) Qualquer retângulo (ação) pode ser substituído por 2 retângulos (ações) em sequência 3) Qualquer retângulo (ação) pode ser substituído por qualquer estrutura de controle (sequence, if, if/else, switch, while, do/while ou for ) 4) Regras 2 e 3 são aplicadas quantas vezes necessárias e em qualquer ordem

49 Resumo Programação Estruturada Rule 3 Rule 3 - Troque qualquer retângulo por uma estrutura

50 Resumo Programação Estruturada Todos os programas podem ser divididos em 3 partes Sequência - trivial Seleção - if, if/else, ou switch Repetição - while, do/while, or for Programas são reducidos em Sequencia Estrutura if (seleção) Estrutura while (repetição) Estruturas de controle podem ser combinadas de 2 formas Aninhamento (regra 3) e empilhamento (rule 2)

51 50 Switch int opcao = javax.swing.JOptionPane.showInputDialog( "Digite um número entre 1 e 6"); switch (opcao) { case 1: System.out.println("um"); break; case 2: System.out.println("dois"); break; case 3: case 4: System.out.println("três ou quatro"); break; default: System.out.println("Valor inválido"); break; }

52 51 For for ( ; ; incrementador) for (int i = 0; i < 100; i++) { System.out.println(i); } for (int i = 0, j = 10; i < j; i++, j--) { System.out.println(i); } for (int i = 0; i < 100; ) { System.out.println(i); // Laço Infinito }

53 52 While while ( ) final int maximo = 50; int c = -10 double f = 0; System.out.println("\tºC\t\tºF"); while (f

54 53 Do-While do instrução while (condição); int numero = 12345; int r = numero; int digitos = 0; do { r /= 10; digitos++; } while (r != 0); System.out.println(numero + " tem "+ digitos + " digitos.");

55 54 For While for (instrução1; condição; instrução2) instrução3; instrução1; while (condição) { instrução3; instrução2; } for (int i = 0; i < 100; i++) { System.out.println(i); } int i = 0; while (i < 100) { System.out.println(i); i++; }

56 55 Do-While While do instrução while (condição) instrução; while (condição) { instrução} int i = 0; do { System.out.println(i); i++; } while (i < 100) int i = 0; System.out.println(i); while (i < 100) { System.out.println(i); i++; }


Carregar ppt "1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento."

Apresentações semelhantes


Anúncios Google