Você está na página 1de 17

Linguagens de Programao

2009/2010
Estruturas de dados compostas em C#

LP 2009/20010
ajtavares@ipca.pt

ndice
1.

Variveis simples e variveis compostas

2.

Vector ou Array uni-dimensional

3.

Matriz ou Array bi-dimensional

4.

Array multidimensional

5.

Array de arrays

6.

Dimenses de arrays

7.

Enumeraes

8.

Registos ou Estruturas

LP 2009/20010
ajtavares@ipca.pt

Variveis simples e variveis compostas


Varivel simples


Funciona como uma caixa que armazena apenas um valor em cada


momento

O contedo da varivel vai sendo alterado ao longo da execuo do


programa

Ao longo da execuo do programa, os valores que a varivel vai


contendo tm de ser todos do mesmo tipo (i.e., o tipo de dados da
varivel)

As operaes que podem ser efetuadas sobre uma varivel so:




Declarao

Atribuio

Exemplos:

Utilizao

int umaVariavel;

varivel

int outravariavel;

umaVariavel = 5;
outraVariavel = umaVariavel;

LP 2009/20010
ajtavares@ipca.pt

Variveis simples e variveis compostas


Varivel composta


So construdas a partir do agrupamento de variveis simples

Uma varivel composta tem um nome que representa um conjunto de


variveis simples

Numa varivel composta, as operaes so efetuadas sobre os seus


elementos individuais, ou seja, as variveis simples

Se uma varivel composta resulta da juno de variveis simples do


mesmo tipo, temos um ARRAY (vector ou matriz)
int

Se uma varivel composta resulta da juno de


variveis simples de tipos diferentes,
temos um REGISTO

int
double
string

8 10 12

5
1.2
palavra

LP 2009/20010
ajtavares@ipca.pt

Array
Array ou vector-unidimensional


Um array uma estrutura de dados que possibilita o armazenamento


de vrios valores de um mesmo tipo

Cada valor armazenado numa unidade do array, acedido por um


ndice que indica a sua posio

Um array pode ser uni-dimensional VECTOR ou bi-dimensional MATRIZ




Se um array tem N elementos, os ndices dos seus elementos variam de 0 a N-1

A Dimenso de um ARRAY FIXA e no altervel (definida na declarao)

LP 2009/20010
ajtavares@ipca.pt

Array
Declarao:

tipoDados[] nomeArray = new tipoDados[dim];

tipoDados = tipo de dados dos elementos do array

new = comando que cria o array (em memria)

dim = dimenso do array (nmero de elementos do array)

int[] valores = new int[7];

LP 2009/20010
ajtavares@ipca.pt

Array
Declarao com inicializao:

tipoDados[] nomeArray = {v1,v2,v3,...,vn};

tipoDados = tipo de dados dos elementos do array

new = comando que cria o array (em memria)

v1..vn = valores iniciais do array (dimenso=n)

int[] valores = {3,5,6,5,3,1,1};

LP 2009/20010
ajtavares@ipca.pt

Array
Exemplo:
...
int[] v10 = new int[10];
int[] v20 = new int[20];
int i = 40;
int[] v;
...
switch(i) {
case 10: v = v10;

break;

case 20: v = v20;

break;

default: v = new int[i]; break;


}
...

LP 2009/20010
ajtavares@ipca.pt

Array
Operadores e operaes:


Tamanho do Array
nomeArray.Length;

Inserir valor no Array


nomeArray[posicao]= valor;

Usar valor do Array


int valor = nomeArray[posicao];

int soma = 0;

int maior = 0;

int x = valores.Lenght;

for(int i=0 ;i< valores.Lenght;i++)

for(int i=0 ;i< valores.Lenght;i++)

{
if(maior < valores[i])

maior = valores[i]

soma = soma + valores[i]


}

Console.WriteLine(Maior + maior);

LP 2009/20010
ajtavares@ipca.pt

Array
Exemplos

LP 2009/20010
ajtavares@ipca.pt

Array
Exemplos

LP 2009/20010
ajtavares@ipca.pt

Array
Exemplos
int[] f = new int[10];
f[0] = 0;
f[1] = 1;
for(int i = 2; i < 10; i++ )
f[i] = f[i-1]+f[i-2];
Excepo:
IndexOutOfRangeException
f[10] no existe

int[] f = new int[10];


f[0] = 0;
f[1] = 1;
for(int i = 2; i <= 10; i++ )
f[i] = f[i-1]+f[i-2]
LP 2009/20010
ajtavares@ipca.pt

Matriz ou Array bi-dimensional


Declarao:

tipoDados[,] nomeArray = new tipoDados[dimV,dimH]

dimV = nmero de linhas

dimH = nmero de colunas

Exemplos:
int[,] valores = new int[3,4];
//array multidimensional com 3 linhas e 4 colunas
int [,] valores = {{2,3},{3,4}};
//array multidimensional com 2 linhas e 2 colunas

LP 2009/20010
ajtavares@ipca.pt

Matriz ou Array bi-dimensional


Exemplos:

LP 2009/20010
ajtavares@ipca.pt

Matriz ou Array bi-dimensional


Exemplos:

emails.GetLength(0) e emails[0].Length so iguais

LP 2009/20010
ajtavares@ipca.pt

Matriz ou Array bi-dimensional


Exemplo preencher matriz com valores (i*j)
...
int[,] tab = new int[10,9];
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 9; j++)
{
tab[i,j] = i*j;
}
}
...

LP 2009/20010
ajtavares@ipca.pt

Matriz ou Array bi-dimensional


Exemplo soma dos elementos de uma matriz
...
int soma = 0;
int[,] tab = new int[10,9];
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 9; j++)
{
soma = soma + tab[i,j];
}
}
...

LP 2009/20010
ajtavares@ipca.pt

Array Multidimensional
Declarao:
tipoDados[,,,] nomeArray = new tipoDados[dim1,dim2,dim3,dim4];

Exemplo:
int [,,,] muitasDimensoes = new int[2,3,4,5];
//array multidimensional de dimenso 4

LP 2009/20010
ajtavares@ipca.pt

Array de Arrays de diferentes tamanhos


Jagged Array array de arrays de diferentes tamanhos


No uma matriz mas sim um array de arrays

um caso particular de um array bi-dimensional, mas com diferenas


ao nvel das colunas

Declarao:
tipoDados[][] nomeArray = new tipoDados[dim][]

int[][] vals = new int[3][];


vals[0] = new int[2];
vals[1] = new int[3];
vals[2] = new int[4];

LP 2009/20010
ajtavares@ipca.pt

Array de Arrays de diferentes tamanhos

LP 2009/20010
ajtavares@ipca.pt

10

Array de Arrays de diferentes tamanhos

LP 2009/20010
ajtavares@ipca.pt

Array de Arrays de diferentes tamanhos

LP 2009/20010
ajtavares@ipca.pt

11

Array de Arrays de diferentes tamanhos


public static void Main(string[] args){
int[][] p = new int[10][];
for(int i = 0; i < 10; i++)
p[i] = new int[i+1];
for(int i = 0; i < 10; i++)
{
p[i][0] = 1;
p[i][i] = 1;
for(int j = 1; j < i; j++)
p[i][j] = p[i-1][j-1]+p[i-1][j];
}
}
LP 2009/20010
ajtavares@ipca.pt

Array de Arrays de diferentes tamanhos


public static void Main(string[] args){
int[] dias_mes = {31,29,31,30,31,30,
31,31,30,31,30,31};
float[][] gastos = new float[12][];
for(int m = 0; m < 12; m++)
{
gastos[m] = new float[dias_mes[m]];
for(int d = 0; d < dias_mes[m]; d++)
gastos[m][d] = 0.0F;
}
}

LP 2009/20010
ajtavares@ipca.pt

12

Array de Arrays de diferentes tamanhos




Qualquer vector em C# tem a propriedade Length que indica o


nmero de elementos.

Esta propriedade pode ser usada pelo programa

...
for(int m = 0; m < dias_mes.Length; m++){
gastos[m] = new float[dias_mes[m]];
for(int d = 0; d < gastos[m].Length; d++)
gastos[m][d] = 0.0F;
}
...

LP 2009/20010
ajtavares@ipca.pt

Dimenses de Arrays
Length, Rank, GetLength(dimensao)


Estas propriedades permitem obter informao acerca do tamanho e


nmero de elementos dos Arrays independentemente de serem uni,
bi, multidimensionais, ou ainda, serem arrays de arrays (jagged
arrays)

Nmero total de elementos na tabela:


nomeTabela.Length

Nmero total de dimenses na tabela:


nomeTabela.Rank

Nmero de elementos na dimenso dim


nomeTabela.GetLength(dim)

LP 2009/20010
ajtavares@ipca.pt

13

Dimenses de Arrays

LP 2009/20010
ajtavares@ipca.pt

Dimenses de Arrays

LP 2009/20010
ajtavares@ipca.pt

14

Enumeraes
Enumeraes


Representam constantes simblicas de um tipo concreto

Internamente as Enumeraes so inteiros

LP 2009/20010
ajtavares@ipca.pt

Enumeraes

LP 2009/20010
ajtavares@ipca.pt

15

Registos
Registos ou Estruturas


Representam um tipo de dados composto, em que cada elemento


identificado por um nome (campo) e pode ser de tipo diferente dos
outros campos

LP 2009/20010
ajtavares@ipca.pt

Registos

Erro: em C#
complicado usar
arrays dentro de structs

LP 2009/20010
ajtavares@ipca.pt

16

Array de Registos

LP 2009/20010
ajtavares@ipca.pt

17

Você também pode gostar