Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
O exercício é este:
"Faça uma subrotina que receba uma matriz M(10,10), o número de uma linha L, o número de uma
coluna C e retorne a matriz N(9,9) resultante da remoção da linha L e da coluna C".
Eu fiz um código em que consigo prosseguir corretamente até o fim da primeira linha. Não sei como consertar, para o código fluir corretamente, podem me ajudar?
Segue o código que já construí:
algoritmo "semnome"
var
L, C, y, x:inteiro
N: vetor [1..9,1..9] de inteiro
M: vetor [1..10,1..10] de inteiro
inicio
// Eu não fiz a parte de leitura de quais linhas e colunas o usuário quer
//retirar, então atribuí valores a duas variáveis, para simular a resposta.
x<- 2 //linha a ser retirada
y <- 2//coluna a ser retirada
//Lê matriz M, com valores aleátórios.
//Só utilizei os valores aleatórios para fins e teste.
//Posso mudar para leitura manual, a qualquer momento.
Para L de 1 ate 10 faca
Para C de 1 ate 10 faca
M[L,C] <- Randi(9)
FimPara
FimPara
//Escreve matriz M
Para L de 1 ate 10 faca
Para C de 1 ate 10 faca
Escreva (M[L,C])
FimPara
EscrevaL()
FimPara
EscrevaL()
//Aqui é onde o problema começa!
//Teoricamente, era para atribuir a matriz N os valores da matriz M
//caso X ou Y não fossem iguais a L (Linha) e C (coluna)
Para L de 1 ate 9 faca
Para C de 1 ate 9 faca
//Se Y e X for igual linha e coluna a ser retirada o bloco é executado
Se (L = x) e (C = y) entao
N[L,C] <- M[L+1,C+1]
Senao
Se (L = x) entao
//Se L for igual a linha a ser retirada o bloco é executado
N[L,C] <- M[L+1,C+1]
Senao
Se (C = y) entao
//Se C for igual a coluna a ser retirada o bloco é executado
N[L,C] <- M[L,C+1]
Senao
//Caso não seja verdadeiro, alguns dos casos anteriores
//Atribui normalmente
N[L,C] <- M[L,C]
FimSe
FimSe
FimSe
FimPara
FimPara
//Escreve matriz N
Para L de 1 ate 9 faca
Para C de 1 ate 9 faca
Escreva (N[L,C])
FimPara
EscrevaL()
FimPara
EscrevaL()
fimalgoritmo
Não entendi o seu problema, você conseguiu até o fim da primeira linha? Você poderia explicar melhor? Qual é a lógica que você está usando?
Eu criei as variáveis X e Y, as quais são colunas e linhas a serem retiradas da matriz M. Para atribuir o valor de M sem essas colunas e linhas (X e Y), eu usei a lógica: Se na iteração a coluna ou linha de M for igual a Y ou X, ele não atribui a variável N.
O programa atribui na variável N os valores corretos somente na primeira linha. O resto sai errado!
Eu não sei para onde ir mais. Vocês tem como me ajudar a corrigir isso, ou ajudar a pensar numa nova lógica?
Acredito que a sua lógica esteja errada, você pode simplesmente replicar a matriz toda do outro lado, porém, dentro do for, só adicione um "se a linha for diferente da variável X" e depois outro no laço de dentro. Então basicamente ele tem que replicar a matriz, mas se a linha ou a coluna forem iguais as que forem removidas, ele não vai pegar +1, ele simplesmente vai ignorar.
A nova matriz será diferente em termos de indices, porque se a coluna 2 sumir, a coluna 3 será a 2 na nova matriz.
>
Acredito que a sua lógica esteja errada, você pode simplesmente replicar a matriz toda do outro lado, porém, dentro do for, só adicione um "se a linha for diferente da variável X" e depois outro no laço de dentro. Então basicamente ele tem que replicar a matriz, mas se a linha ou a coluna forem iguais as que forem removidas, ele não vai pegar +1, ele simplesmente vai ignorar.
A nova matriz será diferente em termos de indices, porque se a coluna 2 sumir, a coluna 3 será a 2 na nova matriz.
Você quis dizer algo como isso?
Para L de 1 ate 10 faca
Para C de 1 ate 10 faca
Se (C <> Y) ou (L <> X) entao
N[L,C] <- M[L,C]
FimSe
FimPara
FimPara
O código que coloquei no tópico, parte dessa premissa acima. Mas, se você olhar direitinho, quando chegar na iteração 10 vai dar erro, porque o N deve ser uma variável declarada 9x9, e na iteração 10 não vai encontrar a posição 10 da matriz N, porque esta posição não existe.
Se eu criasse uma variável N declarada 10x10 iria funcionar, mas eu acredito que a essência deste exercício é passar uma M 10x10 para uma N 9x9.
O que acha?
Você teria que criar uma variável na hora da execução, não poderia ser um array pré definido, provavelmente de tamanho ajustável.
De qualquer forma você vai ter que iterar 10x10, pois você vai ter que passar por toa a primeira matriz, você pode colocar um tratamento de erro interno no seu método para tratar a ultima iteração.
Eu vou pensar mais em como usar uma 9x9 pré definida, porque as arrays do VisuAlg não podem ser ajustáveis. Se não der certo, vou utilizar uma 10x10, mesmo.
Obrigado! :D
Não entendi o seu problema, você conseguiu até o fim da primeira linha? Você poderia explicar melhor? Qual é a lógica que você está usando?