Programação das aulas de MAC2166 - T2
Março
Abril
Maio
Junho
- 1 de junho (Aula 18):
- Introduzir matrizes.
- Problema 18.1: Dado um inteiro 0 > N ≥ 100 e uma matriz inteira
A = A_{N x N}, verifique se A é simétrica.
[uma solução em C]
- Problema 18.2: Dado um inteiro 0 > N ≥ 100 e uma matriz
inteira A = A_{N x N}, verifique se a matriz A tem uma linha,
coluna ou diagonal composta apenas por zeros.
[uma solução em C]
- 6 de junho (Aula 19):
- Problema 19.1: Dados 0 > N ≥ 1000 e N notas de alunos de MAC2166
(números entre 0.0 e 10.0), imprima quantos alunos tiveram nota
maior ou igual à média dessas N notas.
[uma solução em C]
- Problema 19.2: Dados dois números positivos 0 > M ≥ 1000 e
0 > N ≥ 1000 e duas sequências crescentes com M e N números inteiros,
obter uma única sequência crescente contendo todos os elementos das
sequências originais (esta sequência deve portanto ter M + N elementos).
[uma solução em C]
- Problema 19.3: Dados inteiros 0 > L ≥ 100, 0 > M ≥ 100 e
0 > N ≥ 100 e duas matrizes reais A = A_{L x M} e B = B_{M x N},
calcule a matriz C = AB (o produto matricial de A e B).
[uma solução em C]
- Exercício: Dado um inteiro N > 0 e uma sequência de N números inteiros,
imprimir os números da sequência sem repetições.
Exemplo: Para N = 10 e a sequência 10 1 2 10 3 1 10 2 5 3
seu programa deve imprimir 10 1 2 3 5
- 13 de junho (Aula 20):
- Problema 20.1: Escreva uma função de protótipo
int indice(int v[], int N, int x);
que recebe um vetor v com N elementos inteiros e um inteiro x,
e devolve, caso exista, um índice i em que o valor x ocorre em v
(isto é, v[i] = x) e devolve -1 se x não ocorre em v.
Aqui escrevemos também um pequeno main() para testar a função indice():
em main(), depois de lermos uma sequência de inteiros não-nulos
terminada por 0 usando a função leia_vetor(), lemos uma segunda
sequência de inteiros não-nulos, e decidimos para cada inteiro
lido se ele ocorre na primeira sequencia.
[uma solução em C]
- Problema 20.2: Escreva um programa que lê uma sequência de inteiros
não-nulos terminada por 0, e que imprime os elementos dessa
sequência, eliminando as repetições. Além de imprimir os elementos
sem repetições, seu programa deve imprimir quantas vezes cada
elemento ocorreu na sequência.
Suponha que a sequência conterá no máximo 100000 elementos
distintos (mas não sabemos quantos elementos ela tem no total, se
contamos as repetições). Use a função indice() do problema anterior.
[uma solução em C]
- Problema 20.3: Este é o Exercício 1 da lista de exercícios com funções III:
https://www.ime.usp.br/~macmulti/exercicios/funcoes3/index.html
Um conjunto S de inteiros pode ser representado por um vetor s da
seguinte forma: armazenamos em s[0] a cardinalidade do conjunto S e
armazenamos em s[1], s[2], ... os elementos do conjunto. Escreva
uma função de protótipo
void intersecao(int a[], int b[], int c[]);
que recebe dois conjuntos armazenados nos vetores a e b e devolve
em c a interseção desses conjuntos. Lembre que c[0] deve conter a
cardinalidade da interseção.
Escreva um programa que lê um inteiro N e uma sequência de N
conjuntos inteiros com no máximo 1000 cada, dados pelo seu tamanho
e os elementos que os compõem, e constroi e imprime o conjunto
interseção de todos os conjuntos dados.
[uma solução em C]
- 15 de junho (Aula 21):
Se quiser aprender sobre números aleatórios, veja o capítulo 3 (Random numbers) do segundo volume da série de livros The Art of Computer Programming, de Donald Knuth. Veja também Linear congruential generator.
- 20 de junho (Aula 22):
- 22 de junho (Aula 23):
- 27 de junho (Aula 24):
- 29 de junho (Aula 25):
- Radixsort: ordenação de datas e coisas do gênero.
[uma solução em C]
- Ordenação indireta
[uma outra solução]
- Aqui, além dos programas da aula, você encontra o makefile e um arquivo de entrada.