Académique Documents
Professionnel Documents
Culture Documents
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)
A
ve lun
to os
re =
s
6
5
4
3
2
1
0
0
0
1
2
3
5.4
4
5
6
notas[3] [1]
5
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.
#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
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
12
Leitura da matriz
valores
i --> 0
j --> 0
valores[0] [0] <-- 9
0
0
1
2
13
Leitura da matriz
valores
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
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
i --> 0
j --> 3
(fim do for j)
0
0
1
2
16
Leitura da matriz
valores
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
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
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
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
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
i --> 2
j --> 1
valores[2][1] <-- 3
11
3
22
Leitura da matriz
valores
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
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
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
26
j --> 0
valores[0] [0] --> 9
0
11
}
Linha 0
9
i --> 0
27
Escrita da matriz
valores
i --> 0
11
}
Linha 0
9
5
j --> 1
28
Escrita da matriz
valores
j --> 2
valores[0] [2] --> 7
0
11
}
5
7
i --> 0
29
Escrita da matriz
valores
i --> 0
(fim do for j)
0
11
}
5
7
j --> 3
30
Escrita da matriz
valores
i --> 1
11
}
7
Linha 1
11
j --> 0
31
Escrita da matriz
valores
i --> 1
11
}
Linha 1
11
4
j --> 1
32
Escrita da matriz
valores
i --> 1
11
}
11
4
1
j --> 2
33
Escrita da matriz
valores
i --> 1
(fim do for j)
0
11
}
11
4
1
j --> 3
34
Escrita da matriz
valores
i --> 2
11
}
1
Linha 2
6
j --> 0
35
Escrita da matriz
valores
i --> 2
11
}
Linha 2
6
3
j --> 1
36
Escrita da matriz
valores
i --> 2
11
}
6
3
2
37
Escrita da matriz
valores
j --> 3
(fim do for j)
0
11
}
6
3
2
i --> 2
38
Escrita da matriz
valores
i --> 3
11
}
6
3
2
39
Programa exemplo:
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
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
46
Exerccio
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
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