INF 1005 • Programação I • lista 11
Matrizes 1. Faça um programa que leia uma matriz de números inteiros de dimensões 4x4 e imprima a soma
dos valores de cada linha e a soma de todos os elementos da matriz.
2. Faça um programa que leia uma matriz de números inteiros de dimensões 4x5 e imprima a soma
dos valores de cada linha e a soma de todos os elementos da matriz.
3. Uma estação meteorológica registra a temperatura ocorrida em uma cidade a cada hora. Faça um
programa que leia as temperaturas de uma semana no seguinte formato: dia, hora, temperatura. A
leitura termina com um dia inválido. O programa deve informar para cada hora consultada, a
maior temperatura ocorrida na semana. As consultas terminam com um valor de hora inválido.
4. Faça um programa que analise um cartão de loteria esportiva e diga qual dos 13 jogos possui um
triplo, ou se não existir, um duplo. O programa deve ler da entrada a configuração do cartão e em
seguida informar o jogo mais marcado. Dica: fixar a linha e variar a coluna.
5. Refaça o exercício anterior de modo a descobrir qual das colunas do cartão possui mais
marcações, se a coluna um, a coluna dois ou a do meio. Dica: fixar a coluna e variar a linha.
6. Construa um programa que efetue a leitura, a soma e a impressão do resultado, entre duas
matrizes inteiras que comportem 25 elementos.
7. Construa uma função que receba como parâmetro uma matriz quadrada 4x4. A função deverá
devolver 1, se a matriz for simétrica, ou 0, caso contrário.
8. [tarefa 15] Implemente uma função que indique se uma matriz quadrada de números inteiros é
uma matriz identidade (retornando 1) ou não (retornando 0). A função recebe como parâmetros a
matriz de inteiros, usando a representação de matrizes através de vetores simples, e um inteiro n,
indicando a dimensão da matriz. Essa função deve obedecer o protótipo:
int matriz_identidade(int* mat, int n); Implemente um programa para testar essa função.
9. [tarefa 17] Implemente uma função que indique se uma matriz quadrada de números inteiros é
uma matriz triangular superior (retornando 1) ou não (retornando 0). A função recebe como
parâmetros a matriz de inteiros, usando a representação de matrizes através de vetores simples, e
um inteiro n, indicando a dimensão da matriz. Essa função deve obedecer o protótipo:
int matriz_triangular_superior(int* mat, int n); Implemente um programa para testar essa função.
10. [tarefa 19] Implemente uma função que indique se uma matriz quadrada de números inteiros é
uma matriz triangular inferior (retornando 1) ou não (retornando 0). A função recebe como
parâmetros a matriz de inteiros, usando a representação de matrizes através de vetores simples, e
um inteiro n, indicando a dimensão da matriz. Essa função deve obedecer o protótipo:
int matriz_triangular_inferior(int* mat, int n); Implemente um programa para testar essa função.
Hélio Lopes
[email protected]
Departamento de Informática
Rua Marquês de São Vicente, 225 • Gávea • 22451-900
Rio de Janeiro • RJ • Tel. (21) 3527-1500 r.4350 • Fax (21) 3527-1530
INF 1005 • Programação I • lista 11 • Matrizes
Variações envolvendo matrizes: soma ou produto dos valores da diagonal, dos valores acima da
diagonal, dos valores abaixo da diagonal; incluindo todos os valores, apenas os valores pares,
ímpares, ou num determinado intervalo.
11. [tarefa 57] Considere uma tabela com os resultados de um campeonato de futebol, onde os
resultados dos times são dispostos numa ordem qualquer. Como ilustrado a seguir, para cada time
registra-se o total de pontos ganhos (PG), o número de vitórias (V), o número de empates (E), o
número de derrotas (D), o número de gols pró (GP) e número de gols contra (GC).
Time Time A Time B Time C Time D Time E Time F Time G Time H PG 9 7 8 9 7 7 9 6 V 3 2 2 2 2 2 3 2 E 0 1 2 3 1 1 0 0 D 2 1 1 0 2 2 2 3 GP 10 9 5 10 9 3 8 7 GC 5 5 1 4 6 1 2 9 Considere ainda que os números da tabela são representados em uma matriz de valores inteiros.
Cada linha da matriz representa os resultados de um determinado time. Na primeira coluna da
matriz armazena-se o número de pontos ganhos, na segunda o número de vitórias e assim por
diante. Pede-se:
(a) Escreva uma função que retorne o índice (de 0 a 7) do time com o melhor saldo de gols. A
função deve receber como parâmetros o número de times, n, e a tabela com os resultados, tab, e
deve ter o seguinte cabeçalho:
int melhor_saldo (int n, int tab [] [6]); (b) Escreva uma função que retorne o número do time que está na liderança. A liderança é
determinada pelo time que tiver maior número de pontos ganhos. Se um ou mais times tiverem o
mesmo número de pontos, é usado o seguinte critério de desempate: número de vitórias e saldo de
gols, nesta ordem. Se, mesmo assim, dois ou mais times empatarem, deve-se retornar o índice de
um dos times líderes. A função deve receber como parâmetros o número de times, n, e a tabela
com os resultados, tab, e deve ter o seguinte cabeçalho:
int lider (int n, int tab [][6]); (c) Escreva uma função que retorne o número do time que está em último lugar na classificação,
obedecendo o mesmo critério de classificação do item anterior. Se dois ou mais times empatarem
em todos os critérios, deve-se retornar um dos times que estão em último lugar. A função deve
receber como parâmetros o número de times, n, e a tabela com os resultados, tab, e deve ter o
seguinte cabeçalho:
int ultimo ( int n, int tab [][6]); (d) Escreva um programa que leia a tabela de resultados de um arquivo e teste sua funções.
12. (Prova 3 - 96/1) Faça um programa que leia uma matriz de inteiros A quadrada de ordem 100 e
calcule a sua transposta AT. Exemplo para matriz de ordem 4 (apenas um outro exemplo!!!):
⎡ 1 2 3 4 ⎤
⎢ 5 6 7 8 ⎥
⎥
A = ⎢
⎢ 9 10 11 12 ⎥
⎢
⎥
⎣13 14 15 16⎦
⎡1
⎢2
A T = ⎢
⎢ 3
⎢
⎣4
5 9 13⎤
6 10 14 ⎥
⎥
7 11 15⎥
⎥
8 12 16⎦
Página 2 de 3
INF 1005 • Programação I • lista 11 • Matrizes
Exercícios Propostos
13. Faça um programa que leia o número de matrícula de 100 alunos e suas notas (5 notas para cada
aluno). O programa deve armazenar todos os dados em uma matriz: a matrícula na primeira
coluna e as notas nas colunas seguintes. O programa deverá calcular, para cada aluno, a média de
suas notas, que deve ser armazenada na sétima coluna da matriz. Após o cálculo da média, o
programa deverá ordenar a matriz pela média de cada aluno. Utilize a função main() abaixo.
#include <stdio.h>
#define C 7
#define L 100
void le_matriz (int [][C]);
void media_alunos (int [][C]);
void ordena_matriz (int [][C]);
void troca_linha (int [][C], int, int);
void troca (int *, int *);
void imprime (int [][C]);
void main (void)
{
int i, j;
int m[L][C];
le_matriz (m)
media_alunos (m);
ordena_matriz (m);
imprime (m);
}
Teste seu programa com os seguintes dados:
Matrícula N1 N2 N3 N4 N5
134
8
5
7
9
10
99
8
6
5
2
3
120
10
9
10 10
8
A matriz resultante será:
Matrícula N1 N2 N3
99
8
6
5
134
8
5
7
120
10
9
10
N4
2
9
10
N5
3
10
8
Média
3
7
9
14. A Escola Pagou Passou possui 10 turmas, com, exatamente, 60 alunos em cada uma. A sua
diretoria resolveu fazer o acompanhamento do rendimento dos alunos matriculados em cada uma
das turmas.
Para atender as necessidades da diretoria você deverá construir um programa que faça o seguinte:
a) defina duas matrizes para armazenar as matrículas e as notas dos alunos das 10 turmas, cada qual
com exatamente 60 alunos;
b) faça uma função que leia do teclado a matrícula e a nota dos alunos e armazene-as nas respectivas
matrizes, turma a turma. Lembre-se de que a escola tem exatamente 10 turmas, cada uma das
quais com exatamente 60 alunos. A função deverá receber as duas matrizes como parâmetros;
c) faça uma função que calcule e exiba no vídeo a média de cada turma, armazenando-as em um
vetor de médias com 10 elementos. As matrizes e o vetor deverão ser passados como parâmetros;
d) faça uma função que percorra a matriz de notas, turma a turma, exibindo no vídeo, uma a uma, as
matrículas dos alunos cujas as notas ficaram abaixo da média das respectivas turmas.
e) a função main deverá chamar cada uma das funções acima de maneira que o programa cumpra o
seu objetivo corretamente.
Página 3 de 3
Download

lista 11 matrizes - Departamento de Informática - PUC-Rio