Ir para conteúdo

Arquivado

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

fernando_souza

problemas com algoritmo no visualg

Recommended Posts

me ajudem com esta questao por favar

 

Ler um vetor com 10 números inteiros e gerar um segundo vetor com os elementos

do vetor lido menos os elementos repetidos. Ou seja, todos os números que

aparecem no vetor lido, devem aparecer uma única vez no vetor gerado.

Ex : VetorLido = 5 1 2 7 5 3 7 5 9 3 VetorGerado = 5 1 2 7 3 9

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae beleza! Olha eu fiz aqui no Visualg, qualquer coisa passa pra linguagem que você usa, aqui deu certo testa ai...Se souber fazer de outra maneira poste ai pra galera, achei interessante o problema, porém da proxima vez poste ate que ponto você conseguiu, mostre interesse!

 

 

algoritmo "separação de números iguais"
// Função :
// Autor : Johnny Willer Gasperi Gonçalves
// Data : 31/07/2011
// Seção de Declarações 
var
vnum1, vnum2: vetor [1..10] de inteiro
i, aux, j: inteiro
terminado: logico
inicio
// Seção de Comandos 
para i de 1 ate 10 faca
escrevaL (" Digite o ", i, "º número que deseja incrementar no 1º vetor")
leia (vnum1[i])
vnum2[i] <- vnum1[i]
fimpara
j <- 9
aux <- 1
enquanto terminado = falso faca
para i de 1 ate j faca
se vnum2[aux + i] = vnum2[aux] entao
vnum2[aux + i] <- 0
fimse
se i = j entao
aux <- aux + 1
j <- j - 1
fimse
se aux > 9 entao
terminado <- verdadeiro
fimse
fimpara
fimenquanto
escrevaL ("---------------------- VETOR 1 ----------------------")
para i de 1 ate 10 faca
escreva (vnum1[i], "  ")
fimpara
escrevaL ("")
escrevaL ("")
escrevaL ("---------------------- VETOR 2 ----------------------")
para i de 1 ate 10 faca
se vnum2[i] <> 0 entao
escreva (vnum2[i], "  ")
fimse
fimpara
fimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ow Johnny gostei da resolução, me perdi um pouco ai no meio.

Me explica uma coisa: voce checa a 2ª posição com a 1ª, a 3ª com a 2ª, e assim por diante, se eu tiver por exemplo um vetor como este: [1,2,3,1,4..], no caso o 1º e o 4º são iguais, eu nao entendi onde ele compara essas duas posiçoes? Só que dá certo pq no resultado só aparece o 1 uma unica vez, só nao entendi quando ele comparou as duas posições...

 

Abços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ulysses, que bom que você gostou ;D. Bom na verdade o algoritmo não está comparando a 2ª posição com a 1ª e a 3ª com a 2º, você entendeu um pouquinho errado. Vou explicar, se o algoritmo verificasse da forma que você citou certamente não estaria certo pois como você disse no seu exemplo a 1ª posiçao e a 4ª são iguais, assim apareceria duas vezes o nº1.

Na verdade esse codigo realiza o seguinte cálculo, ele verifica a 1ª posição com todas as outras

para i de 1 ate j faca
             se vnum2[aux + i] = vnum2[aux] entao
                vnum2[aux + i] <- 0
             fimse

Você pode ver que a unica coisa que muda é o i que cada vez aumenta 1 assim o vetor corre todas as posições comparando apenas com a 1ª dele mesmo.

Quando o i chegar a 9 logicamente as posições do vetor acabaram então.

se i = j entao
                aux <- aux + 1
                j <- j - 1

Agora como você ve o aux valerá 2 entao serão comparadas todas as posições do vetor com a 2ª dele mesmo e assim por diante até acabar todas as posições, o j diminuiu 1 porque como o aux vale +1 o j tem de diminuir 1 :D

Ve se você entendeu, qualquer coisa peça ai.

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah agora entendi.

Eu tinha me equivocado, tinha lido "aux+1" em vez de "aux+i" por isso que eu nao tava entendendo, hahaha.

Mas blza gostei do codigo, vou tentar utilizar naquele de uniao dos vetores, q ate agora nao consegui resolver :/

abrços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dai, tudo certo?

 

Então, sou novo na programação e estou estudando algoritmos, mais um em especial está me deixando confuso.

Faça um algoritmo que leia um número de notas (só será informado na execução) compare todas, e apresente a maior e a menor, em vetor.

 

Até agora, fiz uma parte que ainda está dando erro de sintaxe. Por favor, me ajudem.

Algoritmo "Obter notas e apresentar menor e maior em vetor"
Var

   nNotas: VETOR[1..50] DE INTEIRO
   I: INTEIRO
   nNumero:Inteiro
   nMaior, nMenor: INTEIRO

Inicio

   Escreva("Digite o número de notas que você deseja calcular: ")
   Leia(nNumero)

   Para I De 1 Ate nNumero Passo 1 Faca
      Escreva("Digite a", I,"° nota: ")
      Leia(nNotas[I])
   Fimpara

   nMaior <- nNotas[1]
   nMenor <- nNotas[2]

   Para I De 1 Ate nNumero Passo 1 Faca
      Se nMenor <= nNotas[I] Entao
         nMaior <- nNotas[I]

      Senao
         Se nMaior >= nNotas[I] Entao
            nMenor <- nNotas[I]

         Fimse
      Fimse
   Fimpara

   Escreval("A nota maior é", nMaior)
   Escreval("A nota menor é", nMenor)
   Fimalgoritmo

Essa é a parte que eu fiz.

 

LEMBRANDO: Este algoritmo está sendo feito pelo Visualg

 

Desde já agradeç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.