Buscar

Aula7_TT214_Linguagem e Técnica de Programação I

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

TT214 – Linguagem e Técnica de 
Programação I 
1º Semestre – 2013 
Prof. Suelen Mapa de Paula 
 
1 
Aula 7 
Contatos 
 Suelen Mapa de Paula 
 suelenmapa@gmail.com 
 suelen@dca.fee.unicamp.br 
 
 Monitor: ??? 
2 
Ementa da aula 
 Matrizes Bidimensionais 
 Definições 
 Armazenando dados em uma matriz; 
 Lendo dados de uma matriz; 
 Verificação de limites; 
 Inicialização de matrizes; 
 Matrizes N-Dimensionais 
 Exercícios 
 Referências 
 
 
**Parte deste material foi baseado nas aulas do professor Guilherme Coelho, sob a 
autorização do mesmo. 
 
 
3 
Definição 
 Vimos nas aulas anteriores que a linguagem C é capaz de 
trabalhar com estruturas de dados chamadas vetores; 
 Vetor: é um conjunto de posições consecutivas de memória, 
identificadas por um mesmo nome, individualizadas por índices 
e cujo conteúdo é do mesmo tipo; 
 Exemplo: vetor de inteiros 
 
4 
 ... 
 int notas[10]; /* declara vetor de inteiros 
 * com 10 posições */ 
 notas[2] = 7; /* atribui o valor 7 à 
 * posição 3 do vetor */ 
 ... 
Definição 
 Uma matriz pode ser vista como um agrupamento de 
vários vetores. Ou até mesmo como vetores de 
vetores; 
 A capacidade de representação e manipulação de 
matrizes em um programa é muito útil em diversas 
aplicações, tais como: 
 Armazenamento de imagens, onde cada imagem pode ser 
considerada uma matriz de pixels; 
 Realização de cálculos envolvendo álgebra linear; 
 Armazenamento de dados de clientes; 
 ... 
 
 
 
5 
Definição 
 A forma mais simples de uma matriz é a bidimensional, 
que pode ser vista como uma organização de dados em 
uma “tabela” com um dado número de linhas e de 
colunas. 
 Mas também existem matrizes com mais dimensões. 
 
6 
Matrizes Bidimensonais 
 Correspondem às matrizes a que estamos acostumados a 
ver no ensino básico; 
 Exemplo: matriz bidimensional com NLIN linhas e NCOL 
colunas 
 
7 
#define NLIN 80 
#define NCOL 100 
 
int main() { 
 int m[NLIN][NCOL]; 
 
} 
• Neste exemplo, m é um vetor de elementos que, por sua vez, 
são vetores de valores do tipo inteiro. 
Matrizes Bidimensionais 
 Como declarar um tipo matriz bidimensional? 
 
8 
 
 tipo nome_da_matriz [NLIN] [NCOL]; 
 
linha coluna 
Exemplo: 
 float notas [3][6]; 
 char letras [6][100]; 
 int num [5][4]; 
Quando vamos preencher 
ou ler uma matriz em C, o 
índice mais à direita varia 
mais rapidamente que o 
índice à esquerda. 
Armazenando dados 
9 
#include<stdio.h> 
void main (){ 
 
float notas [3][2]; 
int l,c,cont; 
cont=1; 
for (l=0;l<3;l++){ 
 printf("Digite as notas do aluno %d: ",cont); 
 for (c=0;c<2;c++){ 
 scanf("%f",&notas[l][c]); 
 } 
 cont++; 
 } 
 
} 
 
Saída 
10 
Digite as notas do aluno 1: 5.0 6.0 
Digite as notas do aluno 2: 9.0 5.0 
Digite as notas do aluno 3: 4.0 10.0 
Lendo os dados 
11 
#include <stdio.h> 
void main(){ 
float notas [3][2] = {5.0, 6.0,9.0,5.0,4.0,10.0}; 
int l,c,cont; 
cont=1; 
 
 for (l=0;l<3;l++){ 
 printf("Notas do aluno %d: ",cont); 
 for (c=0;c<2;c++){ 
 printf("%.2f \t",notas[l][c]); 
 } 
 cont++; 
 printf("\n"); 
 } 
 
} 
Saída 
12 
Digite as notas do aluno 1: 5.0 6.0 
Digite as notas do aluno 2: 9.0 5.0 
Digite as notas do aluno 3: 4.0 10.0 
Verificação de limites 
13 
 Cabe ao programador garantir que os índices de uma 
matriz estão dentro da faixa permitida. 
 Lembre-se também: 
 Ao determinar o tamanho da matriz que armazena 
strings (variável do tipo char), temos que reservar 
espaço para o terminador nulo (\0). 
 Portanto, ao declarar o comprimento da string, ele 
deverá ser no mínimo um caracter maior que o 
tamanho da string que se pretende armazenar. 
 
 Ex: char matriz [2][4]={“FPI”, ”Lua”}; 
Inicialização 
 Da mesma forma que vetores unidimensionais, matrizes 
também podem ser inicializadas na própria declaração, 
com os valores colocados entre “{“ “}” e separados por 
vírgulas; 
 No entanto, é importante notar que cada elemento deste vetor 
também será um vetor, e deve ser inicializado como tal. E isso 
pode ser feito de várias maneiras 
 
 int m1[3][3] = { {0, 1, 2}, {3, 4, 5},{6, 7, 8} }; 
 
 
 char nomes [3][10] = {“Joao”,”Maria”,”Jose”}; 
 
14 
Valores correspondentes à 
primeira linha da matriz 
Valores correspondentes à 
segunda linha da matriz 
Valores correspondentes à 
terceira linha da matriz 
Por isso a definição de vetores de vetores! 
Exemplo de aplicação 
15 
 Exemplo de aplicação: soma de matrizes quadradas 
#include <stdio.h> 
 
#define N 20 
 
int main() { 
 int m1[N][N], m2[N][N], m3[N][N]; 
 int l, c, nlin, ncol; 
 
 printf("Entre com os num de linhas e colunas\n"); 
 scanf("%d %d",&nlin,&ncol); /* nlin e ncol < 20*/ 
 
 printf("Entre com os elementos da matriz 1\n"); 
 for (l=0; l < nlin; l++) //percorre linhas 
 for (c=0; c < ncol; c++) //percorre colunas 
 scanf("%d",&m1[l][c]); 
// continua 
Exemplo de aplicação 
16 
// continuação: 
 printf("Entre com os elementos da matriz 2\n"); 
 for (l=0; l < nlin; l++) //percorre linhas 
 for (c=0; c < ncol; c++) //percorre colunas 
 scanf("%d",&m2[l][c]); 
 
 /* soma as matrizes */ 
 for (l=0; l < nlin; l++) 
 for (c=0; c < ncol; c++) 
 m3[l][c] = m1[l][c] + m2[l][c]; 
// continua 
Exemplo de aplicação 
17 
// continuação: 
 /* imprime o resultado */ 
 printf("Resultado: \n"); 
 
 for (l=0; l < nlin; l++) { 
 for (c=0; c < ncol; c++) 
 printf("%2d ",m3[l][c]); 
 printf("\n"); 
 } 
 
 return 0; 
} 
Matrizes N-dimensionais 
 Pela definição, vimos que uma matriz bidimensional é um 
vetor cujos elementos são vetores de dados (inteiros, 
caracteres etc.); 
 Podemos estender esta definição para matrizes N-
dimensionais: 
 Tridimensionais: vetores cujos elementos são matrizes 
bidimensionais (vetores de vetores de dados); 
 
 
 
 Quadridimensionais ... 
 
 
18 
int main() { 
 int m[2][2][3] = {{{1, 2, 3}, {3, 2, 1}}, 
 {{5, 6, 7}, {8, 9, 9}}}; 
} 
Matrizes N-dimensionais 
19 
 Ilustração de uma matriz tridimensional: 
Fonte: http://goo.gl/RQwkQ 
Linearização de Matrizes 
 Algumas vezes desejamos armazenar matrizes de dados 
em vetores unidimensionais: 
 Esta é a forma como geralmente matrizes são armazenadas em 
memória; 
20 
Linearização de Matrizes 
 Sendo assim, como converter as coordenadas de uma matriz 
para a posição de um vetor? 
 Suponha uma matriz m bidimensional: 
 Com N_LIN linhas e N_COL colunas; 
 Dados são armazenados linha a linha (da linha 0 até a linha N_LIN-1) 
sequencialmente no vetor (como figura no slide anterior); 
 O elemento m[l, c] da matriz será armazenado na posição: 
 k = l*N_COL + c; 
 O elemento k do vetor corresponderá ao elemento m[l, c] da 
matriz, onde: 
 l = k / N_COL c = k % N_COL 
 21 
Linearização de Matrizes 
 Exemplo: N_LIN = 4, N_COL = 4 
 
22 
m[1, 1]  k = l*N_COL + c  k = 1*4+1 = 5 
k = 13: 
 l = k/N_COL = 13 / 4 = 3 
 c = k%N_COL = 13 % 4 = 1 
Exercícios 
ATENÇÃO: Os exercícios de número 1, 2 e 4 deverão ser entregues (em 
um arquivo .ZIP), via Teleduc, até o dia 04/10/2013. Um deles será sorteado 
e corrigido. A correção deste exercício, combinada com a correção dos 
exercícios solicitadosnos demais tópicos, terá nota equivalente a uma 
atividade do Susy. Estes exercícios devem ser feitos individualmente. 
 
1. Escreva um programa que receba do usuário as dimensões 
NUM_LIN e NUM_COL (não maiores que 20) e os dados 
de uma matriz bidimensional, e imprima a matriz transposta 
na tela. 
 
23 
Exercícios 
2. Escreva um programa que receba do usuário as dimensões 
NUM_LIN e NUM_COL (não maiores que 20) e os dados 
de uma matriz bidimensional, converta-a em um vetor e 
imprima na tela os valores armazenados neste vetor. 
 
3. Escreva um programa que leia as dimensões e os dados de 
duas matrizes bidimensionais (com não mais que 20 linhas e 
20 colunas) e imprima na tela o resultado da multiplicação 
destas duas matrizes. Caso as dimensões das duas matrizes 
não permitam a multiplicação, o usuário deverá ser 
notificado. 
 
 
24 
Exercícios 
4. Escreva um algoritmo que leia um inteiro N (0 ≤ N ≤ 100), 
correspondente a ordem de uma matriz M de inteiros, e 
construa a matriz de acordo com o exemplo abaixo. 
A cada inteiro lido como entrada, deve ser impresso a matriz correspondente, de 
acordo com o exemplo: 
25 
Referências 
 MIZRAHI, V. V., Treinamento em Linguagem C – Curso 
Completo – Módulo 1. 2a Edic ̧a ̃o, Pearson Makron Books, 
2005. 
26

Outros materiais