Adaptado de material da profa. Maria Aparecida Livi

Slides:



Advertisements
Apresentações semelhantes
Programação de Computadores
Advertisements

Marco Antonio Montebello Júnior
Lógica e Estrutura de Dados Fundamentais Professor: Eduardo O. Teles
ICC – Matrizes Jorge Macêdo.
Análise de regressão linear simples: abordagem matricial
Adaptado de material da profa. Maria Aparecida Livi
Introdução a Programação
LINGUAGEM C.
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
Prof. Luis Otavio Alvares
Vetores (ou arranjos unidimensionais) adaptado de material da profa
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
AULA – Linguagem C – Vetores, Ponteiros Estruturas
UDESC - Prof. Juliano Maia
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
Vetores, Matrizes e Funções
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Estruturas de Dados Homogêneas Multidimensionais – Matrizes
Matrizes e Funções - Continuação
Fundamentos de Programação 1
Ponteiros.
VETORES, STRINGS E MATRIZES
Matrizes. 2MF. Matrizes e vectores Multi-dimensionais Não há limite para o número de dimensões de um vector São uma estrutura de dados homogênea multidimensional.
Revisão da Linguagem C.
Vamos agora aprender a utilizar estruturas.
O Portal do Estudante de Computação
Programação em Java Prof. Maurício Braga
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Estrutura de Dados Avançada
Vetores e Matrizes Laboratório de ICCN Marco Antonio Montebello Júnior
Introdução a Computação e Cálculo Numérico
PROGRAMAÇÃO ESTRUTURADA II
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Array multidimensional
Seminário 1: Revisão de C
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Aula 8: Array Professores: Sandro Rigo Túlio Bender.
7 Arrays.
Computação Eletrônica
Fundamentos de Programação
Vetores e Matrizes Ameliara Freire
Algoritmo e Programação
Linguagem de Programação
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Oficinas de Desenvolvimento de Software
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Programação I Aula 12 (Arrays Bidimensionais)
Algoritmos e Estruturas de Dados
Aula 5 - Exercícios Prof. Leandro M. Almeida.
Programação de Computadores I – Arquivos
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
PROGRAMAÇÃO II – PARTE 6 Profa. Maria Augusta Constante Puget.
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Estruturas Homogêneas – Vetores e Matrizes
Aula Prática 6 Vetores e Matrizes Monitoria
Profa. Mercedes Gonzales Márquez
1Unidade 06 - Matriz Algoritmos e Linguagens de Programação Matriz Prof.: Guilherme Baião S. Silva Adaptações Prof. Edwar Saliba Júnior Março de 2007.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Fundamentos de Programação 1 Slides C – Número 4 Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “vetores de números e de caracteres”
Fundamentos de Programação 1 Linguagem C Slides 03 – ‘Vetores’ Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “Vetores” 1.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C” 1.
Transcrição da apresentação:

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

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?

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)

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

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]

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

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.

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

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á automático caso MAXLIN e/ou MAXCOL sejam alterados.

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)

Leitura na matriz valores

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

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 0 1 2 1 2 9 5

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 0 1 2 1 2 9 5 7

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) 0 1 2 1 2 9 5 7

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 0 1 2 1 2 9 5 7 11

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 0 1 2 1 2 9 5 7 11 4

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 0 1 2 1 2 9 5 7 11 4 1

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) 0 1 2 1 2 9 5 7 11 4 1

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 0 1 2 1 2 9 5 7 11 4 1 6

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 0 1 2 1 2 9 5 7 11 4 1 6 3

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 0 1 2 1 2 9 5 7 11 4 1 6 3 2

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) 0 1 2 1 2 9 5 7 11 4 1 6 3 2

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) 0 1 2 1 2 9 5 7 11 4 1 6 3 2

Uso da matriz valores

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 0 1 2 1 2 9 5 7 Linha 0 9 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 Linha 0 9 5 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 5 7 11 4 1 6 3 2

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) 0 1 2 1 2 9 5 7 5 7 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 7 Linha 1 11 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 Linha 1 11 4 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 11 4 1 11 4 1 6 3 2

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) 0 1 2 1 2 9 5 7 11 4 1 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 1 Linha 2 6 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 Linha 2 6 3 11 4 1 6 3 2

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 0 1 2 1 2 9 5 7 6 3 2 11 4 1 6 3 2

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) 0 1 2 1 2 9 5 7 6 3 2 11 4 1 6 3 2

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) 0 1 2 1 2 9 5 7 6 3 2 11 4 1 6 3 2

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.

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

//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");

Execução:

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?

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); }

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"); }

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.

#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");

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.

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]);

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");