Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

snowstormdelivery

Ajuda com exercício de matrizes!

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.