A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Adaptado de material da profa. Maria Aparecida Livi

Apresentações semelhantes


Apresentação em tema: "Adaptado de material da profa. Maria Aparecida Livi"— Transcrição da apresentação:

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

2 Problema: Ler as 5 notas de 7 alunos (identificados por um número entre 0 e 6), calcular a média de cada aluno, e após imprimir as notas e médias dos alunos, classificados pela média. Quantas variáveis para armazenar as notas e as médias são necessárias para resolver este problema?

3 7 vetores (um por aluno), cada qual com 6 elementos (5 notas + média)
Resposta: 42 variáveis simples ou 7 vetores (um por aluno), cada qual com 6 elementos (5 notas + média)

4 Vários vetores de mesmo tipo --> matriz de vetores
6 5 7 Alunos = 7 vetores 4 3 2 1 1 2 3 4 5 5 Notas + Média = 6 elementos por vetor

5 notas, matriz bidimensional,
armazena para 7 ALUNOS, suas 5 NOTAS mais a MÉDIA 1 2 3 4 5 Representação espacial 1 2 Cada elemento desta matriz necessita de dois índices para ser especificado--> notas é portanto uma matriz bidimensional 3 5.4 4 5 6 notas[3] [1]

6 Outra forma de apresentação 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[6][0] notas[6][1] … notas[6][5] notas

7 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 dimensões.

8 Declaração 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

9 Arranjos bidimensionais em C
Primeiro índice : linha; Segundo índice : coluna.

10 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”, ¬as[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á automático caso MAXLIN e/ou MAXCOL sejam alterados.

11 Seja qual for o número de dimensões*
ATENÇÃO: Seja qual for o número de dimensões* os elementos de um arranjo são sempre de mesmo tipo! * (número de índices necessários para acessar um elemento da matriz = número de dimensões da matriz)

12 Leitura na matriz valores

13 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 1 2 9

14 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, &valores[i] [j]); i --> 0 j --> 1 valores[0] [1] <-- 5 1 2 9 5

15 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, &valores[i] [j]); i --> 0 j --> 2 valores[0] [2] <-- 7 1 2 9 5 7

16 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, &valores[i] [j]); i --> 0 j --> 3 (fim do for j) 1 2 9 5 7

17 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, &valores[i] [j]); i --> 1 j --> 0 valores[1] [0] <--11 1 2 9 5 7 11

18 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, & valores[i] [j]); i --> 1 j --> 1 valores[1] [1] <-- 4 1 2 9 5 7 11 4

19 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, & valores[i] [j]); i --> 1 j --> 2 valores[1] [2] <-- 1 1 2 9 5 7 11 4 1

20 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, & valores[i] [j]); i --> 1 j --> 3 (fim do for j) 1 2 9 5 7 11 4 1

21 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, &valores[i] [j]); i --> 2 j --> 0 valores[2] [0] <-- 6 1 2 9 5 7 11 4 1 6

22 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, & valores[i] [j]); i --> 2 j --> 1 valores[2][1] <-- 3 1 2 9 5 7 11 4 1 6 3

23 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, & valores[i] [j]); i --> 2 j --> 2 valores[2][2] <-- 2 1 2 9 5 7 11 4 1 6 3 2

24 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, & valores[i] [j]); i --> 2 j --> 3 (fim do for j) 1 2 9 5 7 11 4 1 6 3 2

25 Leitura da matriz valores Seja valores uma matriz 3 X 3 for (i=0;i<MAXLIN; i++) for (j=0;j <MAXCOL;j++) scanf(“%d”, & valores[i] [j]); i --> 3 j --> 0 (fim do for i) 1 2 9 5 7 11 4 1 6 3 2

26 Uso da matriz valores

27 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]); } i --> 0 j --> 0 valores[0] [0] --> 9 1 2 9 5 7 Linha 0 9 11 4 1 6 3 2

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]); } i --> 0 j --> 1 valores[0] [1] --> 5 1 2 9 5 7 Linha 0 9 5 11 4 1 6 3 2

29 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]); } i --> 0 j --> 2 valores[0] [2] --> 7 1 2 9 5 7 5 7 11 4 1 6 3 2

30 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]); } i --> 0 j --> 3 (fim do for j) 1 2 9 5 7 5 7 11 4 1 6 3 2

31 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]); } i --> 1 j --> 0 valores[1] [0] --> 11 1 2 9 5 7 7 Linha 1 11 11 4 1 6 3 2

32 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]); } i --> 1 j --> 1 valores[1] [1] --> 4 1 2 9 5 7 Linha 1 11 4 11 4 1 6 3 2

33 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]); } i --> 1 j --> 2 valores[1] [2] --> 1 1 2 9 5 7 11 4 1 11 4 1 6 3 2

34 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]); } i --> 1 j --> 3 (fim do for j) 1 2 9 5 7 11 4 1 11 4 1 6 3 2

35 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]); } i --> 2 j --> 0 valores[2] [0] --> 6 1 2 9 5 7 1 Linha 2 6 11 4 1 6 3 2

36 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]); } i --> 2 j --> 1 valores[2] [1] --> 3 1 2 9 5 7 Linha 2 6 3 11 4 1 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]); } i --> 2 j --> 2 valores[2][2] --> 2 1 2 9 5 7 6 3 2 11 4 1 6 3 2

38 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]); } i --> 2 j --> 3 (fim do for j) 1 2 9 5 7 6 3 2 11 4 1 6 3 2

39 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]); } i --> 3 j --> 0 (fim do for i) 1 2 9 5 7 6 3 2 11 4 1 6 3 2

40 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.

41 Verificação de validade das entradas
#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); Verificação de validade das entradas

42 //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" ); { printf("\n"); printf("%8d", amostra[i] [j]); } system("PAUSE");

43 Execução:

44 Exercício Faça um programa C que leia valores e preencha uma matriz 3x3 com valores inteiros entre 0 e 10, inclusive (notas de alunos) e indique: Quantas vezes a nota 9 aparece na matriz. Quantas vezes aparece cada nota?

45 Exemplo de solução #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); }

46 continuação // 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 total[ma[i][j]] = total[ma[i][j]] + 1; printf("\nnota %d: %d\n",i,total[i]); system("pause"); }

47 Exercício Faça um algoritmo que leia duas matrizes de tamanho 3 x 3. Em seguida, compare os valores das duas matrizes, nas respectivas posições, e mostre quais números são iguais nas duas matrizes, na mesma posição. Informe também a posição.

48 #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"); scanf("%d", &mb[i][j]); // comparacao entre as matrizes for (i=0;i<MAXLIN; i++) if (ma[i][j]==mb[i][j]) printf("\n%d na posicao %d,%d",ma[i][j],i,j); system("pause");

49 Exercício Faça um algoritmo que leia duas matrizes A e B de tamanho 4 x 4, conte e mostre quais dos valores que estão na matriz A também aparecem na matriz B, independente de sua posição na matriz B.

50 Exemplo de solução #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"); scanf("%d", &B[i][j]);

51 continuação // 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");


Carregar ppt "Adaptado de material da profa. Maria Aparecida Livi"

Apresentações semelhantes


Anúncios Google