Buscar

Aula13 Matriz2011

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

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

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ê viu 3, do total de 43 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

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

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ê viu 6, do total de 43 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

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

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ê viu 9, do total de 43 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

Prévia do material em texto

1
ArranjosArranjosArranjosArranjos
•• 1 di ã•• 1 dimensão
•• várias dimensõesvárias dimensões
2
//Notas de um aluno
Ex: Ler e armazenar as 5 notas de um aluno. 
//Notas de um aluno
#include <stdio.h>
#define LIMITE 5
int main ( )( )
{
float notas[LIMITE]; // arranjo para as notas 
int indice; //variável de controle da repeticao ; p
...
//obtem as 5 notas do aluno 
for (indice = 0; indice < LIMITE ; indice++)( ; ; )
scanf (“%f”, &notas [indice]); 
...
return 0;;
}
0 1 2 3 4
7.5 8.2 9.1 6.5 8.7Notas 
E D l d t ??Ex: Dez alunos de uma turmaLer e armazenar as 5 notas de cada aluno. ??
3
ArranjosArranjosArranjosArranjos
•• 1 di ã•• 1 dimensão
•• várias dimensõesvárias dimensões
4Arranjo 2 dimensões Arranjo 2 dimensões ( Matriz)( Matriz)
Ex: Dez alunos de uma turma
Ler e armazenar as 5 notas de cada aluno.L m u .
alunos
0 1 2 3 4 5 6 7 8 9NotasNotas
float notas [10] [5];
0 1 2 3 4 5 6 7 8 9
0
NotasNotas
n
o
t
a
s
1 nota [7] [3]
2
3 8.5
4
5Arranjo 2 dimensões Arranjo 2 dimensões 
 
jj
Linguagem CLinguagem C
DeclaraçãoDeclaraçãoçç
< tipo > 
<identificador> [ numero elementos 1a dimensão ] [ num elementos 2a dimensão]
float notas [5] [10];
int x [10] [25];
Ex: Ex: 
int x [10] [25];
6Arranjo 2 dimensões Arranjo 2 dimensões 
 
jj
Linguagem CLinguagem C
UtilizaçãoUtilizaçãoçç
< nome do arranjo > [ < índice1adim>] [<índice2adim >] 
int main ( )
{ 
fl t t [5] [10]
Ex: Ex: 
float nota [5] [10]; 
scanf( “%f”, &nota [2] [3]);
t [1] [2] 7 5
nota [2] [1] = nota [1] [1] + 2 ;
nota [1] [2] = 7.5 ;
if (Nota [0] [1] > 6.0)
printf (“Aprovado”);
}
...
Arranjo 2 dimensões 
Linguagem CLinguagem C
Inicialização automática de um arranjo na Inicialização automática de um arranjo na 
declaração: vetores de vetores
Exemplos:
int x[2][3] = { {1,2,-1} , {2,0,3} };
char y[2][2] = { {‘a’,’h’} , {‘o’,’9’} };
char nomes[2][20]={“Jose” , ”Maria”};
8
Ex: Ler e armazenar as 5 notas de cada um dos alunos
de uma turma (10 alunos). 
Calcular e informar a média da 1a nota
Q t s l s t m 1a t s i st médi ?
//Processa notas de uma turma
#include <stdio.h> #define NALUNOS 10 #define NNOTAS 5 
int main ( )
Quantos alunos tem a 1a nota superior a esta média ?
int main ( )
{
float notas [ NALUNOS] [ NNOTAS] ; // matriz para as notas 
int a, n; // indices para as 2 dimensoes 
int cont; // contador de alunos 
for (a = 0; a< NALUNOS; a++) // para cada aluno 
for (n = 0; n < NNOTAS; n++) // obtem as 5 notas do aluno 
scanf (“%f” &notas[ a] [ n]);
float soma, media; // soma e media de notas 
;
scanf ( %f , &notas[ a] [ n]); 
// Calculo da media da primeira nota 
soma = 0;
for (a = 0; a< NALUNOS ; a++) 
soma = soma + notas [a] [0];soma = soma + notas [a] [0];
media = soma / NALUNOS;
printf(“Media da primeira nota: %6.2f”, media); 
// Conta quantos alunos tem 1a nota > media da primeira nota 
cont = 0;cont = 0;
for (a = 0; a < NALUNOS; a++)
if (notas [a] [ 0] > media)
cont++;
printf(“Numero de alunos : %d” cont)
return 0; 
}
printf( Numero de alunos ...: %d , cont) 
9Ex: Matriz inteira m (10, 3), já preenchida.Imprimir em forma de matriz! 0 1 2mm
0
1
...
for (linha = 0; linha < 10; linha++)
{
for (coluna = 0; coluna < 3; coluna++)
2
3
for (coluna 0; coluna < 3; coluna++)
printf( “%10d”, m[linha] [coluna]);
printf(“\n\n”);
} 3
4
}
...
Imprimir terceira coluna
5
6
...
for (linha = 0; linha < 10; linha++)
printf(“%10d”, m[linha] [2]); 
i f(“\ \ ”) 7
8
printf(“\n\n”);
...
Somar 2 em cada elemento da linha 7 8
9
Somar 2 em cada elemento da linha 7
...
for (coluna = 0; coluna < 3; coluna++)
m [7] [coluna] = m [7] [coluna] + 2;
...
10Ex: Duas turmas10 alunos em cada turma
5 notas para cada aluno5 notas para cada aluno
Ler e armazenar as notas de cada aluno.
float nt [2] [10] [5];
alunos
float nt [2] [10] [5];
nt [0][8][0]
1
0n
o
t
a
s
ntnt
0
0n
9.2
ntnt 0 1 2 3 4 5 6 7 8 9 
1
22
3
4
11Arranjo 3 dimensões Arranjo 3 dimensões –– Linguagem CLinguagem C
DeclaraçãoDeclaração
< tipo > <identificador> [ <num. elem. da 1ª dim. >] [< num. elem. da 2ª dim. >] [< num. elem. da 3ª dim. >]
çç
float nt [2] [10] [5];Ex: Ex: 
1a dimensão 3a dimensão
[ ] [ ] [ ];
2a dimensão
12Arranjo 3 dimensões Arranjo 3 dimensões –– Linguagem CLinguagem C
UtilizaçãoUtilizaçãoçç
- um índice para cada dimensão;
- respeitando a ORDEM da declaraçãorespeitando a ORDEM da declaração.
notasalunosturmas
float nt [2] [10] [5];
Ex: Ex: 
[ ] [ ] [ ];
referência
t [t ] [ l ] [ t ]
referência
nt [turma] [aluno] [nota] 
13Ex: 10 lojas
5 setores por lojap j
30 produtos por setor
12 meses
O arranjo armazena quantidade de itens de cada O arranjo armazena quantidade de itens de cada 
produto vendido em cada mês, por setor e por loja.
int quant_vend [11] [6] [31] [13];
loja setor produto mês
#define LOJA 11#define LOJA 11 
#define SETOR 6 
#define PRODUTO 31 
# define MÊS 13 
/*li t tid d did d d t 17/*listar quantidade vendida do produto 17 
em janeiro, em todos os setores da loja 6*/ 
for (set = 1; set<SETOR; set++)
i tf( “%4d” t d [6] [ t] [17] [1] )printf( “%4d”,quant_vend [6] [set] [17] [1] );
...
14Arranjo de “n” dimensõesArranjo de “n” dimensõesjj
UtilizaçãoUtilizaçãoçç
- um índice para cada dimensão
- respeitando a ORDEM da declaraçãorespeitando a ORDEM da declaração
turmasalunosnotas escolas
float nt [ 5] [10] [3] [2 ];Ex: Ex: 
referência
t [ t ] [ l ] [t ] [ l ]
referência
nt [nota] [aluno] [turma] [escola] 
15
Arranjo Bidimensional Arranjo Bidimensional ––Arranjo Bidimensional Arranjo Bidimensional 
Operações mais comunsOperações mais comuns
Dada uma matriz inteira m (TLINHA, TCOLUNA), 
preenchê la por leitura e imprimir:preenchê-la por leitura e imprimir:
a) o maior elemento de cada linha da matriz;
b) a média dos elementos de cada coluna;
c) o produto de todos os elementos diferentes de ) p u m f
zero;
d) quantos elementos são negativos;d) quantos elementos são negativos;
e) posição ocupada (linha-coluna) por um elemento 
cujo valor será lido pelo programacujo valor será lido pelo programa.
16a) o maior elemento de cada )
coluna da matriz:
for (coluna = 0; coluna <TCOLUNA; coluna++)
{{
maior = matriz[0] [coluna];
for (linha = 1; linha < TLINHA; linha++) for (linha = 1; linha < TLINHA; linha++) 
if (maior < matriz [linha] [coluna])
i i [li h ] [ l ]maior = matriz [linha] [coluna];
printf (“Maior da coluna %d = %d”, coluna, maior);
} 
17b) a média dos elementos de cada 
li hlinha:
for (linha = 0 ; linha < TLINHA ; linha++)
{
somacoluna = 0;somacoluna 0;
for (coluna = 0; coluna < TCOLUNA; coluna++)
l t i [li h ] [ l ]somacoluna += matriz [linha] [coluna];
media = (float) somacoluna /TCOLUNA;*
printf(“Media linha %d = %f”, linha, media);
} } 
* somacoluna e tcoluna sendo inteiros, para obter-se media como 
float fez-se um casting e somacoluna foi considerada float na 
expressão, como consequência o resultado da divisão também 
resultou float.
18c) produto de todos os elementos ) p
diferentes de zero:
produto = 1;p
for (linha = 0; linha < TLINHA ; linha++)
for (coluna = 0; coluna < TCOLUNA; coluna++)for (coluna = 0; coluna < TCOLUNA; coluna++)
if (matriz [linha] [coluna])
l lproduto = produto * matriz[linha][coluna] ;
printf (“Produto = %d”, produto );p ( p )
19d) quantos elementos são ) q
negativos:
i 0negativos = 0;
for (linha = 0; linha <TLINHA;linha++)
for (coluna = 0; coluna < TCOLUNA; coluna++)
if (matriz [linha] [coluna] < 0)if (matriz [linha] [coluna] < 0)
negativos++; 
i tf (“N d ti %d” ti )printf (“Numero de negativos = %d”, negativos);
20e) posição ocupada (linha-coluna) por p p p
um elemento cujo valor será lido:
scanf (“%d”, &valor);f ( , );
for (linha = 0; linha < TLINHA; linha++)
for (coluna = 0; coluna < TCOLUNA; coluna++)for (coluna = 0; coluna < TCOLUNA; coluna++)
if (matriz [linha] [coluna] == valor) 
printf 
(“Valor na linha: %d e coluna: %d”, linha, coluna); 
Exercício: Leia uma matriz quadrada (de inteiros) de 
ordem 10 e calcule a sua transposta. Imprima as 
d iduas matrizes.
/* Le uma matriz inteira 10 x 10 e calcula sua transposta
Entradas: matriz 10 x 10
S id i 10 10 ( d d ) */Saida: matriz 10 x 10 (transposta da entrada) */
# define TAMMAT 10
int main()
{{
int m[TAMMAT][TAMMAT], t[TAMMAT][TAMMAT];
int linha, coluna;
// Leitura matriz
f (li h 0 li h TAMMAT li h ){for (linha = 0; linha < TAMMAT; linha++){
printf(“Entre os elementos da linha %d:\n”, linha+1);
for (coluna = 0; coluna < TAMMAT; coluna++)
scanf(“%d”, &m[linha][coluna]);scanf( %d , &m[linha][coluna]);
}
// gera a transposta
for (linha = 0; linha < TAMMAT; linha++)
f ( l 0 l TAMMAT l )for (coluna = 0; coluna < TAMMAT; coluna++)
t[linha][coluna] = m[coluna][linha];
// Imprime matriz original
// Imprime matriz transposta// Imprime matriz transposta
getchar();
return 0;
} 
22Ex:•Armazenar os números e as notas de cada aluno de 1 turma. 
•Calcular média de cada aluno – armazenar, e média da turma em Calcular média de cada aluno armazenar, e média da turma em 
cada prova.
•Informar o número do aluno de maior nota em cada prova.
//Programa notas e medias
#include <stdio.h>
#d fi NRA UNOS 30#define NRALUNOS 30
#define NRNOTAS 3
int main ( )
{{
float nota[NRALUNOS] [NRNOTAS]; 
int n , a; // indices para percorrer as duas dimensoes 
int numero[NRALUNOS]; // numero dos alunosint numero[NRALUNOS]; // numero dos alunos 
float media [NRALUNOS] ; // media de cada aluno 
float media_provas[NRNOTAS]; // medias das provas 
float pos maior media;float pos_maior_media; 
...
23Calcular e armazenar média de cada aluno e média da turma em cada prova.
//Programa notas e medias
#i l d tdi h#include <stdio.h>
#define NRALUNOS 3
#define NRNOTAS 3
int main ( )
{{
float nota[NRALUNOS] [NRNOTAS]; 
int n , a; // indices para percorrer as duas dimensoes
int numero[NRALUNOS]; // numero dos alunos
fl t di [NRALUNOS] // di d d lfloat media [NRALUNOS] ; // media de cada aluno 
float media_provas[NRNOTAS]; // medias das provas
int pos_maior_nota; 
...
f ( 0 NRALUNOS ) // l l d di d d lfor (a = 0; a< NRALUNOS; a++) //calculo da media de cada aluno 
{
media [a] = 0;
for (n = 0; n< NRNOTAS ; n++)
di [ ] di [ ] t [ ] [ ]media [a] = media [a] + nota [a] [n];
media [a] = media [a] / NRNOTAS;
}
for (n= 0; n< NRNOTAS ; n++) // calculo da media da turma / prova 
{{
media_provas [ n ] = 0;
for (a = 0; a < NRALUNOS; a++)
media_provas [n] = media_provas[n] + nota[ a] [n];
di [ ] di [ ] / NRALUNOSmedia_provas [n] = media_provas [n] / NRALUNOS;
}
...
24
Número do aluno com a maior nota em cada prova.
//Programa notas e medias
#include <stdio h>#include <stdio.h>
#define NRALUNOS 3
#define NRNOTAS 3
int main ( )
{{
float nota[NRALUNOS] [NRNOTAS]; 
int n , a; // indices para percorrer as duas dimensoes
int numero[NRALUNOS]; // numero dos alunos
float media [NRALUNOS] ; // media de cada alunofloat media [NRALUNOS] ; // media de cada aluno 
float media_provas[NRNOTAS]; // medias das provas
int pos_maior_nota; 
...
printf("\nNumero do aluno com a maior nota em cada prova:\n");printf( \nNumero do aluno com a maior nota em cada prova:\n );
for (n = 0; n < NRNOTAS; n++)
{
pos_maior_nota = 0; 
for (a = 1; a < NRALUNOS ; a++)for (a = 1; a < NRALUNOS ; a++)
if (nota [ a ] [n] > nota [ pos_maior_nota] [n])
{
printf("\n%d %d\n", pos_maior_nota, a);
pos maior nota = a;pos_maior_nota = a;
}
printf( "\nProva %d : aluno: %d: " , n+1 , numero[pos_maior_nota]);
} 
printf ("\nFinal de programa !\n");printf ( \nFinal de programa !\n );
return 0; 
}
25Ex: Armazenar os nomes e as notas de cada aluno de 1 turma. 
Dados do aluno 1:
Nome: Ana Terra
Nota 1: 7,5Nota 1: 7,5
Nota 2: 9,2
Nota 3: 8,4
Dados do aluno 2:
Nome: Rodrigo Cambará
Nota 1: 3,7
Nota 2: 5,2
Nota 3: 6,5
Dados do aluno 3:
Nome: Bibiana Terra Cambará
Nota 1: 8,3
N t 2 9 7Nota 2: 9,7
Nota 3: 4,7
26
#define NRALUNOS 30
Ex: Armazenar os nomes e as notas de cada aluno de 1 turma. 
#define NRALUNOS 30
#define NRNOTAS 3
int main ( )
{
float nota[NRALUNOS] [NRNOTAS]; 
int n , a; // indices para percorrer as duas dimensoes
char nome[NRALUNOS][25]; // nomes dos alunos num char < 25
int numero[NRALUNOS]; // numero dos alunos[ ];
float media [NRALUNOS] ; // media de cada aluno 
float media_provas[NRNOTAS]; // medias das provas
int pos_maior_nota; 
f ( 0 < NRALUNOS ++) // d lfor (a = 0; a < NRALUNOS; a++) // para cada aluno
{
printf ( "\nDados do aluno %d: " , a + 1);
scanf ( "%d", &numero [ a ] ); ( , [ ] );
gets(nome[NRALUNOS]); // Le nome do aluno
printf ("\n Nome: ");
puts (nome[NRALUNOS]); // Mostra nome do aluno
for (n = 0 n < NRNOTAS n++) // para cada notafor (n = 0; n < NRNOTAS ; n++) // para cada nota
{
printf ( "\n Nota %d: ", n + 1);
scanf ( "%f", &nota [ a][ n ] ) ; // nota do aluno( , [ ][ ] ) ;
}
printf("\n\n");
} ....
27Exercícios
Preencher por leitura uma matriz M (5,5). 
éEm seguida, calcular e imprimir a média dos elementos da 
diagonal principal:
m[0,0] 
m[1 1]m[1,1]
m[2,2]
m[3,3]
m[4,4]
linha: 0 a 4linha: 0 a 4
coluna: 0 a 4
linha == coluna!!!
28//Calcula média da diagonal principal de 1 matriz quadrada
#include <stdlib.h>
#i l d tdi h
Preencher por leitura uma matriz m (5,5) e escrever na tela:
#include <stdio.h>
#include <string.h>
#define MAX 5
int main( )n m n( )
{
float m[MAX] [MAX];
float soma, media; //somatório e média
int contaelem; // para cálculo da médiaint contaelem; // para cálculo da média
int lin, col, ind; // índices
//leitura dos valores da matriz m:
for (lin = 0; lin < MAX; lin++)for (lin = 0; lin < MAX; lin++)
for (col = 0; col < MAX; col++)
{
printf ("\nInforme o valor [%d] [%d]: " , lin, col );
scanf ("%f" &m[lin][col]);scanf ("%f", &m[lin][col]);
}
//escrita da matriz m
printf("\n\nMatriz lida: \n");printf( \n\nMatriz lida: \n );
for (lin = 0; lin < MAX; lin++)
{
for (col = 0; col < MAX; col++)
i tf ("%6 2f " [li ][ l] )printf ("%6.2f ",m[lin][col] );
printf("\n");
}......
29Somatório da diagonal principal e impressão da média:
....... 
// inicializa contador e acumulador
soma = 0; soma = 0; 
contaelem = 0; //percorrendo a diagonal principal: só precisa 1 índice!!!
for (ind =0; ind < MAX ; ind++)
{{
soma = soma + m[ind][ind]; //soma diagonal
contaelem++;
}}
media = soma / contaelem;
printf("\nMedia: %6.2f \n", media);
system("pause");system( pause );
return 0;
}
30
EXTRASEXTRAS
Exercícios extra classeExercícios extra classe
31Ex: Rede de 10 lojas, 40 produtos, armazenar a 
quantidade de itens de cada produto vendidos nos últimos 
12 meses Códigos dos produtos armazenados em arranjo 12 meses. Códigos dos produtos armazenados em arranjo 
separado.
Algoritmo LojasAlgoritmo Lojas
1. Preencher por leitura todos os dados (códigos dos produtos e matriz 
de vendidos).
2 Informar quantas unidades de cada produto foram vendidas em uma2. Informar quantas unidades de cada produto foram vendidas em uma 
determinada loja (fornecida) no último mês.
3. Informar quantas unidadesde um determinado produto (informado 
ódi ) f did d l j últi 6seu código) foram vendidas em cada loja nos últimos 6 meses.
4. Informar qual a loja que vendeu a maior quantidade de um 
determinado produto (fornecido seu código) em um determinado mês 
(fornecido).
5. Informar os códigos de todos os produtos dos quais não foi vendida 
nenhuma unidade nos últimos 2 meses.
6. Entrar com os dados de vendas de um novo mês, que será o último. 
Com isso, todos os dados relativos aos meses anteriores ‘avançam’ 
uma posição, e os dados do primeiro mês (o mais antigo) sãouma posição, e os dados do primeiro mês (o mais antigo) são 
perdidos
7. ... (determine novas operações sobre estes dados)
32
Ex: Rede de 10 lojas, 40 produtos, armazenar a quantidade de itens 
de cada produto vendido nos últimos 12 meses. Códigos dos produtos 
armazenados em arranjo separado.
h l d d d ( ód d d 
j p
#include <stdio h>
1. Preencher por leitura todos os dados (códigos dos produtos 
e matriz de vendidos)
#include <stdio.h>
int main ( )
{
int codprod [41];int codprod [41];
int vendido [11] [41] [13]; //loja/prod/mes
int ele, p, m; // indices para as 3 dimensoes 
int lojalida; // para armazenar numero relativo a lojaint lojalida; // para armazenar numero relativo a loja 
int codlido; // para armazenar codigo de produto lido 
...
for (ele = 1; ele < 11; ele++)for (p = 1; p < 41; p++)( ; ; )
for (p = 1; p < 41; p++)
{
scanf(“%d”, &codprod [p]);
(p ; p ; p )
{
scanf(“%d”, &codprod [p]);
for (ele = 1; ele < 11; ele++)( , p [p]);
for (m = 1; m<13; m++)
scanf(“%d”, &vendido[ele] [p] [m]);
}
( )
for (m = 1; m<13; m++)
scanf(“%d”, &vendido[ele] [p] [m]);
} }
......
33
2. Informar quantas unidades de cada produto foram vendidas em uma 
determinada loja (fornecida) no último mês
3. Informar quantas unidades de um determinado produto (informado seu 
#include <stdio.h>
int main ( )
f q p ( f
código) foram vendidas em cada loja nos últimos 6 meses.
{
int codprod [41];
int vendido [11] [41] [13]; //loja/prod/mes
int ele, p, m; // indices para as 3 dimensoesint ele, p, m; // indices para as 3 dimensoes 
int lojalida; // para armazenar numero relativo a loja 
int codlido; // para armazenar codigo de produto lido 
int quant, buscap; // contador e variável auxiliar
...
scanf( “%d”, &lojalida ); // 2 - Obtem loja a ser analisada 
for (p=1; p<41; p++)
printf (“Produto %d - loja %6d”, codprod[p], vendido[lojalida] [p] [12]);
scanf( “%d”, &codlido ); // 3 - obtem o produto a ser analisado e busca o indice p 
for (buscap =1; buscap < 41; buscap++) // nao preve que codlido seja inexistente
if (codprod[p] == codlido) 
p = buscap;p = buscap;
for (ele = 1; ele <11; ele++) // para cada loja 
{
quant = 0; // inicializa o contador para cada loja 
for (m= 7; m < 13 ; m++)for (m 7; m < 13 ; m )
quant = quant + vendido[ele] [p] [m];
printf( “Loja %d – vendidos %5d”, ele, quant) 
}
} // fim de main
34Exercícios
Preencher por leitura uma matriz M (5,5). 
éEm seguida, calcular e imprimir a média dos elementos 
das áreas assinaladas:
35Calcular e imprimir a média dos 
elementos da Figura 1:
m[0,0] m[0,1] m[0,2]
m[1,0] m[1,1] m[1,2]
m[2,0] m[2,1] m[2,2]
Li h 2 4 (i di 1 3)Linha: 2 a 4 (indices 1 a 3)
Coluna: 2 a 4 (indices 1 à 3)
//primeira figura
soma1 = 0; contaelem = 0;
for (lin = 1; lin < 4; lin++)
for (col = 1; col < 4; col++)
{
soma1 = soma1 + m[lin][col];
contaelem++;
}
media1 = soma1 / contaelem;
printf("\nMedia da figura 1: %6.2f (%d elementos considerados) \n",
media1, contaelem );)
...
36Exercício
1. Uma matriz esparsa é uma matriz que tem aproximadamente 2/3 de
seus elementos iguais a zero. Fazer um programa que lê (linha à linha)
uma matriz esparsa me(MAXL,MAXC) contendo valores inteiros e formam m p m ( , ) f m
uma matriz condensada mc, de apenas três colunas, contendo os
elementos não nulos de M, de forma que:
• a primeira coluna contém os valores não nulo de me;a primeira coluna contém os valores não nulo de me;
• a segunda coluna contém a linha de me onde foi encontrado o valor
armazenado na coluna 1;
• a terceira coluna contém a coluna de me onde foi encontrado o• a terceira coluna contém a coluna de me onde foi encontrado o
valor armazenado na coluna 1.
Imprimir as duas matrizes, APÓS o preenchimento da matriz
d d !condensada!
- Determinar o número de linhas de mc faz parte do problema.
- Testar o programa com os seguintes dados de entrada:
0 0 -1 0 2 -3 0 0 4 0 0 -5 0 0 0 0 0 0 6 0 0 -7 0 0 8
(linha 1) (linha 2) (linha 3) (linha 4) (linha 5)
37
//le uma matriz esparsa e gera uma matriz condensada
# l d dl b h
Lista de arranjos de N dimensões:
p g
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXL 3 // número de linhasLista de arranjos de N dimensões:#define MAXL 3 // número de linhas
#define MAXC 3 // número de colunas
int main( )
{{
int lin, col, linha_cond = 0; // indices das matrizes
int esparsa[MAXL][MAXC]; 
int condensada[(MAXL * MAXC) / 3 + 1] [3]; // linhas condensada: +-1/3[( ) ] [ ]
//leitura dos dados
for (lin = 0; lin < MAXL; lin++) 
for (col = 0; col < MAXC; col++)
{{
printf("Digite o elemento [%d] [%d]: ", lin, col);
scanf("%d", &esparsa[lin] [col]); 
}}
...
38
Lista de arranjos de N dimensões:
...
// escrita da matriz esparsaLista de arranjos de N dimensões:// escrita da matriz esparsa
printf("\nMatriz esparsa lida:\n"); 
for (lin = 0; lin < MAXL; lin++) 
{{
for (col = 0; col < MAXC; col++)
printf("%5d", esparsa[lin] [col]); // imprime matriz alinhada por colunap p p p
printf("\n"); 
} 
......
39ExercícioExercício// geracao da matriz condensada
for (lin = 0; lin < MAXL; lin++) 
Lista de arranjos de N dimensões:
( ; ; )
for (col = 0; col < MAXC; col++)
if (esparsa[lin] [col]) // se conteúdo diferente de zero
{
d d [li h d] [0] [li ] [ l]Lista de arranjos de N dimensões:condensada[linha_cond] [0] = esparsa[lin] [col];
condensada[linha_cond] [1] = lin;
condensada[linha_cond] [2] = col;
linha cond++; /* já deixa pronto para a próxima linha a serlinha_cond++; /* já deixa pronto para a próxima linha a ser
preenchida e também informa número de linhas preenchidas */ 
}
// escrita da matriz condensada, que tem linha cond linhas preenchidas// escrita da matriz condensada, que tem linha_cond linhas preenchidas
printf("\nMatriz condensada:\n"); 
for (lin = 0; lin < linha_cond; lin++) 
printf("\n %6d %6d %6d", condensada[lin] [0] ,p ( , [ ] [ ] ,
condensada[lin] [1] ,
condensada[lin] [2]); 
printf ("\n\nFinal de programa !\n"); 
t (" ")system("pause");
return 0;
} 
40Exercício
2 Palíndromos são sequências de caracteres que não mudam se lidos da 2. Palíndromos são sequências de caracteres que não mudam, se lidos da 
esquerda para a direita ou vice-versa (2002, ANA, ACAIACA, 
RADAR, AMOR é ROMA, eva asse essa ave, ame o poema). Observe 
 s d isti b s t s l t s st s b s ã que, se podem existir brancos entre os elementos, estes brancos não 
podem ser considerados para fins de comparação.
Faça um programa que:
) l a) leia uma string;
b) exclua os brancos intermediários;
c) verifique se a variável string sem brancos é um palíndromo. ) q g p
Algoritmo palindromos (não refinado)g p
1. inicio
2. ler linha_lida;
3. linha recebe linha lida sem os brancos // preserva entrada de dados. n n _ m n // p
3. se linha = inverso(linha)
então escreva (linha_lida ,’ é um palindromo’);
4 fim4. fim.
41// Palíndroma, depois de eliminar brancos:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#d fi i li h 80#define size_linha 80
int main( )
{
h li h lid [i li h +1] // t úd lidchar linhalida[size_linha +1], // conteúdo lido
aux_linha_lida[size_linha + 2]; // para leitura com fgets
char linha[81], linhainv[81]; // conteúdo convertido + invertido
int i i lida i conv;int i, i_lida, i_conv;
system("color f1");
do // lê, consistindo e evitando preenchimento indevido da memória:
{{
......
} while (.....);
auxlinhalida[strlen(auxlinhalida) – 1] = ‘\0’; //elimina ‘\n’auxlinhalida[strlen(auxlinhalida) 1] \0 ; //elimina \n
strcpy(linhalida, auxlinhalida);
// monta linha, excluindo brancos digitados:
..................
42// monta linha, excluindo brancos digitados:
i_conv = 0; // início da linha a ser montada, sem os brancos
for (i_lida =0; i_lida < strlen(linhalida); i_lida ++)
if (linhalida[i_lida] != ' ') // só copia se não for branco
{
li h [i ] l (li h lid [i lid ]) // i i ú llinha[i_conv] = tolower(linhalida[i_lida]); // copia como minúscula
i_conv++; // se copia, atualiza o índice
} 
li h [i ] '\0' // i l i fi li d d t i blinha[i_conv]='\0'; // inclui finalizador de string na sem brancos
// opção 1: copia invertido e depois compara strings:
for (i=0; i < strlen(linha); i++) // inverte conteúdo sem brancosfor (i=0; i < strlen(linha); i++) // inverte conteúdo sem brancos
linhainv[i] = linha[strlen(linha)-i-1];
linhainv[i] ='\0'; // inclui finalizador de string na invertida
if (strcmp(linha,linhainv) == 0)
printf("\n%s eh uma palindroma!",linhalida); // imprime como digitado
elseelse
printf("\n%s nao eh uma palindroma!",linhalida);
system("pause");
return 0;return 0;
}
43// monta linha, excluindo brancos digitados:
......
//// opção 2: comparando posições :
eh_pal=1; // até prova em contrário, considera como palíndromo
i_inic = 0; 
i fim= strlen(linha) 1;i_fim= strlen(linha) - 1;
// repete enquanto i_inic < i_fim e eh_pal = 1: para no meio!
while (i_inic < i_fim && eh_pal== 1)
// compara extremos da linha sem brancos, até chegar no meio// compara extremos da linha sem brancos, até chegar no meio
if (linha [i_inic] != linha[i_fim])
eh_pal = 0; // não é palíndromo: já pode parar de comparar
else
{
i_inic++;
i_fim--;
}}
if (eh_pal== 1)
printf("\n%s eh uma palindroma!", linhalida); // imprime como 
digitadodigitado
else
printf("\n%s nao eh uma palindroma!", linhalida);
system("pause");y ( p )
return 0;
}

Outros materiais