Soluções Iterativas com Laços Como poderiamos imprimir 50 vezes um mesmo texto? Ou imprimir os...

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

Transcript of Soluções Iterativas com Laços Como poderiamos imprimir 50 vezes um mesmo texto? Ou imprimir os...

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

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

Page 2: 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 Whilewhile (teste-de-continuação){ comandos}

Page 3: 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 Whileint n = 0;while (n < 50){ System.out.println("Bom Jogo!"); n++;}System.out.println("Fim das mensagens");

Page 4: 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 Whileint n = 50;while (n > 0){ System.out.println("Bom Jogo!"); n--;}System.out.println("Fim das mensagens");

Page 5: 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

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

E se eu quisesse perguntar o número de vezes a ser impresso?

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

Algo mais útil...

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;

n! = n (n-1) (n-2) … 1.

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

Whilef n1 4 valores na entrada do laço4 3 1a. iteração permitida (pois n=4 > 1): f = 1 x 4 e n se torna 312 2 2a. iteração permitida (pois n=3 > 1): f = 4 x 3 e n se torna 224 1 3a. iteração permitida (pois n=2 > 1): f = 12 x 2 e n se torna 124 laço termina (pois n=1) e o valor de f = 24 retorna

OBS:

11! = 3991680012! = 47900160013! = 6227020800

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

O que faz este programa?int contador = 0;

While (true){

contador += 1System.out.print(contador + “\n”);

}

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

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

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

Variantes do While

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

ExercícioImplementar a função fatorial com o For

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

ExercícioImplementar o jogo da Adivinhação

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

Exerciciopublic 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); }}

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

Laço Infinito

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

Game Loop

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

Métodos e Soluções

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

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

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

Definição de Funçõesmodificadores 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.

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

Definição de Funções

Métodos static

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

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,

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

Definição de Funçõespublic 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); }}

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

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

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

Sobrecarga de Métodospublic 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).

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

Sobrecarga de MétodosA 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

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

ExercícioSem 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.

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

RecursãoProcesso de Indução

0),1(

0,1)(

nsenfatn

nsenfat

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.

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

RecursãoExpansão e Contração

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

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

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

Recursão – algoritmo de Euclides

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

Recursão – analise de eficiencia

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

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 = 0F(n) = 1, se n = 1

F(n) = F(n-1) + F(n-2), para n >= 2Este 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.

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

Recursão – Torre de Hanoi

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

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.

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

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?

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

Vetores unidimensionaisclass 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); } }

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

ExercicioEscreva 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.

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

Vetores Bidimensionais

Sintaxe:

tipo[][] nomeVetor= new tipo [tamanho1][tamanho2];

Exemplo:

double[][] matrizPedagio = new double[10][10];

matrizPedagio[0][0] = 2,50matrizPedagio[0][1] = 7,50;...

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

ExercicioCrie 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.

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

ExercíciosConstrua 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).

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

Flags...

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

Exemplo de Flags

Ler um vetor de números até encontrar o numero 0