Informática, perguntado por vargemgrande, 10 meses atrás

Elaborar um algoritimo em Python que leia uma matriz 10x10 de números inteiros maiores ou iguais a zero e menores ou iguais a dez (deve ser feita a proteção de dados no código), execute as trocas especificadas a seguir e mostre a matriz original e matriz resultante: 1) A linha 2 com a linha 8; 2)A coluna 4 com a coluna 10; 3)A diagonal rpincipal com a diagonal secundária; 4) A linha 5 com a coluna 10. Obs: Devese utilizar listas de listas para a resolução do problema.

Soluções para a tarefa

Respondido por GeBEfte
3

Pra facilitar a compreensão e organização do código, optou-se pela divisão do código em funções, que serão brevemente comentadas após o código.

Convém também abordar um possível problema do enunciado, note que em (4) é solicitada a troca de linha 5 por coluna 10.

Por "troca", entendemos que os elementos da linha 5 receberão, ordenadamente, os elementos da coluna 10 e, da mesma forma, os elementos da coluna 10 receberão os elementos da linha 5.

No entanto, essa operação só faria sentido para uma escolha de linha e coluna de mesma ordem (ex.: linha3 e coluna3) ou em uma matriz particular onde os elementos M5,5 e M5,10 e os elementos  M5,10 e M10,10 sejam iguais. Teste no papel com uma matriz menor para verificar.

Assim, fica o aviso, a função no programa efetua a operação no caso de linha e coluna de mesma ordem, sem problemas, e no caso solicitado efetua também a troca, no entanto o resultado pode parecer confuso.

Observações:

--> Os pontos no código devem ser ignorados, estão apenas para garantir a indentação.

--> Lembre-se que a contagem dos índices começam em '0'.

Programa:

def troca_linha(lst, lin1, lin2):

.....linha_aux=lst[lin1].copy()

.....lst[lin1]=lst[lin2].copy()

.....lst[lin2]=linha_aux

def troca_coluna(lst, col1, col2):

.....for c in lst:

..........var_aux=c[col1]

..........c[col1]=c[col2]

..........c[col2]=var_aux

def troca_diagonais(lst):

.....cont=1

.....for c in lst:

..........aux=c[cont-1]

..........c[cont-1]=c[-cont]

..........c[-cont]=aux

..........cont+=1

def troca_lincol(lst, lin, col):

.....for c in range(len(lst)):

..........aux=lst[lin][c]

..........lst[lin][c]=lst[c][col]

..........lst[c][col]=aux

def monta_matriz(ordem):

.....lst=list()

.....for c in range(1, ordem+1):

..........linha=list()

..........for i in range(1,ordem+1):

...............while True:

....................try:

.........................elemento=int(input(f'Digite o elemnto {c}{i}: '))

....................except:

.........................print('Por favor, digite um valor inteiro')

.........................continue

....................else:

.........................if 0<=elemento<=10:

..............................break

.........................else:

..............................print('O valor deve estar no intervalo [0,10]')

...............linha.append(elemento)

..........lst.append(linha.copy())

..........linha.clear()

.....return lst

def mostra_matriz(lst):

.....for c in lst:

..........for i in c:

...............print(f'{i:3} ', end='')

..........print()

.....print()

matriz=monta_matriz(10)

mostra_matriz(matriz)

troca_linha(matriz, 1, 7)

troca_coluna(matriz, 3, 9)

troca_diagonais(matriz)

troca_lincol(matriz, 4, 9)

mostra_matriz(matriz)

Comentários:

--> Note que as funções foram, propositalmente, feitas para matrizes quadradas de qualquer ordem, ou seja, podem ser reutilizadas em outros programas.

--> Começamos o programa chamando a função monta_matriz(). Essa função recebe como parâmetro a ordem da matriz que se deseja montar e é responsável por ler os elementos da matriz e, também, valida-los evitando que sejam enviados dados diferentes dos esperados.

--> A função mostra_matriz() recebe como parâmetro a lista (matriz). Como segure o nome, ela mostra a matriz na tela com uma formatação.

--> Nas funções troca_linha(), troca_coluna() e troca_lincol(), recebemos 3 parâmetros, a matriz e as linhas e/ou colunas a serem operadas. Novamente aqui, os nomes são sugestivos, as funções são responsáveis, respectivamente, por permutar 2 linhas, permutar duas colunas e permutar uma linha com uma coluna.

--> Por fim, na função troca_diagonais() recebemos a matriz como parâmetro para efetuar a troca diagonal principal por diagonal secundaria.

Anexos:
Perguntas interessantes