Ir ao conteúdo
  • Cadastre-se
lucianogrecco

VisualG Matriz programa Visualg 5x5

Recommended Posts

Ola pessoal preciso muito de ajuda estou fazendo atividades de faculdade de engenharia e deram essas atividade de algoritmos com esse programa estava indo bem ate chegar nessas matrizes e embaralhar a cabeça. segue a pergunta e o algoritmo que comecei a executar  se possivel ver se corresponde a pergunta agradeço.

Faça um algoritmo para ler uma matriz 5x5 de números inteiros e ler um número inteiro x. A seguir, o algoritmo deve multiplicar os elementos da segunda coluna da matriz por x e exibir a matriz modificada

algoritmo "Exercicio 1"
// Autor: Luciano Tadeu Grecco
// Data : 17/11/2017

var
vetA:vetor[1..5,1..5] de real
vetB:vetor[1..5,1..5] de real
i,j,x:inteiro

inicio
// Seção de Comandos

para i de 1 ate 5 faca
para j de 1 ate 5 faca
escreva(“Digite os numeros: [“,i,  + “, j,  ] “)
leia(vetA[i,j])
fimpara
fimpara

para i de 1 ate 5 faca
para j de 1 ate 5 faca
escreva(vetA[i,j]*x)
fimpara
escreval(“”)
fimpara

para i de 1 ate 5 faca
para j de 1 ate 5 faca
vetB[i,j]<- (vetA[i,j]^5)
fimpara
fimpara

para i de 1 ate 5 faca
para j de 1 ate 5 faca

          escreva(vetB[i,j]*x)

     fimpara
escreval(“”)
fimpara

fimalgoritmo

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@lucianogrecco    seu algoritmo está bom ,  mas você está fazendo mais coisas do que foi pedido e ao mesmo tempo está deixando de fazer a multiplicação e colocar esse valor  novo na matriz,   coloquei esse código nos  loops finais  para organizar as colunas na hora de imprimir, se você não quiser usar pode escrever da forma normal ,  então seu código com algumas modificações ficaria assim :

algoritmo "Exercicio 1"
// Autor: Luciano Tadeu Grecco
// Data : 17/11/2017

var
vetA:vetor[1..5,1..5] de real
vetB:vetor[1..5,1..5] de real
i,j,x:inteiro
a    : caractere
inicio
// Seção de Comandos
  para i de 1 ate 5 faca
    para j de 1 ate 5 faca
      escreva("Digite os numeros: [",i, " + ", j, " ] ")
      leia(vetA[i,j])
    fimpara
  fimpara
  escreval
  escreval("Digite Um Número Para Multiplicar")
  leia(x)
  escreval
  para i de 1 ate 5 faca
    vetA[i,2] := vetA[i,2]*x
  fimpara
  para i de 1 ate 5 faca
    para j de 1 ate 5 faca
      a := numpcarac(vetA[i,j])
      se (vetA[i,j] >-1 ) e (vetA[i,j] < 10) ENTÃO
        a := "    "+a
      senao
        se (vetA[i,j] >= 10) e (vetA[i,j] < 100) ENTÃO
          a := "   "+a
        senao
          se (vetA[i,j] >= 100) e (vetA[i,j] < 1000) ENTÃO
            a := "  "+a
          senao
            a := " "+a
          fimse
        fimse
      fimse
      se j < 5 ENTÃO
        a := a+" - "
      fimse
      escreva( a )
    fimpara
    escreval("")
  fimpara
fimalgoritmo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

@lucianogrecco, você citou o quê se pede (enunciado) e um código. Mas não relatou o que está te fazendo...

Em 17/11/2017 às 21:07, lucianogrecco disse:

embaralhar a cabeça

 

Então... a ideia é que tente identificar qual problema está tendo, para assim tentar achar uma solução. O segredo é fazer por partes. Por exemplo: apenas ler a matriz e exibe ela na tela. Assim verás se está lendo corretamente. Após, adicionar a tal multiplicação por x. Pronto. O programa seria isso.

 

 

Segue mais ou menos estrutura desejada:

- Leia a matriz A 5x5;
- Leia o valor de X;
- Exiba a matriA (etapa interessante para mostrar os valores atuais da matriz)
- Multiplique a coluna 2 dessa da matriz A por x.
- Exiba a matriA

 

 

Versão estendida:

 

Alguns pontos:

 

1) "INICIALIZAÇÃO/PREENCHIMENTO DAS VARIÁVEIS"

Em 17/11/2017 às 21:07, lucianogrecco disse:

Faça um algoritmo para ler uma matriz 5x5 de números inteiros e ler um número inteiro x.

A parte da leitura da matriz está correta. Faltou apenas ler o valor de x. O enunciado inclusive já sugere isso (apesar de ser implícito).

 

Em 17/11/2017 às 21:07, lucianogrecco disse:

inicio
para i de 1 ate 5 faca
   para j de 1 ate 5 faca
      escreva("Digite os numeros: [",i, " + ", j, " ] ")
      leia(vetA[i,j])
   fimpara
fimpara

para i de 1 ate 5 faca
   para j de 1 ate 5 faca
      escreva(vetA[i,j]*x)
   fimpara
   escreval("")
fimpara

 

Veja, logo após preencher a matriz (lendo cada um dos valores), você já partiu para multiplicação das posições por x, mas qual seria o valor de x nesse momento? ou seja, x não terá valor algum*. Da mesma forma que você precisou ler o valores de cada posição da matriz, é necessário ler antes o valor do x.

 

* no Visualg, ao rodar o programa, automaticamente as variáveis são zeradas, ou seja, as variáveis numéricas ficarão com 0 (zero). Logo, ao multiplicar por x, a matriz será zerada.

 

Se seu código estiver rodando, verás que está resultando em uma matriz nula. Justamente porque você não leu o x e este acaba ficando com 0. (vide propriedade do elemento nulo da multiplicação)

 

Outro ponto importante é que "você estaria apenas exibindo a matriz multiplicada pelo tal escalar", ou seja, até então a matriz continuará com os valores atuais. Mas o enunciado pede que você multiplique a coluna da matriz em si, logo, as posições ai2 deverão ser atualizadas, e após você exibe a matriz. Percebe? uma coisa é "você mostrar uma matriz diferente na tela", outra é "atualizar a matriz em si e depois exibir ela".

 

 

2) REQUISITOS DO ENUNCIADO

2.1) ESCOPO DE NÚMEROS ENVOLVIDOS

Em 17/11/2017 às 21:07, lucianogrecco disse:

A seguir, o algoritmo deve multiplicar os elementos da segunda coluna da matriz por x e exibir a matriz modificada

 

Você tem esse código:

para i de 1 ate 5 faca
   para j de 1 ate 5 faca
      escreva(vetA[i,j]*x)
   fimpara
   escreval("")
fimpara

Nesse caso você está multiplicando TODAS as posições por x (cada um dos aij), mas o enunciado é claro em dizer que é só os elementos da segundo coluna. (obs.: além da questão que não é para exibir essa multiplicação, mas sim apenas atualizar a posição na matriz, e depois exibir ela já atualizada).

 

 

2.2) REQUISITO NÃO SOLICITADO

 

Em 17/11/2017 às 21:07, lucianogrecco disse:

para i de 1 ate 5 faca
   para j de 1 ate 5 faca
      vetB[i,j]<- (vetA[i,j]^5)
   fimpara
fimpara

 

Pelo que eu entendi, você está fazendo uma espécie de cópia do vetA (já atualizado por x), em vetB. Mas além disso está antes elevando cada posição a 5ª potência. Pelo que você postou, isso não foi pedido. Simplesmente apague esse trecho. A matriz B não é necessária.

 

 

 

3) ALGUMAS SUGESTÕES À PARTE

 

3.1) SEPARAÇÃO DE PARÂMETROS DO ESCREVA()

Nos algoritmos, após as "," não é necessário dar espaço (diferente do nosso idioma Português, que por costume, exige que a "," fique encostada na palavra a esquerda, e um espaçamento na direita).

 

 

Seu código atual:
 

23 horas atrás, devair1010 disse:

escreva("Digite os numeros: [",i, " + ", j, " ] ")

 

Como sugiro:

escreva("Digite os numeros: [",i," + ",j," ] ")

Entendo que este segundo código fica mais agradável para leitura e interpretação. (do mesmo modo que,teoricamente,não existe uma regra para darmos um espaço após a vírgula,mas ao não usá-lo,torna a leitura desagradável.Concorda?)

 

obs.: para a "regras do Visualg" não faz diferença entre dar espaço ou não. Se trata apenas de um pequeno detalhe e tentativa de, um suposto, "bom costume". Você pode usar da forma que achar melhor.

 

 

3.2) REPRESENTAÇÃO DE POSIÇÕES DE MATRIZ

Usam-se ",",  em detrimento do "+".

Ex.:

escreva("Digite os numeros: [",i," , ",j," ] ")

 

 

3.3) ESPAÇAMENTO DE EXIBIÇÃO

Não precisa de espaços na hora de exibir, ex.:

escreva("Digite os numeros: [",i,",",j,"]")

Mas mesmo assim (no que eu entendo com uma bug do Visualg), ele automaticamente insere um espaço antes do número. Fica assim:

matriz1.jpg

 

Para corrigir, dá para usar o recurso de "formatação". Ex.;

escreva("Digite os numeros: [",i:1,",",j:1,"]")

Esse ":numero" após a variável, indica ao interpretador que será reservado "numero" espaços a esquerda antes de ser impresso. Ao usar ":1", reservará um espaço, que será justamente o próprio número, daí ficara colado. Ex.:

matriz2.jpg

 

 

 

3.4) REORGANIZAÇÃO FINAL

Apenas uns ajustes para ficar mais organizado:

escreva("Digite o numero [",i:1,",",j:1,"]: ")

matriz3.jpg

 

Obs.: também acho muito repetitivo ficar solicitando a mesma coisa toda hora, basta algo como uma vez informar "Digite os números da matriz" e após só exibir as coordenadas. Evitar esses "digite", digite", "digite"... 

 

 

 

4) AUTOMATIZAÇÃO DE LEITURA

O Visualg disponibiliza um recuso chamado "aleatorio" que facilita bastante a leitura dos dados. Ex.:

para i de 1 ate 5 faca
   para j de 1 ate 5 faca
      escreva("Digite o numero [",i:1,",",j:1,"]: ")
      //aleatorio on
      leia(vetA[i,j])
      //aleatorio off
   fimpara
fimpara

 

Desta forma, o leia será preenchido automaticamente pelo programa. :)

 

obs.: eu deixei como comentário. Para ativar, apenas retire o "//". Para desativar novamente, basta volta como antes.

 

 

***


 

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×