Exercícios

Exercício 1

Escreva a função a leia_matriz() a seguir. Abaixo esta um exemplo com um passo a passo da execução da função.

>>> a = leia_matriz()
Digite o número de linhas: 3
Digite o número de colunas: 4
matriz = []
linha 0 = []
Digite o elemento (0,0): 1
linha 0 = [1]
Digite o elemento (0,1): 2
linha 0 = [1, 2]
Digite o elemento (0,2): 3
linha 0 = [1, 2, 3]
Digite o elemento (0,3): 4
linha 0 = [1, 2, 3, 4]
matriz = [[1, 2, 3, 4]]
linha 1 = []
Digite o elemento (1,0): 5
linha 1 = [5]
Digite o elemento (1,1): 6
linha 1 = [5, 6]
Digite o elemento (1,2): 7
linha 1 = [5, 6, 7]
Digite o elemento (1,3): 8
linha 1 = [5, 6, 7, 8]
matriz = [[1, 2, 3, 4], [5, 6, 7, 8]]
linha 2 = []
Digite o elemento (2,0): 9
linha 2 = [9]
Digite o elemento (2,1): 10
linha 2 = [9, 10]
Digite o elemento (2,2): 11
linha 2 = [9, 10, 11]
Digite o elemento (2,3): 12
linha 2 = [9, 10, 11, 12]
matriz = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> a

Exercício 2

Escreva a função a abaixo:

Exercício 3

Escreva a função a abaixo:

Exercício 4

Escreva um programa que lê n e uma matriz A de inteiros de dimensão n x n, e verifica se A é simétrica.

      0     1     2     3
   +-----+-----+-----+-----+
0  | 11  | -3  |  4  |  8  |
   +-----+-----+-----+-----+
1  | -3  | 12  |  6  | 11  |
   +-----+-----+-----+-----+
2  |  4  |  6  |  5  | 13  |
   +-----+-----+-----+-----+
3  |  8  | 11  | 13  |  5  |
   +-----+-----+-----+-----+

Sugestões: utilize as funções leia_matriz(), imprima_matriz() e simetrica() dos exercícios anteriores.

Exercício 5

Escreva um programa que leia inteiros positivos m e n e os elementos de uma matriz A de números inteiros de dimensão m x n e conta o número de linhas e colunas que tem apenas zeros.

Matriz: 4 x 5
     0     0     0     0     1
     0     0     0     0     0
     0     1     0     0     0
     0     0     0     0     0
Linhas  nulas = 2
Colunas nulas = 3

Exercício 6

Escreva a função a abaixo:

Exercício 7

Escreva um programa que leia duas matrizes, a matriz A de dimensão m x n e B de dimensão n x p e imprime a matriz C de dimensão m x p que é o produto de A por B.

Sugestões: utilize as funções leia_matriz(), imprima_matriz() e multiplica_matriz() dos exercícios anteriores.

Exercício 8

Nesse exercício, vamos continuar a explorar a multiplicação de matrizes, mas dessa vez explorando o coneito de produto escalar de duas listas, que correspondem a uma linha e uma coluna das matrizes multiplicadas.

Parte A

Escreva uma função que recebe um inteiro lin e uma matriz real A e outro inteiro col e uma matriz real B, e calcula a soma do produto entre os elementos da linha lin de A e com os respectivos elementos da coluna col de B. Você deve considerar que o número de colunas de A é o mesmo número de linhas de B.

Parte B

Utilizando a função do item anterior, escreva um programa que leia duas matrizes, a matriz A de dimensão m x n e B de dimensão n x p e imprime a matriz C de dimensão m x p que é o produto de A por B.

Exercício 9

Parte A

Escreva uma função MAX que recebe como entrada uma matriz inteira A e devolve três inteiros: k, lin e col. O inteiro k é um maior elemento de A e é igual a A[lin,col].

Exemplo:

A = [ [3, 7, 1], [1, 2, 8], [5, 3, 4]]

a função deve devolver

8, 1, 2

Obs.: Se o elemento máximo ocorrer mais de uma vez, indique em lin e col qualquer uma das possíveis posições.

Parte B

Escreva um programa que, dado dois inteiros nl e nc e uma matriz quadrada de dimensão nl x nc, cujos elementos são todos inteiros, imprime uma tabela onde os elementos são listados em ordem decrescente, acompanhados da indicação de linha e coluna a que pertencem. Havendo repetições de elementos na matriz, a ordem é irrelevante. Utilize obrigatoriamente o procedimento da parte A, mesmo que você não o tenha feito.

Ex.: No caso da matriz acima, a saída poderia ser:

Elem   Linha  Coluna
  8      1      2
  7      0      1
  5      2      0
  4      2      2
  3      0      0
  3      2      1
  2      1      1
  1      0      2
  1      1      0

Exercício 10

Campo Minado é um jogo que se tornou muito popular por acompanhar o sistema operacional Microsoft Windows.

Nesse jogo, o campo minado pode ser representado por uma matriz retangular. O jogador deve revelar todas as posições livres (sem bomba) da matriz, clicando em uma posição com conteúdo desconhecido. O jogo acaba quando o jogador clicar em uma posição com bomba, ou quando todas as posições livres forem abertas.

Nesse exercício, você deve implementar algumas funções que podem ser utilizadas na implementação desse jogo.

Parte A

Escreva uma função que recebe como parâmetros uma matriz inteira A e uma posição (lin, col) da matriz, e conta quantas posições ao redor da posição (lin, col) contém o valor -1 (valor adotado para representar uma bomba)

Uso de constantes

O uso de constantes é uma boa prática de programação. No caso do campo minado, ao invés de utilizar o valor -1, podemos criar uma constante (variável que nunca muda de valor após criada) chamada BOMBA com o valor -1.

Parte B

Escreva um programa que lê uma matriz A de 0’s (posições livres) e -1’s (bomba). Utilizando a função do item anterior, o programa deve computar e imprimir a quantidade de bombas ao redor de cada posição livre da matriz.

Exercício 11

Problema das n rainhas.

Parte A

Escreva uma função marque_atacadas(tab) que recebe uma tabuleiro tab de xadrez (uma matriz 8x8 de caracteres) contendo rainhas (posições com R) e marca as regiões atacadas com um X, como abaixo:

+---+---+---+---+---+---+---+---+
| X |   |   | X |   |   | X |   |
+---+---+---+---+---+---+---+---+
|   | X |   | X |   | X |   |   |
+---+---+---+---+---+---+---+---+
|   |   | X | X | X |   |   |   |
+---+---+---+---+---+---+---+---+
| X | X | X | R | X | X | X | X |
+---+---+---+---+---+---+---+---+
|   |   | X | X | X |   |   |   |
+---+---+---+---+---+---+---+---+
|   | X |   | X |   | X |   |   |
+---+---+---+---+---+---+---+---+
| X |   |   | X |   |   | X |   |
+---+---+---+---+---+---+---+---+
|   |   |   | X |   |   |   | X |
+---+---+---+---+---+---+---+---+

Parte B

Usando a função do item anterior, escreva um programa que leia n e a posição de n rainhas, e imprima o tabuleiro (com moldura) mostrando a posição inicial das rainhas (tabuleiro só com R) e depois mostrando a posição das rainhas e as posições atacadas (com R e X).

Você já fez das atividades dessa página