Vous êtes sur la page 1sur 51

Arranjos

multidimensionais
(ou matrizes)
Adaptado de material da profa. Maria Aparecida Livi

Problema:
Ler as 5 notas de 7 alunos (identificados por
um nmero entre 0 e 6), calcular a mdia de
cada aluno, e aps imprimir as notas e mdias
dos alunos, classificados pela mdia.
Quantas variveis para armazenar as notas e as
mdias so necessrias para resolver este
problema?
2

Resposta:
42 variveis simples
ou
7 vetores (um por aluno), cada qual
com 6 elementos (5 notas + mdia)

Vrios vetores de mesmo tipo --> matriz de vetores

A
ve lun
to os
re =
s

6
5
4

3
2

1
0
0

5 Notas + Mdia = 6 elementos por vetor

notas, matriz bidimensional,


armazena para 7 ALUNOS, suas 5 NOTAS mais a MDIA
0
Representao
espacial

0
1

Cada elemento desta


matriz necessita de dois
ndices para ser
especificado--> notas
portanto uma matriz
bidimensional

2
3

5.4

4
5
6
notas[3] [1]
5

Outra forma de apresentao de uma matriz bidimensional:

notas[0][0]

notas[0][1] notas[0][5]

notas[1][0]

notas[1][1] notas[1][5]

notas[2][0]

notas[2][1] notas[2][5]
.

notas

.
.
notas[6][0]

notas[6][1] notas[6][5]

Arranjo multidimensional
(ou matriz, tabela)
Um arranjo multidimensional o arranjo que
necessita de mais de um ndice para referenciar
seus elementos.
Ex.: arranjo bidimensional ou matriz de duas
dimenses.

Declarao de notas como matriz bidimensional:

#define MAXLIN 7
#define MAXCOL 6
float notas [MAXLIN] [MAXCOL];
Outra forma:
float notas[7][6];
Acesso a um elemento de Notas:
printf(%6.2f , notas[1] [MAXCOL - 1]);
linha
coluna

Arranjos bidimensionais
em C

Primeiro ndice : linha;

Segundo ndice : coluna.

Acesso a elementos determinados da matriz:


Primeira nota do primeiro aluno:
printf(Primeira nota do Primeiro Aluno: %6.2f, notas[0] [0]);
Primeira nota do terceiro aluno, ou seja, i = 2 j = 0:
scanf(%f, &notas[i] [j]);
ltima nota do ltimo aluno:
if (notas[6] [5] > 9.5)
...
ou, melhor:
if (notas[MAXLIN - 1] [MAXCOL - 1] > 9.5)
...
Pois,dessa forma, o ajuste dos ndices ser automtico
caso MAXLIN e/ou MAXCOL sejam alterados.
10

ATENO:
Seja qual for o nmero de dimenses*
os elementos de um arranjo so
sempre de mesmo tipo!
* (nmero de ndices necessrios para
acessar um elemento da matriz = nmero
de dimenses da matriz)

11

Leitura na matriz valores

12

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

Int valores [MAXLIN][MAXCOL];


for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
scanf(%d, &valores[i] [j]);

i --> 0
j --> 0
valores[0] [0] <-- 9

0
0

1
2
13

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 0
j --> 1
for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
valores[0] [1] <-- 5
scanf(%d, &valores[i] [j]);

1
2
14

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 0
j --> 2
for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
valores[0] [2] <-- 7
scanf(%d, &valores[i] [j]);
0
0

1
2
15

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 0
j --> 3

for (i=0;i<MAXLIN; i++)


for (j=0;j <MAXCOL;j++)
scanf(%d, &valores[i] [j]);

(fim do for j)

0
0

1
2
16

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1
j --> 0
for (i=0;i<MAXLIN; i++)
valores[1] [0] <--11
for (j=0;j <MAXCOL;j++)
scanf(%d, &valores[i] [j]);
0
0

11

2
17

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1
j --> 1
for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
valores[1] [1] <-- 4
scanf(%d, & valores[i] [j]);
0

2
7

11

18

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1
j --> 2
for (i=0;i<MAXLIN; i++)
valores[1] [2] <-- 1
for (j=0;j <MAXCOL;j++)
scanf(%d, & valores[i] [j]);
0

11

2
19

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1
for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
scanf(%d, & valores[i] [j]);

j --> 3
(fim do for j)

11

2
20

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 2
j --> 0
for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
valores[2] [0] <-- 6
scanf(%d, &valores[i] [j]);
0

11

6
21

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 2
j --> 1
valores[2][1] <-- 3

for (i=0;i<MAXLIN; i++)


for (j=0;j <MAXCOL;j++)
scanf(%d, & valores[i] [j]);

11

3
22

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 2
j --> 2
for (i=0;i<MAXLIN; i++)
valores[2][2] <-- 2
for (j=0;j <MAXCOL;j++)
scanf(%d, & valores[i] [j]);
0

11

2
23

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 2
for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
scanf(%d, & valores[i] [j]);

j --> 3
(fim do for j)

11

2
24

Leitura da matriz
valores

Seja valores uma matriz 3 X 3

i --> 3
j --> 0
for (i=0;i<MAXLIN; i++)
for (j=0;j <MAXCOL;j++)
scanf(%d, & valores[i] [j]);

(fim do for i)

11

2
25

Uso da matriz valores

26

Escrita dos elementos


da matriz valores

Seja valores uma matriz 3 X 3

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

j --> 0
valores[0] [0] --> 9
0

11

}
Linha 0
9

i --> 0

27

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 0

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

valores[0] [1] --> 5


0

11

}
Linha 0
9
5

j --> 1

28

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

j --> 2
valores[0] [2] --> 7
0

11

}
5
7

i --> 0

29

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 0

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

(fim do for j)
0

11

}
5
7

j --> 3

30

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

valores[1] [0] --> 11


0

11

}
7
Linha 1
11

j --> 0

31

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1

for (i=0; i< 3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

valores[1] [1] --> 4


0

11

}
Linha 1
11
4

j --> 1

32

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

valores[1] [2] --> 1


0

11

}
11
4
1

j --> 2

33

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 1

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

(fim do for j)
0

11

}
11
4
1

j --> 3

34

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 2

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

valores[2] [0] --> 6


0

11

}
1
Linha 2
6

j --> 0

35

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 2

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

valores[2] [1] --> 3


0

11

}
Linha 2
6
3

j --> 1

36

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 2

for (i=0; i<3; i++)


j --> 2
{
printf(\nLinha %d , i);
valores[2][2] --> 2
for (j=0; j <3; j++)
printf(\n%d, valores [i] [j]);
0

11

}
6
3
2

37

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

for (i=0; i<3; i++)


{
printf(\nLinha %d , i);
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);

j --> 3
(fim do for j)
0

11

}
6
3
2

i --> 2

38

Escrita da matriz
valores

Seja valores uma matriz 3 X 3

i --> 3

for (i=0; i<3; i++)


j --> 0
{
printf(\nLinha %d , i);
(fim do for i)
for (j=0; j <3; j++)
printf(\n%d, valores[i] [j]);
0

11

}
6
3
2

39

Programa exemplo:

Gerar uma matriz com valores inteiros


positivos (maiores que zero).
Achar e apresentar o maior valor da matriz.
Apresentar a matriz em formato matricial.

40

#include <stdio.h>
#include <stdlib.h>
#define MAXLINHAS 3
#define MAXCOLUNAS 3
main ( )
{
int amostra[MAXLINHAS][MAXCOLUNAS];
int i , j , maior;
// Leitura na matriz
for (i=0;i<MAXLINHAS; i++)
{
printf("Linha %d \n" , i + 1);
for (j=0;j <MAXCOLUNAS;j++)
do
{
scanf("%d", &amostra[i] [j]);
if (amostra[i] [j] < 1)
printf("Valores positivos > 0!\n");
}
while (amostra[i] [j] < 1);
}

Verificao
de validade
das entradas

41

//Trecho que acha o maior valor


maior = amostra[0] [0];
for (i=0;i<MAXLINHAS; i++)
for (j=0;j <MAXCOLUNAS;j++)
if (amostra[i] [j] > maior)
maior = amostra[i] [j];
printf("Maior valor da matriz: %d \n" , maior );
//Impressao da matriz em formato matricial
printf("\nMatriz em formato matricial\n" );
for (i=0;i<MAXLINHAS; i++)
{
printf("\n");
for (j=0;j <MAXCOLUNAS;j++)
printf("%8d", amostra[i] [j]);
printf("\n");
}
system("PAUSE");

42

Execuo:

43

Exerccio
Faa um programa C que leia valores e
preencha uma matriz 3x3 com valores
inteiros entre 0 e 10, inclusive (notas de
alunos) e indique:
1)Quantas vezes a nota 9 aparece na
matriz.
2)Quantas vezes aparece cada nota?

44

Exemplo de
soluo
#include <stdio.h>
#include <stdlib.h>
#define MAXLIN 3
#define MAXCOL 3
int main ( ){
int ma[MAXLIN][MAXCOL],mb[MAXLIN][MAXCOL],total[11];
int i , j, noves=0 ;
// leitura na matriz
for (i=0;i<MAXLIN; i++){
printf("Linha %d \n" , i);
for (j=0; j<MAXCOL; j++)
do {
scanf("%d", &ma[i][j]);
if (ma[i][j]<0 || ma[i][j]>10)
printf("numero invalido\n");
} while (ma[i][j]<0 || ma[i][j]>10);
}
45

continuao

// contagem de notas nove


for (i=0;i<MAXLIN; i++)
for (j=0; j<MAXCOL; j++)
if (ma[i][j]==9) noves=noves+1;
printf("\naparecem %d notas nove\n\n\n",noves);
// contagem de todas as notas
for (i=0;i<11;i++)
total[i]=0;
// inicializa com zero os totais
for (i=0;i<MAXLIN; i++)
for (j=0; j<MAXCOL; j++)
total[ma[i][j]] = total[ma[i][j]] + 1;
for (i=0;i<11;i++)
printf("\nnota %d: %d\n",i,total[i]);
system("pause");
}

46

Exerccio

Faa um algoritmo que leia duas matrizes de


tamanho 3 x 3. Em seguida, compare os
valores das duas matrizes, nas respectivas
posies, e mostre quais nmeros so iguais
nas duas matrizes, na mesma posio.
Informe tambm a posio.

47

#include <stdio.h>
#include <stdlib.h>
#define MAXLIN 3
#define MAXCOL 3
int main ( ){
int i, j, ma[MAXLIN][MAXCOL],mb[MAXLIN][MAXCOL];
// Leitura na matriz ma
printf("primeira matriz\n");
for (i=0;i<MAXLIN; i++){
printf("Linha %d \n" , i);
for (j=0; j<MAXCOL; j++)
scanf("%d", &ma[i][j]);
}
// Leitura na matriz mb
printf("segunda matriz\n");
for (i=0;i<MAXLIN; i++){
printf("Linha %d \n" , i);
for (j=0; j<MAXCOL; j++)
scanf("%d", &mb[i][j]);
}
// comparacao entre as matrizes
for (i=0;i<MAXLIN; i++)
for (j=0; j<MAXCOL; j++)
if (ma[i][j]==mb[i][j])
printf("\n%d na posicao %d,%d",ma[i][j],i,j);
system("pause");
}

48

Exerccio

Faa um algoritmo que leia duas


matrizes A e B de tamanho 4 x 4, conte
e mostre quais dos valores que esto
na matriz A tambm aparecem na
matriz B, independente de sua posio
na matriz B.

49

Exemplo de soluo

#include <stdio.h>
#include <stdlib.h>
#define MAXLIN 4
#define MAXCOL 4
int main ( ){
int i, j, k,l,ok,A[MAXLIN][MAXCOL],B[MAXLIN][MAXCOL];
// Leitura na matriz A
printf("primeira matriz\n");
for (i=0;i<MAXLIN; i++){
printf("Linha %d \n" , i);
for (j=0; j<MAXCOL; j++)
scanf("%d", &A[i][j]);
}
// Leitura na matriz B
printf("segunda matriz\n");
for (i=0;i<MAXLIN; i++){
printf("Linha %d \n" , i);
for (j=0; j<MAXCOL; j++)
scanf("%d", &B[i][j]);
50
}

continuao

// comparacao entre as matrizes


for (i=0;i<MAXLIN; i++)
for (j=0; j<MAXCOL; j++){
ok=0;
for (k=0;k<MAXLIN; k++){
if (ok==1) break;
for (l=0; l<MAXCOL; l++)
if (A[i][j]==B[k][l]){
printf("\n%d aparece nas duas matrizes",A[i][j]);
ok=1;
break;
}
}
}
system("pause");
}
51

Vous aimerez peut-être aussi