Sie sind auf Seite 1von 6

04/05/2012

Agenda Algoritmos e Lgica de Programao


Aula 10 Matrizes Prof. MSc Carlos Alberto Cocozza Simoni

Reviso sobre Vetores Matrizes

Declarao de Vetor Reviso sobre Vetores


<tipo_var> identificador [<qtde_pos>]; Onde:
tipo_var: o tipo das variveis que devem ser criadas. Ex.: int, char, float, entre outros
Isso significa que todos os elementos tem o mesmo tipo estrutura de dados homognea

identificador: o nome que ser utilizado para referenciar o conjunto de variveis qtde_pos: o nmero de variveis, ou de posies, que ser criado (tamanho do vetor)

04/05/2012

Observaes
A primeira posio do vetor tem ndice 0 A ltima posio do vetor tem ndice n-1 Na execuo do programa, no verificado se um acesso est dentro dos limites de um vetor Exemplo de vetor com 100 posies:
float Notas[100]
Posio Contedo 0 1 2 3 ... ... 96 97 98 99

Exerccio Operao entre Vetores


Dado dois vetores, A[5] e B [7], faa um programa em C que mostre todos os elementos comuns aos dois vetores
Posio A Posi o B 0 18 0 10.0 1 3.4 1 3.4 2 9.5 2 25.0 3 -4.5 4 10.1 3 -4.5 5 10.0 4 -12.8 6 12.8

6.5 9.5 7.0 6.4

8.4 6.2 7.1 6.5

Resposta: 10.0, 3.4, -4.5

Exerccio - Resoluo
#define T1 5 #define T2 7 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float V1[T1], V2[T2]; int i, j; for (i = 0; i < T1; i++) { printf("Informe os valores da primeira tabela: "); scanf("%f", &V1[i]); } for (i = 0; i < T2; i++) { printf("Informe os valores da segunda tabela: "); scanf("%f", &V2[i]); } for (i = 0; i < T1; i++) for (j = 0; j < T2; j++) if ( V1[i] == V2[j] ) printf (Encontrado valor %3.1f\n, V1[i]); system("PAUSE"); return 0; }

Matrizes

04/05/2012

Questo
Como tratar um conjunto grande de informaes que gostaramos que ficasse disponvel para reutilizar num programa, mas que eu tenha que tratar mais de uma dimenso? Exemplos:
Alunos e suas notas e mdias Fornecedores e seus preos de produtos

Definio de Matriz
Uma Matriz um tipo de dado utilizado para representar uma certa quantidade de variveis do mesmo tipo, semelhante ao Vetor, mas que podemos associar vrias dimenses Exemplo: uma lista de Fornecedores e os Preos de seus produtos (2 dimenses)
Posies 0 Forn 1 1 Forn 2 2 Forn 3 3 Forn 4 4 Forn 5 0 Prod 1 R$ 1.99 R$ 2.10 R$ 1.99 R$ 1.95 R$ 2.18 1 Prod 2 R$ 20.05 R$ 25.00 R$ 20.15 R$ 21.05 R$ 20.05 2 Prod 3 R$ 900.00 R$ 850.00 R$ 900.00 R$ 899.99 R$ 930.00 3 Prod 4 R$ 200.23 R$ 190.00 R$ 250.20 R$ 180.50 R$ 200.23

Declarao de Matriz
<tipo_var> identificador [<qtde1>] [<qtde2>]...; Onde:
tipo_var: o tipo das variveis que devem ser criadas. Ex.: int, char, float, entre outros
Isso significa que todos os elementos tem o mesmo tipo estrutura de dados homognea

Observaes iguais a do Vetor


A primeira posio de cada dimenso da matriz tem ndice 0 A ltima posio de cada dimenso da matriz tem ndice n-1 Na execuo do programa, no verificado se um acesso est dentro dos limites de uma matriz
Posies 0 Forn 1 1 Forn 2 2 Forn 3 3 Forn 4 4 Forn 5 0 Prod 1 R$ 1.99 R$ 2.10 R$ 1.99 R$ 1.95 R$ 2.18 1 Prod 2 R$ 20.05 R$ 25.00 R$ 20.15 R$ 21.05 R$ 20.05 2 Prod 3 R$ 900.00 R$ 850.00 R$ 900.00 R$ 899.99 R$ 930.00 3 Prod 4 R$ 200.23 R$ 190.00 R$ 250.20 R$ 180.50 R$ 200.23

identificador: o nome que ser utilizado para referenciar o conjunto de variveis qtde1/2/...: o nmero de variveis, ou de posies, que ser criado, para cada dimenso da matriz

04/05/2012

Exemplos
Na declarao:
float notas[30][3]; // Representa 30 alunos e 3 notas cada

Exemplos
Para andarmos na matriz, agora que temos mais de uma dimenso, um comando de repetio sozinho no possvel Temos que utilizar um comando de repetio para cada dimenso da matriz
1 Integr. 7.2 6.4 5.8 9.3 8.4 2 Prova 7.7 6.8 7.0 8.5 6.9

Nas operaes:
notas[0][0] = 1; scanf(%c, &letras[6][4]); media[3]=(notas[3][0]*0.2)+(notas[3][1]*0.2)+(notas[3][2]*0.6);
Posies 0 Aluno 1 1 Aluno 2 2 Aluno 3 3 Aluno 4 4 Aluno 5 0 Lista 7.0 6.6 8.1 7.5 8.4

Exemplo: uma matriz de duas dimenses, como o exemplo anterior das notas dos alunos
for ( i = 0; i < Alunos; i++) // Para cada Aluno for ( j = 0; j < Notas; j++) // Para cada Nota printf (\n Aluno %d Nota %d: %2.1f, i+1, j+1, notas[i][j]);

Comando Define
Utilizamos da mesma foram que em Vetor A declarao Define permite que coloquemos em um ponto s do programa os tamanhos das diferentes dimenses das tabelas Exemplo: Montarmos uma matriz com 3 notas para cada aluno
1. 2. 3.

Comando Define Exerccio


#define L 5 #define C 3 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float notas[L][C]; int i, j; for ( i = 0; i < L; i++) // Para cada Aluno for ( j = 0; j < C; j++) // Para cada Nota { printf("Informe nota %d do aluno %d: ", j+1, i+1); scanf("%f", &notas[i][j]); } for ( i = 0; i < L; i++) // Para cada Aluno { printf(\n\n Aluno %d , i+1); for ( j = 0; j < C; j++) // Para cada Nota printf (Nota %d: %2.1f , j+1, notas[i][j]); } printf(\n\n); system("PAUSE"); return 0; }

Lista Integrativa Prova

04/05/2012

Exerccio
Utilizando o problema anterior das Notas dos alunos, vamos assumir a seguinte frmula para calcular a mdia dos alunos, que ser colocada na posio 3 (4. elemento da coluna)
notas[i,3]=(notas[i][0]*0.2)+(notas[i][1]*0.2)+(notas[i][2]*0.6);
Posies 0 Aluno 1 1 Aluno 2 2 Aluno 3 3 Aluno 4 4 Aluno 5 0 Lista 7.0 6.6 8.1 7.5 8.4 1 Integr. 7.2 6.4 5.8 9.3 8.4 2 Prova 7.7 6.8 7.0 8.5 6.9 8.5 3 Mdias

Comando Define Exerccio


#define L 5 #define C 4 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float notas[L][C]; int i, j; for ( i = 0; i < L; i++) // Para cada Aluno for ( j = 0; j < C-1; j++) // Para cada Nota { printf("Informe nota %d do aluno %d: ", i+1, j+1); scanf("%f", &notas[i][j]); } for ( i = 0; i < L; i++) // Para cada Aluno { printf(\n\n Aluno %d , i+1); notas[i][3]=(notas[i][0]*0.2)+(notas[i][1]*0.2)+(notas[i][2]*0.6); for ( j = 0; j < C-1; j++) // Para cada Nota printf ( Nota %d: %2.1f , j+1, notas[i][j]); printf ( - Media: %2.1f, notas[i][3]); } system("PAUSE"); return 0; }

Linhas e Colunas Consideraes


Obter notas de um aluno ou obter as notas de um aluno referente a um tipo de nota
As linhas representam um aluno com sua notas As colunas representam as notas para um dos tipos de notas para todos os alunos
Posies 0 Aluno 1 1 Aluno 2 2 Aluno 3 3 Aluno 4 4 Aluno 5 0 Lista 7.0 6.6 8.1 7.5 8.4 1 Integr. 7.2 6.4 5.8 9.3 8.4 2 Prova 7.7 6.8 7.0 8.5 6.9 8.5 3 Mdias

Exerccio Operao entre Matrizes


Escreva um programa em linguagem C que estrutura 2 Matrizes com valores numricos; verifica qual o maior elemento, posio a posio, guardando o resultado em uma terceira Matriz. No final exibir os resultados obtidos

M1 0 1 2

0 3 17 4

1 -3 10

3 0 -3

M2 0 1 2

0 7 4 9

1 8 0 11

3 -5 2 -3

MR 0 1 2

0 7 17 9

1 0 11

3 2 -3

8 15

8 15

04/05/2012

Exerccio - Resoluo
#define L 3 #define C 3 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float m1[L][C], m2[L][C], m3[L][C]; int i, j; for ( i = 0; i < L; i++) // Para cada Linha for ( j = 0; j < C; j++) // Para cada Coluna { printf("Informe dois numeros para a posicao [%d][%d]: ", i, j); scanf("%f %f", &m1[i][j], &m2[i][j]); } for ( i = 0; i < L; i++) // Para cada Linha for ( j = 0; j < C; j++) // Para cada Coluna if ( m1[i][j] >= m2[i][j]) m3[i][j] = m1[i][j]; else m3[i][j] = m2[i][j]; for ( i = 0; i < L; i++) // Para cada Linha { printf (\n\n); for ( j = 0; j < C; j++) // Para cada Coluna printf("[%d][%d]: %3.1f", i, j, m3[i][j]); } system("PAUSE"); return 0; }

Dvidas?
Temas abertos

Das könnte Ihnen auch gefallen