soluções iterativas com laços como poderiamos imprimir 50 vezes um mesmo texto? ou imprimir os...
TRANSCRIPT
![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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/1.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/2.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/3.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/4.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/5.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/6.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/7.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/8.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/9.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/10.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/11.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/12.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/13.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/14.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/15.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/16.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/17.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/18.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/19.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/20.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/21.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/22.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/23.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/24.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/25.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/26.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/27.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/28.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/29.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/30.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/31.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/32.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/33.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/34.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/35.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/36.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/37.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/38.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/39.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/40.jpg)
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 ?](https://reader036.vdocuments.site/reader036/viewer/2022062307/552fc0f9497959413d8b6992/html5/thumbnails/41.jpg)
Exemplo de Flags
Ler um vetor de números até encontrar o numero 0