Sunteți pe pagina 1din 12

PARTE 04

Estruturas de Dados ___________________________________________________


Nas sees anteriores, foi feita uma diviso imaginria (numrico, caractere e lgico) com o objetivo de tornar mais simples a classificao das informaes (dados) de um programa. No entanto, em muitas situaes esses recursos so escassos. Esta seo descreve novos tipos de dados que so construdos e organizados a partir da composio dos tipos primitivos vistos anteriormente. Esses novos tipos so conhecidos como Estrutura de Dados e so classificados da seguinte forma: Estrutura de Dados o Variveis Compostas Homogneas; Unidimensionais (Vetores); Multidimensionais (Matrizes). o Vriveis Compostas Heterogneas Registros

Esses novas variveis so descritas na sequncia desta seo.

4.1 - Variveis Compostas Homogneas So estruturas de dados compostas de variveis do mesmo tipo primitivo, como podem ser vistos nos exemplos abaixo: 3 8.5 7 5 C A Numrico Caracteres

A varivel o todo (ou seja, o conjunto). Cada termo da varivel chamado de elemento. Em ambos os exemplos, cada elemento tem o mesmo tipo primitivo (nmeros e caracteres). Da a denominao Homogneo. Uma string (cadeia de caracteres) uma varivel composta homognea. Os exemplos acima so variveis compostas unidimensionais (tambm chamadas de vetores). O exemplo abaixo tambm ilustra uma varivel composta homognea. No entanto, ela classificada como uma varivel composta multidimensional (conhecida como matriz). 29

1 5 7.5

0 2 3

4 1 1

O exemplo abaixo ilustra o exemplo de uma varivel composta que no classificada como homognea. C 3 5 1 L

4.1.1 Vetores (Variveis compostas homegneas unidimensionais) So estruturas de dados compostas de elementos do mesmo tipo primitivo e armazenados em matrizes linha ou coluna. O exemplo abaixo ilustra a criao de um vetor no MATLAB. Exemplo 01: >> A = (1:5) >> B = ones(1,10) >> C = zeros(1,5) O exemplo acima produz o seguinte vetor: 1 2 3 4 5

A seguir, mostrado outro exemplo para ilustrar o uso de vetores. Exemplo 02: >> % imprime o segundo elemento do vetor. 2 o ndice do vetor. >> disp(A(2)); >> % Alterando o terceiro elemento do vetor. >> A(3) = 10; for i = 1:1:10 A(i) = 2*i 1; end disp(A); 1, 3, 5, 7, 9, , 19

30

Mas para que servem os vetores? Os exemplos abaixo serviro para responder tal questo. Exemplo 03: % a) Clculo da mdia aritmtica de 10 notas soma = 0; for i = 1:1:10 x = input(Entre com a nota: ); soma = soma + x; end media = soma / 10; % b) Quais notas so maiores que a mdia? A1 = input(Nota 1: ); A2 = input(Nota 2: ); A3 = input(Nota 3: ); . . . A10 = input(Nota 10: ); media = (A1 + A2 + ... + A10) / 10; if( A1 > media ) disp( A1 ); end if( A2 > media ) disp( A2 ); end . . . Mas e se tivssemos 100 notas? A soluo acima seria invivel. O exemplo abaixo usa vetor para resolver o mesmo problema. Exemplo 04: Exemplo anterior usando vetores soma = 0; for i = 1:1:10 nota(i) = input(Entre c/ a nota: ); soma = soma + nota(i); end

31

media = soma / 10; for i = 1:1:10 if( nota(i) > media ) disp(nota(i)); end end Exemplo 05: Fazer um programa que leia, some e imprima o resultado da soma entre dois vetores de 10 posies. for i = 1:1:10 A(i) = input(valor armazenado no vetor A: ); B(i) = input(valor armazenado no vetor B: ); C(i) = A(i) + B(i); end disp( C ); Exemplo 06: Fazer um programa que preencha um vetor de 100 elementos colocando 1 na posio correspondente a um nmero par e 0 a um nmero mpar. for i = 1:1:100 if( mod(i,2) == 0 ) a(i) = 1; else a(i) = 0; end end disp(a); Exemplo 07: Seja o vetor V = {2, 6, 8, 3, 10, 9, 1, 21, 33, 14}. Seja tambm x = 2 e y = 4. V(x+1) V(x+2) V(x*4) V(V(x+y)) V(x+y) V(V(1)*V(4)) V(3) = 8 V(4) = 3 V(8) = 21 V(V(6)) = V(9) = 33 V(6) = 9 V(2*3) = V(6) = 9

Exemplo 08: Fazer um programa que leia um vetor de 10 posies e coloque-o em ordem crescente, utilizando a seguinte estratgia: Selecione o elemento do vetor que apresenta o menor valor; Troque este elementos pelo primeiro; Repita essas operaes envolvendo agora apenas os 19 elementos restantes, at restar um nico elemento.

32

for i = 1:1:10 a(i) = input(A: ); end for j = 1:1:10 % inicializacao menor = a(j); posicao = j; % selecionando oo menor for i = j:1:10 if( a(i) < menor ) menor = a(i); posicao = i; end end % troca aux = a(j); a(j) = menor; a(posicao) = aux; end Sobre o exemplo acima, as seguintes questes devem ser observadas: a) A varivel posio armazena a posio do menor valor; b) Uso de uma varivel auxiliar aux para fazer a troca de 2 nmeros.

4.1.2 - Variveis Compostas Multidimensionais (Matrizes) So estruturas de dados compostas de elementos do mesmo tipo primitivo e armazenados em formato matricial.

O Exemplo abaixo ilustra a diferena entre vetores e matrizes: Vetores o Um ndice (unidimensional) para endereamento A(1) = 3; A(2) = 7; Matrizes 33

o Dois ndices (bidimensional) para endereamento A(1,1) = 3; A(2,1) = 5; A(1,2) = 4; A(2,2) = 3; 1 5 4 3

Nesse exemplo, A uma matriz bidimensional 2x2; A uma varivel; Cada termo de A um elemento.

Para acessar um elemento de uma matriz precisamos de dois ndices. O primeiro ndice corresponde a linha da matriz; o segundo coluna. A(i,j) linha i, coluna j >> A(3,4) = 2; Aqui, o valor 2 atribudo ao elemento correspondente a linha 3, coluna 4 da matriz A. 1 1 2 3 2 3 4

Alguns detalhes devem ser obsevados: a) Uma matriz um conjunto de vetores; b) Para utilizarmos um vetor, manipulamos um nico lao de repetio; c) Para utilizarmos uma matriz, manipulamos tantos laos de repetio quanto forem suas dimenses (bidimensional = 2 laos; tridimensional = 3 laos, etc). Exemplo 09: Construir uma programa para ler duas matrizes, efetuar a sua soma e imprimir o resultado. for i = 1:1:5 disp(linha); disp(i); for j = 1:1:5 a(i,j) = input(a: ); b(i,j) = input(b: ); c(i,j) = a(i,j) + b(i,j);

34

end end disp(c); 4.1.3 - Exerccios Exerccio 01: Construir um programa para ler uma matriz e calcular a sua transposta. for i = 1:1:5 for j = 1:1:5 A(i,j) = input(A: ); end end for i = 1:1:5 for j = 1:1:5 B(i,j) = A(j,i); end end disp(B); Exerccio 02: Fazer um programa que leia os elementos de uma matriz 5x5 e escreva a soma dos elementos da diagonal principal. for i = 1:1:5 for j = 1:1:5 A(i,j) = input(A: ); end end soma = 0; for i = 1:1:5 soma = soma + A(i,i); end disp(soma); Exerccio 03: Fazer um programa que calcule o produto de 2 matrizes. A = 3x2 B = 2x4 for i = 1:1:3 for j = 1:1:2 A(i,j) = input(A: ); end end 35

for i = 1:1:2 for j = 1:1:4 B(i,j) = input(B: ); end end for i = 1:1:3 for j = 1:1:4 C(i,j) = 0; for k = 1:1:2 C(i,j) = C(i,j) + A(i,k) * B(k,j); end end end

4.1.4 - Varveis Compostas Heterogneas (Registros) So variveis compostas por diferentes tipos primitivos (Veja os exemplos abaixo). Heterognea Homognea Exemplo: Passagem de nibus Formada por um conjunto de informaes logicamente relacionadas, mas de tipos diferentes. Nmero da passagem (numrico); Origem e Destino (caracteres); Data (caracteres); Horrio (numrico); Poltrona (numrico); Distncia (numrico); Fulmante (lgico: verdadeiro ou falso). (1, 2, Carro, Alagoas, 3.55) (0, 4, 30, 20)

Campos da varivel

Alguns detalhes que devem ser observados: a) Varivel do tipo registro: passagem de nibus; b) Cada campo do registro deve possuir um nome associado a ele. Exemplo 01: % criando um registro (varivel) chamado de B B = { }; % criando os campos da varivel B e atribuindo valores a eles B.marca = Fiat;

36

B.tipo = Palio; B.cor = Preto; B.ano = 2004; B.placa = xyw1030; disp(B); Exemplo 02: Fazer um programa para ler informaes escolares de um aluno e armazen-los em um registro. Os dados do aluno so nome, idade, nmero da matrcula e srie que est cursando. Aluno = { }; Aluno.nome = input(Nome: , s); Aluno.idade = input(Idade: ); Aluno.matri = input(Matricula: ); Aluno.serie = input(Serie: ); disp(Aluno); E se ns desejamos armazenar informaes sobre vrios alunos? Isso pode ser feito a partir da composio (combinao) entre variveis compostas homogneas e heterogneas. registro 1 registro 2 registro 3 registro 4 Exemplo 03: for i = 1:1:4 aux = { }; aux.nome = input(Nome: ,s); aux.idade = input(Idade: ); aux.matri = input(Matricula: ); aux.serie = input(Serie: ); aluno(i) = aux; end for i = 1:1:4 disp(aluno(i)); end 1 2 3 registro 1 registro 2 registro 3 4 registro 4

37

4.1.5 Exerccios Exerccio 01: Fazer um programa que leia 5 nmeros e armazene-os em um vetor. Criar um outro vetor contendo os nmeros mltiplos de 3. Imprim-los. for i = 1:1:5 v(i) = input(Entre com o valor: ); end j = 0; for i = 1:1:5 if( mod(v(i),3) == 0 ) j = j + 1; w(j) = v(i); end end % nao existe multiplos de 3 if( j == 0 ) disp(Nao existe multiplos de 3!); else disp(w); end Exerccio 02: Fazer um programa que leia um vetor A com 5 elementos e construa um vetor B da seguinte forma: Ex.: A = (3, 8, 4, 2, 5) B = (9, 4, 2, 1, 15); for i = 1:1:5 A(i) = input(Entre com A: ); end for i = 1:1:5 if( mod(A(i),2) == 0 ) B(i) = A(i) / 2; else B(i) = 3*A(i); end end disp(B); Exerccio 03: Fazer um programa que leia 2 matrizes 2x3 e calcule uma terceira matriz dada pela expresso R = 2*At-Bt. for i = 1:1:2

38

for j = 1:1:3 A(i,j) = input(A: ); end end for i = 1:1:2 for j = 1:1:3 B(i,j) = input(A: ); end end for i = 1:1:2 for j = 1:1:3 AT(j,i) = A(i,j); BT(j,i) = B(i,j); end end for i = 1:1:3 for j = 1:1:2 R(i,j) = 2*AT(i,j) BT(i,j); end end disp( R ); Exerccios 04: Fazer um programa para ler e armazenar informaes sobre n alunos. As informaes so: nome, mdia, aprovado (S ou N) e sexo (M ou F). Pede-se ainda para imprimir o nmero de mulheres aprovadas. n = input(Numero de alunos); for i = 1:1:n aluno = { }; aluno.nome = input(Nome: , s); aluno.media = input(Media: ); aluno.aprov = input(Aprovado (S/N): , s); aluno.sexo = input(Sexo (M/F): , s); turma(i) = aluno; end num = 0; for i = 1:1:n if( turma(i).aprov == S ) if( turma(i).sexo == F ) num = num + 1; end end

39

end disp( num );

40

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