JAVA !!!!

19 views
Skip to first unread message

Joao de Souza

unread,
Apr 25, 2011, 6:20:46 PM4/25/11
to etecpg-2-se...@googlegroups.com
Pessoal, sempre que o professor passa uma matéria nova, ele passa exercícios como exemplo, e os resolve no mesmo dia. Gostaria de pedir a quem tiver desses exercícios, para postar aqui. Assim, todos que faltaram ou que não estão atualizados terão acesso. Mesmo aqueles exercícios mais antigos irão ajudar. To postando aqui o da aula de hoje, segunda-feira, 25 de abril.

Obrigado,
Joao de Souza




Recursividade


É o ato de montar os algoritmos de forma recursiva, ou seja, métodos chamados dentro de métodos até que uma condição seja satisfeita.


Laço de repetição inteligente usando retorno

3,6,12,24,48,96

Consideremos o 5° numero da sequencia.  n = 5


int seq (int n) {
     if (n==1){
          return 3;
     } else {
          return 2 * seq (n-1);
     }
}

Pilha

seq(5) = 2 * seq (4) =
seq(4) = 2 * seq (3) =
seq(3) = 2 * seq (2) =
seq(2) = 2 * seq (1) =
seq(1) = 3

seq(2) = 2 * 3 = 6
seq(3) = 2 * 6 = 12
seq(4) = 2 * 12 = 24
seq(5) = 2 * 24 = 48

seq = 48

O if deverá sempre comparar se a localização é igual a 1 (n == 1), para que se chegue na primeira casa. Essa é uma sequência multipla de 3, caso queira que a sequencia seja multipla de outro numero, basta alterar o return do if. No caso, uma sequencia de 2 (return 2; - 2,4,8,16...). O mesmo serve para o return do else, caso queira que seja uma sequencia do triplo do numero (else {return 3 * seq (n-1) - 3,9,27,81...}.
Daí é só usar a imaginacao...

Vlw


Joao de Souza

unread,
Apr 26, 2011, 1:51:06 PM4/26/11
to etecpg-2-se...@googlegroups.com
ArrayList    -    FOR EACH

Laço de repetição que não usa índices, e sim os objetos de um ArrayList:

Ex.:

class Vetor {
     double media (ArrayList <double> v){
          double soma= 0;
          for (double d : v) {
               soma = soma + d;
          }
          return soma / v.size();
     }
}


Como funciona: Nesse metodo de ArrayList, foi declarada uma variavel SOMA com valor zerado; 
Para cada double d pertencente a v, ou seja, para cada unidade pertencente a v, soma-se esse d a variavel SOMA e retorna a divisao do resultado pelo tamanho do ArrayList.
Na pratica: Na classe teste, adicionamos ao ArrayList v os valores 5 e 10 [p.add(5,0)], ou seja, sera um arraylist com 5,0 na posicao zero e 10,0 nao posicao 1, tamanho = 2. O metodo acima recebe cada um desses valores e os soma : soma = 5,0 >>> soma = 15,0. Dai divide 15,0 (soma) por 2 (tamanho do Arraylist) = 7,5.
Onde esta "for (double d : v){", double d poderia ser qualquer outro nome, mas deve ser double, que e o mesmo da classe e da variavel soma: "for (double cachorro : v){" para cada unidade pertencente a v. Dá-se um nome para que se possa usar no futuro: soma = soma + cachorro;.

O teste:

class Teste{
     public static void main (String [] args){
          ArrayList <double> p = new ArrayList <double>();
          p.add(5,0);
          p.add(10,0);
          Vetor v = new Vetor();
          System.out.printLn (v.media(p));
     }
}

Por ser double, o valor adicionado deve ser um numero real e nao inteiro.
For each nao precisa de índice e só funciona com ArrayList.


Joao de Souza


Marcos Costa

unread,
Apr 26, 2011, 6:28:42 PM4/26/11
to etecpg 2ª semestre 2010
exatamente joão, só chamo atenção para um equivoco. no teste, quando
você atribuiu os valores ao arraylist, você utilizou vírgula e não
ponto. O java funciona no padrão americano, com virgulas separando
casa decimais.

Muito boa a sua contribuição João, acho que vou falar com o thiago pra
ver se é possível fazer pastas dentor deste grupo, para que possamos
separar os tópicos de acordo com o tema.

Joao de Souza

unread,
Apr 26, 2011, 10:33:58 PM4/26/11
to etecpg-2-se...@googlegroups.com
Marcos, pode me dizer o que há de errado com esse exercicio? Está exatamente igual ao que o prof Alexandre passou na lousa na ultima aula (eu fui a noite). Só que em vez de imprimir os valores da matriz transpostos, esta imprimindo 0's. 

Matriz    1  2             Transposta   1   3         Impressao  0   0
              3  4                                  2   4                            0   0

public class Matriz {
int [][] Transposta (int [][] m){
if (m.length == m[0].length){
int [][] t = new int [m.length][m[0].length];
for (int i = 0; i < m.length; i++){
for (int j = 0; j < m[0].length; j++){
t[j][i]= t[i][j];
}
}
return t;
} else {
return null;
}
}
}



class Teste {
public static void main (String[]Args) {
int [][]m = new int [2][2];
m[0][0]= 1;
m[0][1]= 2;
m[1][0]= 3;
m[1][1]= 4;
Matriz k = new Matriz();
int[][]t1 = k.Transposta(m);
for (int i=0;i< t1.length; i++){
for (int j=0;j< t1[0].length; j++){
System.out.println(t1[i][j]);
}
}
}
}


Vlw

Marcos Costa

unread,
Apr 27, 2011, 4:36:35 PM4/27/11
to etecpg 2ª semestre 2010
Opa joão, não vi algum erro de lógica. Mas verei melhor amanhã na
escola.
Reply all
Reply to author
Forward
0 new messages