Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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

 

  • Membro VIP
Postado

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.

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...