UNIVERSIDADE FEDERAL DE ITAJUBÁ – UNIFEI – CAMPUS ITABIRA
BAC004 – TÉCNICAS DE PROGRAMAÇÃO
Professores: Claudia, Denílson, Fabiana, Fernando, Juliano,
Natália, Raquel, Rodrigo, Sandro e Walter
Roteiro Prático Nº 9 – Matrizes
1) Objetivos:
Consolidar os conhecimentos na manipulação de matrizes em C++.
2) Livro texto:
ASCENCIO, A. F.G., CAMPOS, E.A.V. Fundamentos da Programação de Computadores (Algoritmos,
Pascal, C/C++ e Java). Editora: Prentice-Hall, 2008.
3) Fundamentação Teórica
Referência para consulta e estudos: Capítulo 6 do livro texto.
3.1) Matrizes
Assim como os vetores, as matrizes são variáveis que podem armazenar diferentes valores do mesmo tipo
sequencialmente. No entanto, as matrizes apresentam um arranjo bidimensional, diferentemente dos vetores que
são unidimensionais.
Definição formal: Uma matriz é uma variável composta homogênea bidimensional formada por uma sequência de
variáveis (células), todas com o mesmo tipo, com o mesmo identificador (nome de variável) e alocadas
sequencialmente na memória. O que distingue os valores armazenados por uma matriz são os índices de sua
localização na estrutura. Para a identificação de tais valores, usa-se um mapeamento por linhas e colunas.
Como exemplo da aplicação de matrizes, suponha que deseja-se fazer um mapa de sala das turmas de uma
escola. Em cada sala existem 5 filas cada uma com 6 mesas, totalizando uma capacidade de acomodar 30 alunos.
Para representar este arranjo em um algoritmo, seria possível utilizar uma matriz de 6 linhas e 5 colunas, definindo
30 células cada uma podendo armazenar o nome de um aluno.
1
2
3
4
5
6
Taty
Otto
Alison
Homer
July
Lúcio
Bia
Rafael
Aline
Iza
Ike
Marlos
Alan
Faby
Leo
André
Rita
Kelly
João
Theo
Maicon
Zulu
Marco
Miguel
Vitor
Ana
José
Jorge
Ilton
Alê
1
2
3
4
5
Declaração de matrizes em algoritmos e na linguagem de programação C++:
Algoritmo
C++
DECLARE nome[linhas,colunas] TIPO
tipo nome[linhas][colunas];
Exemplo:
DECLARE mapaSala[6,5] LITERAL
campo[20,30] NUMERICO
coefic[6,6] NUMERICO
Exemplo:
string mapaSala[6,5];
int campo[20][30];
float coefic[6][6];
As matrizes são alocadas sequencialmente na memória , sendo que suas células devem ser acessadas
referenciando-se uma linha e uma coluna. A seguinte declaração:
int mat[3][3];
Aloca a seguinte matriz na memória (observe que assim como os vetores, as matrizes têm o seu primeiro índice
de linha e coluna iniciados em 0):
0
linhas
1
2
0
1
2
colunas
É possível também fazer a inicialização das células da matriz ao alocá-la na memória. Para isto, basta na
declaração que se explicite o valor de todas as suas células. Isto é feito usando-se o código:
int mat[3][3] = {8, 3, 6, 7, 1, 4, 2, 5, 9};
linha 1
linha 0
linhas
linha 2
0
2
5
9
1
7
1
4
2
8
3
6
0
1
2
colunas
A inicialização das matrizes também pode ser feita através da leitura do teclado, permitindo que o usuário atribua
valores às suas células, conforme ilustra o exemplo:
Algoritmo
C++
Para i←0 até 2 faça
Inicio
Para j←0 até 2 faça
Inicio
Escreva “Insira o elemento da ”,i+1
“ª linha “, j+1, “ª coluna: “
Leia mat[i,j]
Fim
Fim
for (int i
{
for (int
{
cout<<
<<
cin >>
}
}
= 0; i <= 2; i++)
j = 0; j <= 2;j++)
“Insira o elemento da ”<< i+1
“ª linha, “<<j+1<<”ª coluna: ”;
mat[i][j];
TELA
Insira
Insira
Insira
Insira
Insira
Insira
Insira
Insira
Insira
o
o
o
o
o
o
o
o
o
elemento
elemento
elemento
elemento
elemento
elemento
elemento
elemento
elemento
da
da
da
da
da
da
da
da
da
1ª
1ª
1ª
2ª
2ª
2ª
3ª
3ª
3ª
linhas
linha,
linha,
linha,
linha,
linha,
linha,
linha,
linha,
linha,
1ª
2ª
3ª
1ª
2ª
3ª
1ª
2ª
3ª
coluna:
coluna:
coluna:
coluna:
coluna:
coluna:
coluna:
coluna:
coluna:
0
12
-11
52
1
-43
29
31
2
90
17
81
0
1
2
colunas
90
17
81
-43
29
31
12
-11
52
3.2) Acesso aos elementos de uma matriz
Uma vez que as células da matriz estão dispostas em linhas e colunas, para acessar o conteúdo de uma célula é
necessário especificar a qual linha e coluna da matriz a célula está associada. Para isto, basta usar o nome da
matriz seguido pelos índices da linha e da coluna (entre colchetes) , como no exemplo de escrita nas células:
mat[2][0] = 31;
mat[1][2] = 15;
mat[0][2] = -7;
linhas
0
31
5
9
1
7
1
15
2
8
3
-7
0
1
2
colunas
A leitura dos valores das células segue a mesma codificação:
Código
Tela
cout << mat[1][0] << endl;
cout << mat[0][0] << endl;
cout << mat[2][2] << endl;
7
8
9
3.3) Exemplos
As matrizes são a base de muitos procedimentos para manipulação e processamento de imagens em
computação, além de serem um poderoso instrumento matemático na solução de sistemas lineares, entre outros.
O algoritmo/programa a seguir pede ao usuário que preencha uma matriz 3x3 (3 linhas e 3 colunas) e imprime na
tela a soma dos elementos que compõem a diagonal principal desta matriz.
Algoritmo
Algoritmo
DECLARE mat[3,3], i, j, s NÚMERICO
Escreva “Preencha a matriz (3x3)”
Para i←0 até 2 faça
Inicio
Para j←0 até 2 faça
Inicio
C++
#include <iostream>
using namespace std;
int main()
{
int mat[3][3], i, j, s;
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
cout<< “Insira o elemento da ”<< i+1
<< “ª linha, “<<j+1<<”ª coluna: ”;
cin >> mat[i][j];
}
}
Escreva “Insira o elemento da ”, i+1
“ª linha “, j+1, “ª coluna: “
Leia mat[i,j]
Fim
Fim
s←0
Para i←0 até 2 faça
Inicio
s←s+mat[i,i]
Fim
Escreva “Soma dos elementos da
Diagonal = ”, s
Fim_Algoritmo
s = 0;
for (i = 0; i <= 2; i++){
s += mat[i][i];
}
cout << “Soma dos elementos da
diagonal” << s << endl;
system("PAUSE > null");
return 0;
}
Escrever um algoritmo/programa que calcule a soma de matrizes (mat3 = mat1 + mat2), onde mat1 e mat2 são
duas matrizes 3x3 que contém valores inseridos pelo usuário e mat3 também é uma matriz 3x3 que armazenará a
soma. Obs.: A soma de duas matrizes é dada pela soma dos valores armazenados nas células que têm a mesma
linha e coluna: mat3[i][j] = mat1[i][j] + mat2[i][j].
Algoritmo
Algoritmo
DECLARE mat1[3,3], mat2[3,3],
mat3[3,3], i, j NÚMERICO
C++
#include <iostream>
using namespace std;
int main() {
int mat1[3][3], mat2[3][3], mat3[3][3];
Escreva “Preencha a matriz 1”
Para i←0 até 2 faça
Inicio
Para j←0 até 2 faça
Inicio
cout << “Preencha a matriz 1” << endl;
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2;j++)
{
cout << “Insira o elemento da ”<< i+1
<< “ª linha, “<<j+1<<”ª coluna: ”;
cin >> mat1[i][j];
}
}
Escreva “Insira o elemento da ”,i+1
“ª linha “, j+1, “ª coluna: “
Leia mat1[i,j]
Fim
Fim
Escreva “Preencha a matriz 2”
Para i←0 até 2 faça
Inicio
Para j←0 até 2 faça
Inicio
cout << “Preencha a matriz 2” << endl;
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2;j++)
{
cout << “Insira o elemento da ”<< i+1
<< “ª linha, “<<j+1<<”ª coluna: ”;
cin >> mat2[i][j];
}
}
Escreva “Insira o elemento da ”,i+1
“ª linha “, j+1, “ª coluna: “
Leia mat2[i,j]
Fim
Fim
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
Para i←0 até 2 faça
Inicio
Para j←0 até 2 faça
Inicio
mat3[i,j] ← mat1[i,j] +
mat2[i,j]
Fim
Fim
mat3[i][j] = mat1[i][j] +
mat2[i][j];
}
}
cout << “Matriz resultante” << endl;
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
cout<< “mat3[“ << i+1 << “][” << j+1
<< “] = ” << mat3[i][j] << endl;
}
}
Escreva “Matriz resultante”
Para i←0 até 2 faça
Inicio
Para j←0 até 2 faça
Inicio
Escreva “mat3[“, i+1, “][”,
j+1, “] = ”, mat3[i,j]
Fim
Fim
Fim_Algoritmo
system ("pause > null");
return 0;
}
4) Roteiro:
a) Faça um programa que preencha uma matriz 4x4 com valores aleatórios e depois imprima os valores de
cada célula da matriz na tela.
b) Faça um programa que carregue uma matriz 3x3 e após isto permita ao usuário digitar valores para
verificar qual sua posição na matriz (linha e coluna) caso ele esteja na matriz, ou exiba uma mensagem
informando a inexistência do valor na matriz.
c) Faça um programa que carregue uma matriz 10x4 e armazene a soma dos elementos de cada linha em
um vetor de 10 posições. Depois imprima os valores deste vetor na tela.
Se der tempo faça também....
d) Faça um programa que carregue uma matriz 10x3 com a nota de 10 alunos em 3 provas e então
apresente um relatório mostrando para cada aluno (linha da matriz):
• A maior nota obtida entre as 3 provas;
• A nota média;
e) Faça um programa que carregue uma matriz 15x5 com números inteiros, calcule e mostre quais os
elementos da matriz que se repetem e quantas vezes cada um repete está repetido.
f)
Faça um programa que carregue uma matriz 5x5 com números inteiros e execute as seguintes trocas:
• O elemento da linha 3, coluna 2 pelo elemento da linha 2 coluna 4;
• A linha 1 pela linha 4;
• A coluna 3 com coluna 1;
Download

Roteiro 09 - bac004.xpg.com.br