vamos ajudar desenvolver as tecnologias afim de termos um mundo melhjjbyvyvtvtctctiyvugohpoih4poinirenrjgporg98hrgherinrojorihjgpoirhgrhgiurgiueh9hgherheroijer9jnrj oinoijrkir
rmoinouininubbunihnonrnubjjlbh jh vehvheeh hb h jhbh09eieeujdjdkjdjkdoeweejejenendenenenehejeieee e
e
r
e
e
e
e
e
eçknjjbujjruheuyveygehvreiugerygehehehehehehehee
lefjbejbheuhbehbfjebfjebfjebfjeuv3rubuibe
jkb hkbeeeejejejeeejejbhbhbhbr
jjbjbjjrjrjrr r
r
r
r
rkbrurihrirjnrjjjjjjjjjjjjjjjjjjjjjjjjjjor, um mundo pocivel
vamos ajudar desenvolver as tecnologias afim de termos um mundo melhjjbyvyvtvtctctiyvugohpoih4poinirenrjgporg98hrgherinrojorihjgpoirhgrhgiurgiueh9hgherheroijer9jnrj oinoijrkir
rmoinouininubbunihnonrnubjjlbh jh vehvheeh hb h jhbh09eieeujdjdkjdjkdoeweejejenendenenenehejeieee e
e
r
e
e
e
e
e
eçknjjbujjruheuyveygehvreiugerygehehehehehehehee
lefjbejbheuhbehbfjebfjebfjebfjeuv3rubuibe
jkb hkbeeeejejejeeejejbhbhbhbr
jjbjbjjrjrjrr r
r
r
r
rkbrurihrirjnrjjjjjjjjjjjjjjjjjjjjjjjjjjor, um mundo pocivel vamos ajudar desenvolver as tecnologias afim de termos um mundo melhjjbyvyvtvtctctiyvugohpoih4poinirenrjgporg98hrgherinrojorihjgpoirhgrhgiurgiueh9hgherheroijer9jnrj oinoijrkir
rmoinouininubbunihnonrnubjjlbh jh vehvheeh hb h jhbh09eieeujdjdkjdjkdoeweejejenendenenenehejeieee e
e
r
e
e
e
e
e
eçknjjbujjruheuyveygehvreiugerygehehehehehehehee
lefjbejbheuhbehbfjebfjebfjebfjeuv3rubuibe
jkb hkbeeeejejejeeejejbhbhbhbr
jjbjbjjrjrjrr r
r
r
r
rkbrurihrirjnrjjjjjjjjjjjjjjjjjjjjjjjjjjor, um mundo pocivel vamos ajudar desenvolver as tecnologias afim de termos um mundo melhjjbyvyvtvtctctiyvugohpoih4poinirenrjgporg98hrgherinrojorihjgpoirhgrhgiurgiueh9hgherheroijer9jnrj oinoijrkir
rmoinouininubbunihnonrnubjjlbh jh vehvheeh hb h jhbh09eieeujdjdkjdjkdoeweejejenendenenenehejeieee e
e
r
e
e
e
e
e
eçknjjbujjruheuyveygehvreiugerygehehehehehehehee
lefjbejbheuhbehbfjebfjebfjebfjeuv3rubuibe
jkb hkbeeeejejejeeejejbhbhbhbr
jjbjbjjrjrjrr r
r
r
r
rkbrurihrirjnrjjjjjjjjjjjjjjjjjjjjjjjjjjor, um mundo pocivel vamos ajudar desenvolver as tecnologias afim de termos um mundo melhjjbyvyvtvtctctiyvugohpoih4poinirenrjgporg98hrgherinrojorihjgpoirhgrhgiurgiueh9hgherheroijer9jnrj oinoijrkir
rmoinouininubbunihnonrnubjjlbh jh vehvheeh hb h jhbh09eieeujdjdkjdjkdoeweejejenendenenenehejeieee e
e
r
e
e
e
e
e
eçknjjbujjruheuyveygehvreiugerygehehehehehehehee
lefjbejbheuhbehbfjebfjebfjebfjeuv3rubuibe
jkb hkbeeeejejejeeejejbhbhbhbr
jjbjbjjrjrjrr r
r
r
r
rkbrurihrirjnrjjjjjjjjjjjjjjjjjjjjjjjjjjor, um mundo pocivel vamos ajudar desenvolver as tecnologias afim de termos um mundo melhjjbyvyvtvtctctiyvugohpoih4poinirenrjgporg98hrgherinrojorihjgpoirhgrhgiurgiueh9hgherheroijer9jnrj oinoijrkir
rmoinouininubbunihnonrnubjjlbh jh vehvheeh hb h jhbh09eieeujdjdkjdjkdoeweejejenendenenenehejeieee e
e
r
e
e
e
e
e
eçknjjbujjruheuyveygehvreiugerygehehehehehehehee
lefjbejbheuhbehbfjebfjebfjebfjeuv3rubuibe
jkb hkbeeeejejeje
Introdução à programação de computadores com vetores e matrizes
1. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
1
Tipos Estruturados
Tipos estruturados, são tipos definidos pelo usuário, em função de outros tipos já
conhecidos. Os tipos conhecidos podem ser tipos básicos da linguagem ou outros
tipos definidos anteriormente pelo usuário.
Existem duas variantes de tipos estruturados:
• Tipos homogêneos, onde todos os elementos são do mesmo tipo.
• Tipos heterogêneos, onde cada elemento pode ser de um tipo diferente.
Vetores
Vetores (arrays em ingles) são tipos homogêneos, isto é; formados por um conjunto
de elementos, onde todos os elementos do conjunto são de um mesmo tipo.
Variáveis do tipo Vetor
Varáveis vetores, ou simplesmente vetores, são conjuntos de variáveis de um
mesmo tipo, onde cada variável pode armazenar uma informação diferente, mas
todas compartilham o mesmo nome.
Ex: lista de alunos João, Maria, Carlos, Paula, . . .
Para identificar cada um dos elementos do vetor utiliza-se a posição, ou ordem, do
elemento dentro do conjunto;
Ex: 1º é o João, 2º é a Maria, 3º é o Carlos, 4º é a Paula, . . .
2. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
2
A ordem, ou número de cada posição do vetor é chamado de índice, assim:
João é índice 1, Maria é índice 2, Carlos é índice 3, . . .
Podemos imaginar que na memória do computador o vetor tenha mais ou menos a
seguinte forma:
J o ã o M a r i a C a r l o s
A declaração de um vetor para conter a lista de alunos, poderia ser da seguinte
forma:
caracter Alunos [20];
isto é; teremos um conjunto de vinte elementos do tipo caracter, onde cada
elemento conterá o nome de um aluno. Desta forma a referência a um aluno da
lista será realizada da seguinte forma:
Alunos [ 1 ] “João”;
Alunos [ 2 ] “Maria”; onde:
| | |
| | └ - - - - - - representa o valor do elemento
| └ -- - - - - - - - - - - - - - - - - representa o índice no vetor
└ - - - - - - - - - - - - - - - - - - - - - - - - - representa o vetor, a lista de alunos
Alunos
3. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
3
Exemplo: A representação de uma relação de alunos e suas notas, pode ser:
. . . . .
caracter Alunos [20];
real Notas [20];
. . . . .
Alunos [ 1 ] “João”; Notas [ 1 ] 8,5;
Alunos [ 2 ] “Maria”; Notas [ 2 ] 7,0;
Alunos [ 3 ] “Carlos”; Notas [ 3 ] 6,0;
. . . . .
Note que o mesmo índice é utilizado para acessar o nome no aluno e
sua nota, nos vetores Alunos e Notas respectivamente.
Exemplo: Imagine que seja desejado calcular a média das notas dos alunos:
inicio
real Notas [20];
real Media_Notas;
real Soma_Notas 0.0;
para i de 1 enquanto i = 20 passo i i + 1
faça
Soma_Notas Soma_Notas + Notas [ i ];
Fimpara
Media_Notas Soma_Notas / 20;
mostre Media_Notas;
fim
Observe que, para considerar as notas de todos os alunos no somatório das notas é
necessário manipular todos os elementos do vetor Notas.
4. A variável i, utilizada como índice do vetor, deve assim assumir todos os valores possíveis
para o índice do vetor. Sua utilização como variável de controle na estrutura para ... faça,
faz com que k assuma todos os valores desejados, isto é;
INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
4
i assumirá todos os valores desejados: 1, 2, 3, 4, 5, 6, .... , 18, 19 e 20.
Desta forma as notas de todos os alunos, 20 variáveis, podem ser representadas através do
vetor Notas e diferenciadas através do índice, isto é; de sua posição dentro do vetor.
Note que o algoritmo acima não tem a preocupação de como os nomes dos alunos e suas
notas são atribuídas aos vetores. Para mostrar a lista de alunos e suas notas podemos
utilizar o algoritmo abaixo:
inicio
real Notas [20];
caracter Alunos [20];
. . . . .
para i de 1 enquanto i = 20 passo i i + 1
faça
mostrar ( Alunos [ i ], Notas [ i ] );
Fimpara
. . . . .
Fim
O resultado da execução do algoritmo seria algo do tipo:
João 8,5
Maria 7,0
Carlos 6,0
5. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
5
Variáveis do tipo Matriz
Matrizes são tipos especiais de vetores, vetores multi-dimensionais, onde os
elementos podem ser acessados através de dimensões, 2 ou mais.
A matriz mais comum é a de duas dimensões (linha e coluna), por se relacionar
diretamente com a utilização de tabelas. Matrizes de 2 dimensões são mais comuns,
mas podem ser necessárias, em algum momento, matrizes de 3 ou mais dimensões.
Uma matriz de 2 dimensões estará sempre fazendo menção a linhas e colunas e
será representada por seu nome e tamanho. Dessa forma, uma matriz Tabela [3,4]
indica que tem 3 linhas e 4 colunas.
Matriz Tabela Colunas - - - - - - - - - - - - - - - - - - - - - - - -
↓
1 2 3 4
Linhas 1
- - - - - - 2 77
- - - - - - 3
A matriz acima pode ser declarada da seguinte forma:
inicio
int Tabela [ 3, 4 ]; // onde: 3 representa número de linhas
. . . . // 4 representa número de colunas
fim
O acesso a celula marcada, elemento da linha 2 coluna 3, tem a seguinte forma:
inicio
. . . .
Tabela [ 2, 3 ] 77; // linha 2, coluna 3
. . . .
fim
6. Desta forma podemos representar uma matriz, todos os seus elementos e todas
suas referências posicionais, da seguinte forma:
INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
6
A
a1,1 a1,2 a1,3
a2,1 a2,2 a2,3
a3,1 a3,2 a3,3
Um algoritmo para manipulação dos elementos da matriz poderia ter a forma:
inicio
int A [ 3, 3 ];
para i de 1 enquanto i = 3 passo i i + 1 faça
para j de 1 enquanto j = 3 passo j j + 1 faça
... use A [ i , j ] ....
Fimpara
Fimpara
fim
Note que o algoritmo acima possui duas estruturas repetítivas para ... faça, uma
interna a outra. A primeira estrutura, com a variável de controle i, é utilizada como
índice da linha da matriz, enquanto a segunda, com a variável de controle j, é
utilizada índice da coluna da matriz.
A dependência, ou aninhamento de estruturas repetitivas, significa que para todo
valor de i, estrutura externa, o valor de j, estrutura interna, assume todos os
valores possíveis, de 1 até 3.
assim:
Para i igual a 1, j assume os valores : 1, 2 e 3
Para i igual a 2, j assume os valores : 1, 2 e 3
Para i igual a 3, j assume os valores : 1, 2 e 3
7. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
7
Exemplo:
Supondo ser desejada uma matriz identidade, de dimensão 7 x 7, como mostrada:
A
1 0 0 ... 0
0 1 0 ... 0
0 0 1 ... 0
... ... ... ... ...
0 0 0 ... 1
solução
inicio
int NroLinhas 7;
int NroColunas 7;
int A [ NroLinhas, NroColunas ];
para i de 1 enquanto i = NroLinhas passo i i + 1
faça
para j de 1 enquanto j = NroColunas passo j j + 1
faça
se ( i == j ) então
A [ i , j ] 1;
senão
A [ i , j ] 0;
fimse
fimpara
fimpara
fim
8. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
8
Declaração e inicialização de matrizes
Eventualmente desejamos inicializar, ou atribuir valores iniciais a, uma matriz.
Linguagens diferentes, possuem formas diferentes de declaração e inicialização de
variáveis e matrizes, todavia podemos assumir alguns padrões em Portugol e
facilmente adequá-los a qualquer linguagem de programação real.
Por exemplo, a matriz identidade acima foi inicializada através de um algoritmo. Se
desejado, a mesma poderia ser inicializada das seguintes formas:
int A [ 5, 5 ] { {1,0,0,0,0}, {0,1,0,0,0}, {0,0,1,0,0}, {0,0,0,1,0}, {0,0,0,0,1} };
ou
int A [ 5, 5 ];
A[1,1] 1; A[1,2] 0; A[1,3] 0; A[1,4] 0; A[1,5] 0;
A[2,1] 0; A[2,2] 1; A[2,3] 0; A[2,4] 0; A[2,5] 0;
A[3,1] 0; A[3,2] 0; A[3,3] 1; A[3,4] 0; A[3,5] 0;
A[4,1] 0; A[4,2] 0; A[4,3] 0; A[4,4] 1; A[4,5] 0;
A[5,1] 0; A[5,2] 0; A[5,3] 0; A[5,4] 0; A[5,5] 1;
Note que são formas limitadas de inicialização e somente factíveis para matrizes de
dimensões reduzidas
Outra forma é inicializar uma matriz com valores aleatórios. O algoritmo abaixo
inicializa uma matrix 10 x 10 com valores aleatórios entre 0 e 999.
inicio
int A [ 10, 10 ];
para i de 1 enquanto i = 10 passo i i + 1 faça
para j de 1 enquanto j = 10 passo j j + 1 faça
A [ i , j ] Random(1000);
fimpara
fimpara
fim
9. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
9
Exercícios propostos
1. Faça um algoritmo que a partir de uma matriz M[6,6] e uma matriz N[6,6],
calcule a matriz resultante do produto de M por N.
2. Faça um algoritmo que leia uma valor A e multiplique por uma matriz M [6,6],
colocando o resultado em um vetor V[36].
3. Gere uma matriz X[M,N] com valores aleatórios menores que 10 e elabore
algoritmos para calcular a soma dos elementos de cada uma das área
hachuriada das matrizes abaixo:
4. A partir de uma matriz M [7,7], crie 2 vetores SL[7] e SC[7], que contenham
respectivamente as somas das linhas e das colunas de M.
5. A partir de uma matriz M[6,5], divida os 5 elementos de cada linha da matriz
pelo maior elemento de cada uma das 6 linhas. Coloque o resultado em uma
matriz S[6,5].
6. Escreva um algoritmo que a partir de uma matriz M[6,5], substitua todos os
elementos negativos da matriz pelo seu módulo.
10. 7. Escreva um algoritmo que a partir de uma matriz M[6,6], troque os elementos
da primeira coluna com os elementos da segunda coluna, os da terceira com a
quarta e os elementos da quinta coluna como os elementos da sexta coluna.
8. Repita o exercício anterior, trocando os elementos das linhas, ao invés das
INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
10
colunas.
9. A partir de uma matriz M[5,5], determina qual o maior valor da matriz e sua
posição na matriz.
10. Execute o algoritmo abaixo, preenchendo a matriz M[2,6].
1 2 3 4 5 6
- 7 5 3 - 4 4 0
inicio
int M [ 2, 6 ];
int fatorial;
para i de 1 enquanto i = 6 passo i i +1 faça
se ( M [ 1, i ] 0 ) então
fatorial 1;
para j de 1 enquanto j = M [ 1, i ] passo j j +1 faça
fatorial fatorial * j;
fimpara
M [ 2 , i ] fatorial;
senão
M [ 2 , i ] i * i;
fimse
M [ 2, i ] M [ 2 , i ] - 10;
fimpara
fim
11. INTRODUÇÃO a PROGRAMAÇÃO de COMPUTADORES
para CURSOS de ENGENHARIA e de AUTOMAÇÃO
Página
11
11. Considerando-se uma matriz X, de dimensões N x N.
X11, X12, X13, X14, ..., X1N
X21, X22, X23, X24, ..., X2N
X31, X32, X33, X34, ..., X3N
X41, X42, X43, X44, ..., X4N
. . . . . . . . . . . . ..., . . .
XN1, XN2, XN3, XN4, ..., XNN
Deseja-se utilizar da matriz X, os elementos enumerados abaixo e na ordem de mostrada:
X12, X13, X14, ..., X1N, X23, X24, ..., X2N, X34, ..., X3N, . . . . , XN-1N
o seguinte algoritmo pode ser utilizado:
para i de _1 enquanto _i N _ incremento _ ii+1 faça
para j de _i+1 _ enquanto _j = N _ passo _jJ+1 faça
uso de X [ i , j ]
fimpara
fimpara
Sustitua os itálicos do algoritmo acima para as sequências abaixo:
1. X2N, X3N-1, X3N, X4N-2, X4N-1, X4N, ...., XN2, XN3, XN4, ..., XNN
2. X21, X31, X32, X41, X32, X43, ...., XN1, XN2, XN3, ..., XNN-1
3. XN1, XN-11, XN2, XN-21, XN-12, XN3, ...., X11, X22, X33, ..., XNN
4. X11, X12, X21, X13, X22, X31, ...., X1N, X2N-1, X3N-2, ..., XN1
5. X22, X23, ..., X2N-1, X32, X33, ..., X3N-1, ...., XN-12, XN-13, ..., XN-1N-1
12. Uma matriz quadrada NxN, pode ser dividida em 4 matrizes quadradas
menores com N-1 linhas e colunas. Escreva um algoritmo para calcular a
matriz soma de tamanho 2x2, cujos elementos representam a soma dos
elementos de cada uma das matrizes N-1.
Soma [ i ] [ j ] = Somatório dos elementos de uma das matrizes N-1