snowstormdelivery 19 Denunciar post Postado Abril 6, 2016 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 Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Abril 7, 2016 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? Compartilhar este post Link para o post Compartilhar em outros sites
snowstormdelivery 19 Denunciar post Postado Abril 7, 2016 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? Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Abril 7, 2016 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. Compartilhar este post Link para o post Compartilhar em outros sites
snowstormdelivery 19 Denunciar post Postado Abril 7, 2016 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? Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Abril 8, 2016 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. Compartilhar este post Link para o post Compartilhar em outros sites
snowstormdelivery 19 Denunciar post Postado Abril 9, 2016 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 Compartilhar este post Link para o post Compartilhar em outros sites