Universidade Federal de São Carlos Departamento de Computação “Introdução a Computação” Capítulo II Estruturas de Dados Mestrado em Ciência da Computação Sistemas Distribuídos e Redes Luanna Lopes Lobato [email protected] São Carlos – Maio 2006 Variáveis compostas Homogêneas • Possibilidade de acesso: – Variáveis; – Conjunto de dados agrupados. • Para calcular média da sala e informar quais alunos tem nota >= média: – Declarar num de variáveis = num de alunos – Impraticável • Utiliza-se Estruturas de Dados: – Vetores ou Matrizes Unidimensionais - Vetores • São posições de memória, de mesmo conteúdo, identificadas por um mesmo nome (identificador), individualizadas por índices; • Exemplo: – Conjunto de NOTAS: • Declaração: Var identificador: Array [Li..Ls] of tipo; • Exemplo: Vetor 10 20 30 40 50 60 70 80 40 60 1 2 3 4 5 6 7 8 9 10 Exemplo de atribuição • Var vetInt: Array[1..10] of integer; 10 20 30 40 50 60 70 80 40 60 1 2 3 4 5 6 7 8 9 10 • Var vetChar: Array[1..26] of char; A B C D V W X Y Z 1 2 3 4 ... 22 23 24 25 26 • Var vetStr: Array[1..15] of String[2]; aa bb cc dd vv ab cd ve dv 1 2 3 4 ... 11 12 13 14 15 Atribuição • Referência a todo vetor: Atribuição de um vetor para outro: – V1:=V2; {V1 mesmo tipo e tam de V2} • Referência a um único elemento do vetor: – Atribuição – Leitura – Uso de Expressões Referências ao Vetor • • • • • V1[5] := 2; {V1 vetor de inteiros} V1[2] := V1[1] + 10; V1[i+1] := V1[i+2]; {i>=0} read(V1[1]); write(V1[i]); • For i:=1 to N do begin read(V1[i]); write(V1[i]); end; Exercícios 1) Dada uma seqüência de n números, imprimi-la na ordem inversa à da leitura. 2) Fazer um programa que leia 50 valores inteiros, armazene-os em um vetor, calcule e imprima a média dos valores. 1/30 Resolução Exercício 2 Program calculaMedia; Uses crt; var i: integer; vetor: array [1..5] of integer; soma, media: real; begin clrscr; soma:=0; {Inicializa variavel com 0} {Leitura dos valores} for i:=1 to 5 do begin writeln('Informe o valor ', i); readln(vetor[i]); soma := soma + vetor[i]; {Soma os valores} end; {Calculo da media} media := soma/5; writeln('A media dos valores eh:', media:1:5); readln; end. Bidimensionais - Matrizes • Declaração: Var identificador: Array [Li..Ls, Li..Ls] of tipo; • Exemplo: Var Matriz: Array [1..5, 1..2] of integer; Matriz 1 15 25 30 11 15 2 10 20 30 40 50 1 2 3 4 5 Atribuição • Referência a toda matriz: Atribuição de uma matriz para outra: – M1:=M2; {M1 mesmo tipo e tam de M2} • Referência a um único elemento da matriz: – Atribuição – Leitura – Uso de Expressões 1/30 Referências • • • • • • M1[1,2] := 2; {M1 matriz de inteiros} M1[2,1] := M1[2,2] + 10; M1[i+1,j] := M1[i+2,j+1]; {i, j>=0} read(M1[1,3]); write(M1[i,j]); for i:=1 to N do for j:= 1 to M do begin writeln(‘Entre com M[’i,’,’,j,’]’); read(M1[i,j]); end; Exercícios 1) Dada uma matriz de tamanho 5 x 5, preencher a matriz com valores iguais a soma de suas posições e imprimir o resultado. 2) Ler 2 matrizes 5x4, calcular e escrever a matriz soma entre elas. 1/30 Resolução Exercício 2 Program somaMatrizes; Uses crt; Var i,j: integer; A, B, Soma: array [1..5, 1..4] of integer; Begin clrscr; {Lendo a Matriz A} for i:= 1 to 5 do for j:= 1 to 4 do begin writeln('Escreva valor de A[',i,',',j,']'); readln(A[i,j]); end; {Lendo a Matriz B} for i:= 1 to 5 do for j:= 1 to 4 do begin writeln('Escreva valor de B[',i,',',j,']'); readln(B[i,j]); end; writeln(' '); {Somando as matrizes} for i:= 1 to 5 do begin for j:= 1 to 4 do begin Soma[i,j]:= A[i,j] + B[i,j]; write(Soma[i,j]); {Imprime as linhas da matriz} end; writeln(' '); {pula linha para imprimir proxima linha} end; readln; end. Universidade Federal de São Carlos Departamento de Computação “Introdução a Computação” Capítulo II Estruturas de Dados Mestrado em Ciência da Computação Sistemas Distribuídos e Redes Luanna Lopes Lobato [email protected] São Carlos – Maio 2006 Exercício Fixação • Dadas duas matrizes reais Amxn e Bnxp, calcular o produto de A por B. program Produto; var m, n, nb, p, i, j, k: integer; Prod: real; A, B, C: array [1..50,1..50] of real; begin write ('Entre com o tamanho(mXn) da matriz A: '); readln(m,n); write ('Digite a matriz A: '); for i:=1 to m do for j:=1 to n do read(A[i,j]); write ('Entre com o tamanho(nXp) da matriz B: '); readln(nb,p); if nb<>n then write('Nao existe o produto da matriz A por B!!') else begin write ('Digite a matriz B: '); for i:=1 to n do for j:=1 to p do read(B[i,j]); i := 1; while i<=m do begin j := 1; while j<=p do begin Prod := 0; for k:=1 to n do Prod := Prod + A[i,k]*B[k,j]; C[i,j] := Prod; j := j+1; Prod := 0 end; i := i+1 end; writeln ('Matriz A X B ='); for i:=1 to m do begin for j:=1 to p do write(C[i,j],' '); writeln end end