Ir ao conteúdo
  • Cadastre-se

Vetores visualg como inverter os valores?


Posts recomendados

"Desenvolva um algoritmo que permita a leitura de um vetor de 30 números inteiros, e gere um segundo vetor com os mesmos dados, mas de maneira invertida, ou seja, o primeiro elemento ficará na última posição, o segundo na penúltima, e assim por diante."

 

Foi isso que consegui até agora:


algoritmo "semnome"
// Função :
// Autor :
// Data : 15/10/2016
// Seção de Declarações
var
v,v2:vetor[1..30] de inteiro
i,i2,tam,cont:inteiro
inicio
tam<-30
para i de 1 ate tam faca
   leia(v[i])
   i2<-v[i]
fimpara
para i de 1 ate tam faca
   v2[i]<-i2
   i2<-i2-1
fimpara
fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @ET Bilu,

 

Veja:

16 horas atrás, ET Bilu disse:

para i de 1 ate tam faca
  leia(v[i])
  i2<-v[i] //a cada loop (volta do laço de repetição) o i2 recebe um novo valor, logo,
           //não faz sentido ficar atribunido valor a ele aqui, pois o anterior será perdido
fimpara

 

Tire essa segunda linha. (ou reveja a lógica que tentou utilizar)

 

Primeiro você precisa simplesmente gerar um vetor de inteiros (trecho acima, basta o leia()). Após, pegar os dados desse vetor e jogar no outro, de modo que os dados fiquem invertidos, como indicado no enunciado.

 

Pense assim: como posso associar a primeira posição de um vetor com  a ultima de outro?

 

 

 

No aguardo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @ET Bilu.

 

O que você define como "posição atual -1"? seria posição do i lá no para -1?

Se a "posição atual" for 30, terá 30-1=29. Creio que não vai servir...

 

A posição 1 tem que corresponder à 30 (ou 30 tem que corresponder à 1, dá na mesma)

Posição 2 à 29

Posição 3 à 28

Posição 4 à 27

Assim sucessivamente.

 

No aguardo.

 

 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@ET Bilu     Do jeito que está não funciona  porque i2 é uma variável simples, então ela
recebe e mantém o valor naquele momento com isso a cada vez que o loop se repete ela

tem um valor diferente, sendo que no final ela conterá o último valor digitado e coletado

pelo leia. Se i2 fosse um vetor aí sim ele teria todos os valores digitados assim como v, mas

não estaria em ordem inversa.
   Um jeito de fazer isso seria colocando uma variável começando de 30 e a cada passada

ela fosse decrementada, passando para 29 depois para 28 até que no final ela teria o valor

1, e ali mesmo no primeiro loop você já coloca o número no vetor v2 usando essa variável.
Então usando i2 como essa variável, antes do loop coloque

i2 := 30

Aí dentro do primeiro loop ficaria assim :

   escreva("digite um numero e tecle enter")
   leia(v[i])
   v2[i2]:=v[i]
   i2 := i2-1

com isso ele vai posicionando os números em ordem inversa no segundo vetor.
agora pode-se escrever na tela para ver como ficou, então no segundo loop
que vai de 1 ate 30 coloque só isso:

escreval("em v= ",v[i],"  <--->  "," em v2= ",v2[i])

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @devair1010.

 

Seu raciocínio me pareceu correto também... mas por favor, só evite da uma resposta pronta pro usuário. Abaixo levando uma questão...

 

O enunciado diz:

Em 16/10/2016 às 16:07, ET Bilu disse:

...leitura de um vetor de 30 números inteiros, e gere um segundo vetor com os mesmos dados.

Pelo que eu entendi, primeiro deve ler os 30 número, e com o vetor pronto, gera um segundo com os dados que está nesse primeiro vetor. No seu código, você está gerando os dois ao "mesmo tempo". Vejam, não é só o resultado final que importa, pois daria por exemplo para usar apenas um vetor... e na hora de imprimir, iria imprimindo um valor em ordem crescente e o outro se invertido, algo como:

escreval("em v= ",v[i],"  <--->  "," em v2= ",v[i2])

No caso o i2 tendo o valor decrescente. Atenção: essa solução acima NÃO seria válida!!!

 

@ET Bilu, caso queira tentar fazer separado (ler um vetor, e gerar o segundo a partir dele), dá para usar o mesmo raciocínio sugerido por @devair1010... a base desse problema é que "a posição no segundo vetor tem que ser simétrico a posição no primeiro".

v2[xxx]:=v[yyy]

Ou seja, o valor em xxx deverá ser simétrico* ao valor em yyy. Ex.: Se yyy=1 então xxx=30, se yyy=2, então xxx=29.

 

Ai pode usar esse raciocínio de usar outro contador decrescente, ou usar uma fórmula que correlacione essa simetria, ou outra forma que consiga imaginar/descobrir...

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas @devair1010  Meu professor ajeitou o algoritmo, agora funciona.

 

algoritmo "semnome"
// Função :
// Autor :
// Data : 15/10/2016
// Seção de Declarações
var
v,v2:vetor[1..30] de inteiro
i,tam,cont:inteiro
inicio
tam<-30
para i de 1 ate tam faca
   leia(v[i])
fimpara
cont<-tam
para i de 1 ate tam faca
   v2[i]<-v[cont]
   cont<-cont-1
fimpara
para i de 1 ate tam faca
escreval(i:3," - ", v[i]:6," - ", v2[i]:6)
fimpara
fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @ET Bilu.

 

Veja que esse utilizou a mesma lógica apresentada por @devair1010 com um "contador decrescente" e também separou as partes... primeiro leu, depois gerou o novo.

 

Abaixo demonstro um  outra forma:

algoritmo "semnome"
// Autor : Simon Viegas
// Data  : 21/10/2016
var
  v, v2 :vetor[1..30] de inteiro
  i,tam :inteiro
  
INICIO
tam<-30
para i de 1 ate tam faca
  //leia(v[i])
  v[i]<-randI(1000) //gera um número aleatório entre 0 e 999
fimPara
para i de 1 ate tam faca
   v2[i]<-v[(tam-i)+1] //correlaciona i com seu inverso*
fimPara
para i de 1 ate tam faca
  escreval("Posição: ",i:2," em V=",v[i]:3," <--->"," em V2=",v2[i]:3)
fimPara
fimAlgoritmo

 

Abraços

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...