Escreva um programa que lê n
e uma matriz An x n
, e verifica se A
é simétrica.
#-----------------------------------------------------
def main():
'''
Programa que lê n e uma matriz de inteiros n x n
e verifica se a matriz é simétrica.
'''
# leia a matriz
a_mat = leia_matriz()
# imprima a matriz
imprima_matriz(a_mat)
if simetrica(a_mat):
print("Matriz simétrica.")
else:
print("Matriz não simétrica.")
#-------------------------------------------------------
def leia_matriz():
'''(None) -> matriz (lista da lista)
Função que lê do teclado o número n_linhas de linhas
e o numero n_colunas de colunas e os elementos de
uma matriz de dimensão n_linha x n_colunas.
A função cria e retorna a matriz lida.
'''
# leia as dimensoes da matriz
n_linhas = int(input("Digite o número de linhas: "))
n_colunas = int(input("Digite o número de colunas: "))
# leitura da matriz de uma matriz m x n
matriz = []
for i in range(n_linhas):
# leia elementos da linha i
linha = [] # nova linha
for j in range(n_colunas):
print("Digite o elemento (%d,%d): " %(i,j), end="")
num = int(input())
linha.append(num)
# coloque a linha na matriz
matriz.append(linha)
return matriz
#-------------------------------------------------------
def imprima_matriz(matriz):
'''(matriz) -> None
Recebe e imprime uma matriz de inteiros.
'''
n_linhas = len(matriz)
n_colunas = len(matriz[0])
print("Matriz: %d x %d" %(n_linhas, n_colunas))
for i in range(n_linhas):
# imprima a linha i
for j in range(n_colunas):
print("%6d" %(matriz[i][j]), end="")
# pule uma linha
print()
#----------------------------------------------------------
def simetrica(matriz):
'''(matriz) -> bool
Recebe uma matriz e returna True se a matriz for simétrica,
em caso contrário retorna False.
Pre-condição: a funcao supõe que a matriz é quadrada
>>> a = [[1,2,3],[2,1,4],[3,4,1]]
>>> a
[[1, 2, 3], [2, 1, 4], [3, 4, 1]]
>>> imprima_matriz(a)
Matriz: 3 x 3
1 2 3
2 1 4
3 4 1
>>> simetrica(a)
True
'''
n = len(matriz)
é_simétrica = True
i = 0
while i < n and é_simétrica:
j = 0
while j < i and é_simétrica:
if matriz[i][j] != matriz[j][i]:
é_simétrica = False
print("Posição [%d][%d]: %d dif %d"
%(i, j, matriz[i][j], matriz[j][i]))
j = j + 1
i = i + 1
return é_simétrica
#------------------------------------------------------
# inicio da execucao do programa
main()
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 têm apenas zeros.
def main():
'''
Programa que lê n e m e uma matriz de inteiros n x m
e conta quantas linhas e quantas colunas da matriz têm apenas zeros.
'''
A = leia_matriz()
# obtém as dimensões m e n da matriz m x n lida
m = len(A)
if m > 0:
n = len(A[0])
else:
n = 0
cont_linha_zeros = 0
i = 0
while i < m:
linha_somente_zeros = True
j = 0
while j < n:
if A[i][j] != 0.0:
linha_somente_zeros = False
j += 1
i += 1
if linha_somente_zeros:
cont_linha_zeros += 1
cont_coluna_zeros = 0
j = 0
while j < n:
coluna_somente_zeros = True
i = 0
while i < m:
if A[i][j] != 0.0:
coluna_somente_zeros = False
i += 1
j += 1
if coluna_somente_zeros:
cont_coluna_zeros += 1
print("A matriz tem", cont_linha_zeros, "linhas compostas por zeros.")
print("A matriz tem", cont_coluna_zeros, "colunas compostas por zeros.")
#-------------------------------------------------------
def leia_matriz():
'''(None) -> matriz (lista da lista)
Função que lê do teclado o número n_linhas de linhas
e o numero n_colunas de colunas e os elementos de
uma matriz de dimensão n_linha x n_colunas.
A função cria e retorna a matriz lida.
'''
# leia as dimensoes da matriz
n_linhas = int(input("Digite o número de linhas: "))
n_colunas = int(input("Digite o número de colunas: "))
# leitura da matriz de uma matriz m x n
matriz = []
for i in range(n_linhas):
# leia elementos da linha i
linha = [] # nova linha
for j in range(n_colunas):
print("Digite o elemento (%d,%d): " %(i,j), end="")
num = int(input())
linha.append(num)
# coloque a linha na matriz
matriz.append(linha)
return matriz
#-------------------------------------------------------
main()
Escreva um programa que recebe duas matrizes Am x n
e Bn x p
e imprime a matriz Cm x p
que é o produto de A
por B
.
def main():
'''
Programa que lê duas matrizes de inteiros e imprime a matriz produto delas.
e imprime a m.
'''
m = int(input("Digite o numero de linhas da matriz A: "))
n = int(input("Digite o numero de colunas da matriz A: "))
A = le_matriz(m,n)
p = int(input("Digite o numero de colunas da matriz B: "))
B = le_matriz(n,p)
C = []
for i in range(m):
C.append([])
for j in range(p):
soma = 0
for k in range(n):
soma += A[i][k] * B[k][j]
C[i].append(soma)
print("O resultado da multiplicaçao de A por B e: ")
imprime_matriz(C)
def le_matriz(m, n):
"""
(int, int) --> list
Funçao que recebe como entrada um numero de linhas m
e um numero de colunas n e entao le uma matriz de inteiros
tamanho m x n, ou seja, uma lista contendo m listas
com n elementos cada. A matriz lida eh devolvida como
valor de retorno da funçao.
"""
print("Digite os elementos da matriz de tamanho %dx%d:" %(m,n))
matriz = []
for i in range(m):
matriz.append([])
for j in range(n):
elemento = int(input("Elemento da %da. linha, %da. coluna: " %(i+1,j+1)))
matriz[i].append(elemento)
return matriz
def imprime_matriz(matriz):
"""
(list) --> None
Funçao que recebe uma matriz como entrada, ou seja uma
lista de listas, e entao a imprime.
A funçao nao tem nenhum valor de retorno.
"""
for linha in matriz:
for elemento in linha:
print(elemento, end = " ")
print()
#########################
main()
Compute a matriz de campo minado (minesweeper)
a) Escreva uma função que recebe como parâmetros uma matriz inteira Anxm
, e uma posição (i,j)
da matriz, e conta quantas posições ao redor da posição (i,j)
contém o valor -1.
b) Escreva um programa que lê uma matriz Anxm
de 0's (posições livres) e -1's (minas). Utilizando a função do item anterior, o programa deve computar e imprimir a quantidade de minas ao redor de cada posição livre da matriz.
Exemplo
Para a matriz
0 | 0 | 0 | 0 | 0 |
0 | -1 | -1 | -1 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | -1 | 0 | 0 |
a saída deve ser:
1 | 2 | 3 | 2 | 1 |
1 | -1 | -1 | -1 | 1 |
1 | 3 | 4 | 3 | 1 |
0 | 1 | -1 | 1 | 0 |
def main():
m = int(input("Digite o número de linhas da matriz A: "))
n = int(input("Digite o número de colunas da matriz A: "))
A = le_matriz(m,n)
print("Matriz lida:")
imprime_matriz(A)
for i in range(m):
for j in range(n):
if A[i][j] == 0:
A[i][j] = conta_minas(A,i,j)
print("Matriz de resultado:")
imprime_matriz(A)
def conta_minas(matriz, i, j):
"""
(list, int, int) --> int
Função que recebe como parâmetro uma matriz e uma posição (i,j)
dessa matriz e devolve a quantidade de posições ao redor da posição
(i,j) que contêm o valor -1 nessa matriz.
"""
cont = 0
# Verifica a posição à esquerda
if j-1 >= 0 and matriz[i][j-1] == -1:
cont +=1
# Verifica a posição à direita
if j+1 < len(matriz[i]) and matriz[i][j+1] == -1:
cont +=1
# Verifica as posições acima
if i-1 >= 0:
if matriz[i-1][j] == -1:
cont +=1
if j-1 >= 0 and matriz[i-1][j-1] == -1:
cont +=1
if j+1 < len(matriz[i]) and matriz[i-1][j+1] == -1:
cont +=1
# Verifica as posições abaixo
if i+1 < len(matriz):
if matriz[i+1][j] == -1:
cont +=1
if j-1 >= 0 and matriz[i+1][j-1] == -1:
cont +=1
if j+1 < len(matriz[i]) and matriz[i+1][j+1] == -1:
cont +=1
return cont
def le_matriz(m, n):
"""
(int, int) --> list
Função que recebe como entrada um número de linhas m
e um número de colunas n e então lê uma matriz de inteiros
tamanho m x n, ou seja, uma lista contendo m listas
com n elementos cada. A matriz lida é devolvida como
valor de retorno da função.
"""
print("Digite os elementos da matriz de tamanho %dx%d:" %(m,n))
matriz = []
for i in range(m):
matriz.append([])
for j in range(n):
elemento = int(input("Elemento da %da. linha, %da. coluna: " %(i+1,j+1)))
matriz[i].append(elemento)
return matriz
def imprime_matriz(matriz):
"""
(list) --> None
Função que recebe uma matriz como entrada, ou seja uma
lista de listas, e então a imprime.
A função não tem nenhum valor de retorno.
"""
for linha in matriz:
for elemento in linha:
print("%2d" %elemento, end = " ")
print()
################
main()