Sunteți pe pagina 1din 8

Tabelas e Matrizes

B[8][6]
A[10]
Arrays e Matrizes em Java

Slides_Java_4

Sistemas Informáticos

Necessidade de usarmos Tabelas Arrays


• Imaginemos que é necessário escrever um programa que: • Solução: utilizar tabelas (arrays)
– leia uma lista de 50 alunos e as respectivas notas.
• Uma tabela é um objecto que contém uma lista
– calcule a nota média.
ordenada de elementos, todos do mesmo tipo.
– escreva a diferença da nota de cada aluno para a nota média.
• Os elementos são indexados por um índice que pode
variar entre 0 e n-1, sendo n a dimensão da tabela.
• Seria necessário declarar variáveis separadas para cada um
dos 50 alunos:
String nome1, nome2, nome3, …, nome50
int nota1, nota2, nota3, …, nota50 43 22 77 12 89 23 66 25 99 46 77 39 24 27 11 87 ... 26
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 … n-1

Isto não é exequível!... length n

Exemplo Elementos dos Arrays


• Um elemento de uma tabela é um espaço onde se pode armazenar
• Para criar uma tabela:
um valor do tipo declarado.
– Declarar a tabela
double [] notas; // declara uma tabela de floats
• Os elementos de uma tabela podem ser usados em qualquer ponto
double notas[]; // o mesmo efeito... de um programa onde possa ser usado um elemento desse tipo.

– Instanciar a tabela (é necessário usar new para criar a tabela – Ex: notas [1] pode ser usado nas mesmas circunstâncias em que
porque as tabelas são objectos) uma variável do tipo double pode ser usada (podemos atribuir-lhe
notas = new double [50]; // cria uma tabela com 50 doubles um valor, imprimi-la, utilizá-la em expressões, …)

– Inicializar e aceder aos elementos


notas [0] = 14.7;
notas [1] = 10.2; notas[49] = 20.0;
...
soma = notas [0] + notas [1];
System.out.println(notas [0]);

1
Em resumo... Voltando ao problema...
• Declarar um array: class Notas {
int r[]; public static void main(String arg[]) {
double nums[]; final int MAX = 50;
String nomes[]; float [] notas = new float [MAX];
• Criar um array int conta = 0;
float n, media;
r = new int[10];
// leitura das notas (termina com nº negativo)
nums = new double[100]; do {
int s[] = new int[20]; System.out.print ("Nota do aluno "+conta+" ");
char c[] = new char[20]; n = Keyboard.readFloat();
• Indexar os elementos de um array: if (n >=0) {
r[0] = 20; notas [conta] = n;
r[9] = 100; conta ++;
}
nums[99] = 3.2;
}while (n >= 0 && conta < MAX);
s[0] = 5;
s[1] = r[0];

continuação... Criação de Tabelas

// cálculo da média • É possível criar e inicializar uma tabela de forma


float soma=0;
for (int i=0; i<conta; i++)
semelhante aos tipos simples:
soma = soma + notas[i];
if (conta > 0)
int diasMes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
media = soma / conta;
else media = 0;
System.out.println (media); – A tabela é criada com o espaço suficiente para os dados
fornecidos na inicialização (12 neste caso).
// Diferenças para a média
– Assim, a instrução anterior é equivalente a:
System.out.println ("Diferenças para a média:");
for (int i=0; i<conta; i++) int diasMes[] = new int [12];
System.out.println ("Aluno "+i+" "+(notas[i]-media)); diasMes [0] = 31;
}
diasMes [1] = 28;
}

diasMes [11] = 31;

Duas formas de criar tabelas Exemplo1


class Array {
int n[ ] = {10,34,48,35,5,7,3,8,6,12}; public static void main(String args[]) {
int month_days[];
month_days = new int[12];
month_days[0] = 31;
• Alternativamente: month_days[1] = 28;
month_days[2] = 31;
int n[] = new int[10]; month_days[3] = 30;
month_days[4] = 31;
n[0] = 10; month_days[5] = 30;
month_days[6] = 31;
n[1] = 34; month_days[7] = 31;
month_days[8] = 30;
... month_days[9] = 31;
month_days[10] = 30;
n[9] = 12; month_days[11] = 31;
System.out.println("April has " + month_days[3] + " days.");
}
}

2
Exemplo2 3 Exercícios Simples
class AutoArray {
• int tab[] = new int[100];
public static void main(String args[]) {
int month_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

System.out.println("April has " + month_days[3] + " days.");


• Escreva umas linhas de código para:
} (a) colocar os 100 primeiros inteiros (1,2,...,100)
} na tabela tab[0],...,tab[99];
(b) colocar os 50 primeiros números pares
(2,4,...,100) na tabela tab[0],...,tab[49];
(a) colocar os 100 primeiros inteiros em ordem
inversa (100, 99,...,1) na tabela tab[0],...,tab[99];

Tamanho de Arrays: length Exemplo


• Quando se cria uma tabela com n elementos, esse é o número máximo import essential.*;
que a tabela pode armazenar.
public class ArrayBound {
– Uma vez criada não é possível alterar o seu tamanho.
public static void main(String[] args){
– O campo length guarda o número máximo de elementos que a
tabela pode armazenar. Este campo apenas pode ser lido:
int numMax = notas.length; int x[] = new int[10];
for(int i=0; i <= 10; i++)
• Isto não implica que a tabela deva estar sempre cheia: x[i] = i;
– Em cada momento poderá conter entre 0 e n elementos }
– Um cuidado importante quando se usam tabelas é respeitar os }
limites para os índices (0 a n-1)
java.lang.ArrayIndexOutOfBoundsException
– A utilização de índices fora dos limites leva o Compilador de Java a at ArrayBound.main(ArrayBound.java:7)
gerar uma excepção: Exception in thread "main" Finished
executing
Java.lang.ArrayIndexOutOfBoundsException

Exemplo: uso de length Soma de dois Vectores


// A[n]
// This program demonstrates the length array member. // B[n]
class Length { // C = A + B
public static void main(String args[]) {
class SomaVectores{
int a1[] = new int[10]; public static void main(String args[]){
int a2[] = {3, 5, 7, 1, 8, 99, 44, -10}; int A[] = new int[10];
int a3[] = {4, 3, 2, 1}; int B[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int C[] = new int[10];


System.out.println("length of a1 is " + a1.length);
System.out.println("length of a2 is " + a2.length); // inicializar Vector A
System.out.println("length of a3 is " + a3.length); for(int i=0; i < 10; i++)
} A[i] = 100;
} for(int i=0; i < 10; i++){
C[i] = A[i] + B[i];
System.out.println("C["+i+"]= "+ C[i]);
}
}
}

3
Tabelas de Strings Exemplo
import essential.*;
• Uma tabela tanto pode conter elementos de um tipo simples, como referências para
class Tab_Strings {
outros objectos, como Strings por exemplo.
public static void main(String args[]) {
– String [] frases = new String [25]; int n;
 reserva espaço para 25 referências para objectos String. System.out.print("Numero de alunos = ");
– No entanto, esta instrução não cria as Strings propriamente ditas, mas apenas n = Keyboard.readInt();
as referências respectivas.
System.out.println("======INPUT DADOS=========");
String Tab[] = new String[n]; // aloca espaço para a tabela
– As Strings têm que ser criadas explicitamente: for(int i=0;i < n; i++){
frases [0] = new String (“Bom dia”); ou System.out.print("Nome do aluno "+i+" :");
Tab[i] = Keyboard.readLine(); // guarda strings na tabela
frases [1] = “Bom dia”; }
....
System.out.println("======NOMES=========");
for(int i=0;i < n; i++)
System.out.println("Nome do aluno "+i+" :"+ Tab[i]);
}
}

Matrizes

• Uma tabela bi-dimensional representa uma matriz, com


linhas e colunas.
• Cada elemento de uma tabela bi-dimensional é
Matrizes em Java referenciado usando dois índices: um para as linhas e
outro para as colunas.
• Na realidade, uma tabela bi-dimensional é uma tabela
de tabelas, ou seja é uma tabela uni-dimensional em
que cada elemento é uma referência para um objecto
tabela.
• Exemplo:
int[ ][ ] twoD = new int[3][5];

Matrizes Inicialização de uma Matriz


• Por exemplo, imaginemos que precisamos de armazenar
as classificações de 200 alunos em 4 testes.
• Poderíamos usar:
float [][] notas = new float [200][4]; 1 2
– Neste caso os índices podem variar entre 0 e 199 e entre 0 e 3,
sendo errado tentar aceder a índices fora destas gamas.
3 4
– Para aceder a um dado elemento usam-se 2 índices:
  int[][] m = { {1,2}, {3,4} };
notas [0][0] = 14.3;
notas [199][3] = 10.2;
– Para saber a dimensão da tabela:
int numLinhas = notas.length;
int numColunas = notas [0].length;

4
Inicialização de Matrizes Representação Array 2D
• É possível criar e inicializar uma tabela bi- 101 int n = 0;
dimensional numa única instrução:
010 for(int i = 0; i < 3; i++)
int [] [] tabela = {{1,0,1}, {0,1,0}}
for(int j = 0; j < 5; j++)
– Esta instrução cria uma tabela de inteiros com duas
linhas e três colunas, inicializada com os valores dados twoD[i][j] = n++;

• Alternativa:
int A[][] = new int[n][m];
for(int i=0; i < n; i++)
for(int j=0; j < m;j++)
A[i][j] = i+j;

Exemplo1 Exemplo2
class Matrix { class AutoMatrix {
public static void main(String args[]) { public static void main(String args[]) {
double m[][]; double m[][] = {
{ 0, 0, 0, 0},
m = new double[4][4]; { 0, 1, 2, 3},
{ 0, 2, 4, 6},
m[0][0] = 1; { 0, 3, 6, 9},
m[1][1] = 1; };
m[2][2] = 1; System.out.println(m[0][0] +" "+ m[0][1] +" "+ m[0][2] +" "+ m[0][3]);
m[3][3] = 1; System.out.println(m[1][0] +" "+ m[1][1] +" "+ m[1][2] +" "+ m[1][3]);
System.out.println(m[2][0] +" "+ m[2][1] +" "+ m[2][2] +" "+ m[2][3]);
System.out.println(m[0][0] +" "+ m[0][1] +" "+ m[0][2] +" "+ m[0][3]); System.out.println(m[3][0] +" "+ m[3][1] +" "+ m[3][2] +" "+ m[3][3]);
System.out.println(m[1][0] +" "+ m[1][1] +" "+ m[1][2] +" "+ m[1][3]); }
System.out.println(m[2][0] +" "+ m[2][1] +" "+ m[2][2] +" "+ m[2][3]); }
System.out.println(m[3][0] +" "+ m[3][1] +" "+ m[3][2] +" "+ m[3][3]);
}
}

Matriz Identidade Somar duas matrizes

class IDMatrix { • Como somar duas matrizes:


public static void main (String args[]) { – A[n][m]
double[][] ID;
– B[n][m]
ID = new double[4][4]; – C=A+B
for (int row=0; row < 4; row++) {
for (int col=0; col < 4; col++) {
if (row != col) { 1000
ID[row][col]=0.0;
}
else { 0100
ID[row][col] = 1.0;

}
}
0010
}
} 0001

5
Soma de duas Matrizes Exercício
class SomaMatrizes{
public static void main(String args[]){
int A[][] = new int[10][3]; • Escreva um programa em Java para calcular
int B[][] = new int[10][3];
int C[][] = new int[10][3]; o mínimo e o máximo valor numa matriz.
// comentário…. inicializar Matriz A: A[i][j]= 1
// comentário…. inicializar Matriz B: B[i][j]= 2
for(int i=0; i < 10; i++)
for(int j=0; j < 3; j ++){
A[i][j] = 1;
B[i][j] = 2;
}

System.out.println("MATRIZ C");
for(int i=0; i < 10; i++){
for(int j=0; j < 3; j ++){
C[i][j]= A[i][j] + B[i][j];
System.out.print(C[i][j]+ " ");
}
System.out.println();
}
}
}

Matrizes 3D Exemplo
class threeDMatrix {
public static void main(String args[]) {
• Declaração de uma matriz tri-dimensional 10x10x10: int threeD[][][] = new int[3][4][5];
int Mat3D [][][] = new int[10][10][10]; int i, j, k;

for(i=0; i<3; i++)


for(j=0; j<4; j++)
for(k=0; k<5; k++)
threeD[i][j][k] = i * j * k;

for(i=0; i<3; i++) {


for(j=0; j<4; j++) {
for(k=0; k<5; k++)
System.out.print(threeD[i][j][k] + " ");
System.out.println();
}
System.out.println();
}
}
}

Soma de dois Cubos


class SomaCubos{
public static void main(String args[]){
int A[][][] = new int[10][3][5];
int B[][][] = new int[10][3][5];
int C[][][] = new int[10][3][5];

for(int i=0; i < 10; i++)


for(int j=0; j < 3; j++)
for(int k=0; k < 5; k++){
Exercícios sobre Arrays e
A[i][j][k] = 1;
B[i][j][k] = 2;
}
Matrizes
System.out.println("CUBO C");

for(int i=0; i < 10 ; i++){


for(int j=0; j < 3; j++)
for(int k=0; k < 5; k++){
C[i][j][k] = A[i][j][k] + B[i][j][k];
System.out.print(C[i][j][k]+ " ");
}
System.out.println();
}
}
}

6
Exercício Problema Transporte
Uma empresa de betão tem 3 fábricas (F1, F2, F3) que devem
fornecer 3 obras de construção (O1, O2, O3). Os custos por
transporte de uma carga de cada fábrica para cada obra são os
representados na seguinte matriz:
O1 O 2 O3
F1  3 12 10 
F 2 17 18 35
Calcular a Média de Um Array e F 3  7 10 24

o Elemento mais distante da média


Considere agora que as 3 fábricas podem produzir 4, 12 e 8
cargas por dia e as obras precisam de 10, 9 e 5 cargas por dia,
respectivamente. Suponha agora que o gestor das fábricas propõe
o seguinte esquema de transporte representado na matriz
seguinte: O1 O 2 O3
F1  4 0 0 
F 2  6 6 0
F 3  0 3 5

Problema Transporte Exercício 1A

• Calcule o custo do esquema proposto. • Escreva um programa em Java que leia uma
Custo = 3x4 + 12x0 + ... + 24x5 matriz de um ficheiro em disco
“matriz.txt”.
• Escreva um programa em Java para calcular
o custo deste cenário de transporte. • O programa deve indicar se é uma matriz
identidade ou não.
4
1000
0100
0010
0001

Exercício 1B Exercício 2
• Escreva um programa em Java que verifique
• Escreva um programa em Java que leia duas
se uma matriz A[N][N] é ou não uma matriz
matrizes de dois ficheiros em disco
simétrica. 1 2 3 4
“mat_A.txt” e “mat_B.txt”.
2 5 6 7
• O programa deve indicar se as duas matrizes
3 6 9 0
são iguais ou diferentes. Se forem diferentes
4 7 0 3
deve indicar quantos são os valores
4 • Caso não seja uma matriz simétrica deve
diferentes. 4 4 1234 inverter a matriz da seguinte forma:
1234 1234 4557 1 2 2 2 1 5 5 5
4567 4567 7190 5 4 2 2 2 4 5 5
7890 7890 0123 5 5 4 2 2 2 4 5
0123 0123 5 5 5 4 2 2 2 4

7
Multiplicação de Matrizes Exercício
 x1 x2  y1 y 2
• A=  x3 x4 B=  y3 y 4 • Write a java program to multiply two matrices.
  

 x1 * y1 + x2 * y3 x1 * y 2 + x 2 * y 4 
• C=AxB= 
 x3 * y1 + x 4 * y3 x3 * y 2 + x4 * y 4

• Cij = ∑Aik x Bkj


k =1
5 = 1x5 + 2x0
com m igual ao número de colunas de A.

1 2 5 6  5 4
3 4 
 
x 0 −1
 
= 15 14
 

Número Par = Soma de dois


números primos
Ordenar uma Tabela

• Será que cada número par é igual à soma de dois • Considere que tem uma tabela de 10 inteiros
números primos? que é inicializada com valores aleatórios:
• Verifique com a tabela de primos em baixo (N >= 8 até 52)
n = new int[10];
• Exemplos: 12 = 5 + 7
// initialize the array
28 = ... + ...
40 = ... + ... for (int i = 0; i < 10; i++) {
52 = ... + ... n[i] = (int)(Math.random()*100);
}
• Escreva um programa para ordenar esta
int primes[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43}; tabela.

S-ar putea să vă placă și