1 / 41

Soluções Iterativas com Laços

Soluções Iterativas com Laços. Como poderiamos imprimir 50 vezes um mesmo texto? Ou imprimir os números de 1 a 1000 ?. O Laço While. while ( teste-de-continuação ) { comandos }. O Laço While. int n = 0; while (n < 50) { System. out.println ("Bom Jogo!"); n++; }

lynn
Download Presentation

Soluções Iterativas com Laços

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Soluções Iterativas com Laços Como poderiamos imprimir 50 vezes um mesmo texto? Ou imprimir os números de 1 a 1000 ?...

  2. O Laço While while (teste-de-continuação) { comandos }

  3. O Laço While int n = 0; while (n < 50) { System.out.println("Bom Jogo!"); n++; } System.out.println("Fim das mensagens");

  4. O Laço While int n = 50; while (n > 0) { System.out.println("Bom Jogo!"); n--; } System.out.println("Fim das mensagens");

  5. O Laço While E se eu quisesse perguntar o número de vezes a ser impresso? import java.util.Scanner; public class Cap04Ap04 { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.print("Entre numero de linhas a imprimir: "); int n = entrada.nextInt(); while (n > 0) { System.out.println("Bom Jogo!"); n--; } System.out.println("Fim das mensagens"); } }

  6. Algo mais útil... n! = n  (n-1)  (n-2)  … 1. int f; f = 1; while (n>1) { f *= n; // equivalente a f = f * n; n--; // equivalente a n = n-1 } Ou int f; f = 1; while (n>1) f *= n--; return f;

  7. While f n 1 4 valores na entrada do laço 4 3 1a. iteração permitida (pois n=4 > 1): f = 1 x 4 e n se torna 3 12 2 2a. iteração permitida (pois n=3 > 1): f = 4 x 3 e n se torna 2 24 1 3a. iteração permitida (pois n=2 > 1): f = 12 x 2 e n se torna 1 24 laço termina (pois n=1) e o valor de f = 24 retorna OBS: 11! = 39916800 12! = 479001600 13! = 6227020800

  8. O que faz este programa? int contador = 0; While (true) { contador += 1 System.out.print(contador + “\n”); }

  9. Funções – Exercicio A série de Taylor que calcula o seno de um número é dada por: Escreva um programa que calcula o seno de um número

  10. Variantes do While

  11. Exercício Implementar a função fatorial com o For

  12. Exercício Implementar o jogo da Adivinhação

  13. Exercicio public class Cap04Ap06 { public static void main(String[] args) { int segredo, chute, conta=0, a=1, b=6; Scanner entrada = new Scanner(System.in); segredo = a + (int)(Math.random()*b); // numero no intervalo [a,a+b) do { System.out.print("Chute um numero: "); chute = entrada.nextInt(); conta++; if (chute==segredo) { System.out.println("ACERTOU! :-)"); conta = 0; } else { System.out.println("errou :-("); } } while (conta != 0); } }

  14. Laço Infinito

  15. Game Loop

  16. Métodos e Soluções

  17. Conceito de Função Matemática função f(x,y)= x2 + y2 mapeia (1,2) a 5 e (2,3) a 13, ou seja: f(1,2)= 5 e f(3,3)= 13. uma função mapeia valores de seu domínio em valores de seu contra-domínio Máquinas Funcionais x Máquinas Procedimentais

  18. Definição de Funções modificadores tipoRetorno nome(argumentos) { comandos } a primeira linha é chamada de assinatura do método (method signature) ou cabeçalho do método (method header) e o conjunto de comandos é denominado de corpo do método.

  19. Definição de Funções Métodos static

  20. Definição de Funções - os nomes das variáveis no main não precisam ser os mesmos nomes usados pelo universo de um método (porque são valores que são passados) - o método é público (public), no sentido de que qualquer parte do programa pode usá-lo,

  21. Definição de Funções public class Cap04Ap01 { public static int max3(int a, int a2, int a3) { int max = a; if (a2>max) max= a2; if (a3>max) max= a3; return max; } public static void main(String[] args) { int a=1; int b=7; int c=10; int i = max3(a,b,c); System.out.println("Máximo= "+i); } }

  22. Void... public class Cap04Ap02 { public static void discriminante(int a, int b, int c) { double d= b*b-4*a*c; if (d<0) { System.out.println("Não existem raízes reais"); }else { if (d==0) { System.out.println("Existem duas raízes reais iguais"); }else { System.out.println("Existem duas raízes reais diferentes"); } } } public static void main(String[] args) { int a=1; int b=6; int c=9; discriminante(a,b,c); } }

  23. Sobrecarga de Métodos public static int min(int a, int b) // metodo 1 { if (a<b) return a; return b; } public static double min(double a, double b) // metodo 2 { if (a<b) return a; return b; } public static int min(int a, int b, int c) // metodo 3 { return min(min(a,b),c); } public static void main(String[] args) { System.out.println(min(7,2)); System.out.println(min(5,3,1)); System.out.println(min(7.0,2.0)); } Métodos podem ter o mesmo nome e lista de argumentos diferentes. Este recurso é denominado de sobrecarga de método (method overloading).

  24. Sobrecarga de Métodos A sobrecarga de métodos é exclusivamente baseada na lista de argumentos. Mudanças nos modificadores ou tipoRetorno não sobrecarregam métodos. O compilador sempre procura pelo método mais específico, num processo denominado de resolução de sobrecarga (overload resolution). O que ocorreria se tivéssemos?: min(3,7) public static double min(int a, double b) ... public static double min(double a, int b) erro dizendo que a referência a min é ambígua

  25. Exercício Sem usar if, escreva o método boolean intervalo(int x, int a, int b) que testa se a <= x <= b , onde x, a e b são números inteiros. Sobrecarregue o método do exercício anterior para x, a e b sendo números reais e teste para intervalo(3,1,5), intervalo(2.5,1,5) e intervalo(2.5,1,5). O número decimal 0.1 não é representado com precisão pelo sistema binário dos computadores, de maneira que a==b é falso se double a = 1.2; e double b = 12*0.1;. Escreva o método boolean igual(double x, double y) que confirma x ser igual a y somente se |x y| < TOL, onde | | significa o módulo e TOL é uma constante pública e estática definida por você. Teste o método para as variáveis a e b definidas acima.

  26. Recursão Processo de Indução Base da Indução: Condição que não implica recursão, deve ser uma parada obrigatória Passo da recursão: Deve se aproximar um pouco mais da solução. Pm é verdade, então Pm+1 também é verdade, desde que saibamos construir a solução para o incremento de 1 grau de complexidade a partir de Pm.

  27. Recursão Expansão e Contração

  28. Recursão - Exemplo public static long fat(int n) { if (n==0) return 1; else return n*fat(n-1); }

  29. Recursão – algoritmo de Euclides

  30. Recursão – analise de eficiencia

  31. Exercicio: implementar a serie de Fibonacci Esta seqüência foi descrita primeiramente por Leonardo de Pisa, também conhecido como Fibonacci (Dc. 1200), para descrever o crescimento de uma população de coelhos. Os números descrevem o número de casais em uma população de coelhos depois de n meses se for suposto que: -no primeiro mês nasce apenas um casal, -casais amadurecem sexualmente (e reproduzem-se) apenas após o segundo mês de vida, -não há problemas genéticos no cruzamento consangüíneo, -todos os meses, cada casal fértil dá a luz a um novo casal, e -os coelhos nunca morrem. F(n) = 0, se n = 0 F(n) = 1, se n = 1 F(n) = F(n-1) + F(n-2), para n >= 2 Este método recursivo gera um processo chamado de recursão de árvore, onde cada chamada gera duas outras. Este processo é muito pouco eficiente, pois o tempo de execução cresce exponencialmente com n e as chamadas recursivas são repetitas várias vezes.

  32. Recursão – Torre de Hanoi

  33. Dados Compostos com Vetores Dependendo do problema que queremos resolver utilizando um (ou mais de um) programa(s) de computador, podemos encontrar a situação em que uma grande quantidade de dados precisa ser manipulada simultaneamente em um objeto.

  34. Vetores unidimensionais Sintaxe: tipo[] nomeVetor= new tipo[tamanho]; Exemplo: int [] numeros = new int[2]; numeros[0] = 1; numeros[1] = 2; numeros[2] = 3; // Está errado, porque?

  35. Vetores unidimensionais class DespesasAnuais { double[] despEduc = new double[12]; double maxDesp() { int i = 1; double max = despEduc[0]; while (i < 12) { if (despEduc[i] > max) max = despEduc[i]; i++; } return max; } public static void main(String[] arg) { DespesasAnuais desp2008 = new DespesasAnuais(); desp2008.despEduc[0] = 20.01; desp2008.despEduc[1] = 10.11; desp2008.despEduc[2] = 22.01; desp2008.despEduc[3] = 13.11; desp2008.despEduc[4] = 25.01; desp2008.despEduc[5] = 19.11; double despMax = desp2008.maxDesp(); System.out.println(despMax); } }

  36. Exercicio Escreva um programa que leia os dados da inflação de cada mês ao longo de um ano e calcule qual foi a inflação de todo o ano.

  37. Vetores Bidimensionais Sintaxe: tipo[][] nomeVetor= new tipo [tamanho1][tamanho2]; Exemplo: double[][] matrizPedagio = new double[10][10]; matrizPedagio[0][0] = 2,50 matrizPedagio[0][1] = 7,50; ...

  38. Exercicio Crie uma matriz de duas dimensões, que contenha a distancia entre as cidades A e B: Distancia[A][B] = 100km Desenvolva uma função que recebe um par de cidades e retorna a distancia entre elas.

  39. Exercícios Construa um programa que receba duas matrizes quadradas de tamanho N por N e calcule a soma dessas duas matrizes. Construa um programa que receba duas matrizes quadradas de tamanho N por N e calcule o produto dessas duas matrizes (dica: você precisará de três índices de controle).

  40. Flags...

  41. Exemplo de Flags Ler um vetor de números até encontrar o numero 0

More Related