Ir para conteúdo

POWERED BY:

Arquivado

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

lincon_

[Resolvido] Retirando os valores nulos e negativos do vetor

Recommended Posts

olá pessoal, to com problema nesse algoritmo

 

faca um algoritmo que leia um vetor a de 30 posicoes. em seguida compacte o vetor, retirando os valores nulos e negativos. coloque o resultado num vetor b.

beleza, eu fiz, só que quando fui testar vi que quando os valores de a são nulos ou negativos o vetorb assume o valor zero, e não os elimina.. alguém tem idéia de como fazer corretamente?

 

segue o que eu fiz, no visualg

 

algoritmo "semnome"

var

veta: vetor [1..30] de inteiro

vetb: vetor [1..30] de inteiro

k:inteiro

 

inicio

...para k de 1 ate 30 faca

......leia (veta[k])

...fimpara

...para k de 1 ate 30 faca

......se (veta[k] > 0) entao

...........vetb[k]<-veta[k]

......fimse

...fimpara

...para k de 1 ate 30 faca

......escreva (vetb[k])

...fimpara

fimalgoritmo

 

é isso aí. valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso acontece pq você esta varrendo o vetor b todo, faça o mesmo if quando for apresentar o vetorb, filtrando apenas os positivos. O vetor b aparece como zero pq nao foi atribuido nenhum valor a ele e provavelmente o visualg faz isso.

 

Outra coisa que você pode fazer tb é, ler o veta com aquele if ali filtrando apenas os positivos, ordenar o vetor de modo a nao ficar nenhum valor zerado ou negativo, ou seja, você varre ele e onde tiver o zero ou negativo, joga o proximo elemento por cima, e colocar um contador q incrementa a cada iteração q o numero for positivo. Depois você usar o contador pra dizer pro for quantos loops ele vai fazer. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso acontece pq você esta varrendo o vetor b todo, faça o mesmo if quando for apresentar o vetorb, filtrando apenas os positivos. O vetor b aparece como zero pq nao foi atribuido nenhum valor a ele e provavelmente o visualg faz isso.

 

Outra coisa que você pode fazer tb é, ler o veta com aquele if ali filtrando apenas os positivos, ordenar o vetor de modo a nao ficar nenhum valor zerado ou negativo, ou seja, você varre ele e onde tiver o zero ou negativo, joga o proximo elemento por cima, e colocar um contador q incrementa a cada iteração q o numero for positivo. Depois você usar o contador pra dizer pro for quantos loops ele vai fazer. :D

beleza, é isso mesmo http://forum.imasters.com.br/public/style_emoticons/default/clap.gif valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

algoritmo "semnome"

var

veta: vetor [1..30] de inteiro

vetb: vetor [1..30] de inteiro

k:inteiro

 

inicio

...para k de 1 ate 30 faca

......leia (veta[k])

...fimpara

...para k de 1 ate 30 faca

......se (veta[k] > 0) entao

cont<-cont+1;

...........vetb[cont]<-veta[k]

......fimse

...fimpara

...para k de 1 ate cont faca

......escreva (vetb[k])

...fimpara

fimalgoritmo

 

é isso ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites
para k de 1 ate 30 faca

......se (veta[k] > 0) entao

cont<-cont+1;

...........vetb[cont]<-veta[k]

......fimse

...fimpara

 

P/ que fazer outro loop só p/ filtrar os números positivos? Deixe o if e a escrita dentro do loop de leitura..

 

algoritmo "semnome"
var
veta: vetor [1..30] de inteiro
vetb: vetor [1..30] de inteiro
k,cont:inteiro

inicio
  cont = 0
  para k de 1 ate 30 faca
  leia (veta[k])
  se (veta[k] > 0)
	  vetb[cont] = veta[k]
	  cont++
  fim se
  fimpara
fimalgoritmo

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.