Jump to content
Montesuma Oliveira

O Vetor não adiciona novas entradas

Recommended Posts

Olá aos mestres do algoritmo com VisuAlg, tenho o seguinte algoritmo:

 

algoritmo "Estrutura Indexadas - Vetor(Array)"
// Seção de Declarações
var
indice, qtd_Veiculos, tot_Veiculos : inteiro
nome_veiculo: vetor [1..40] de caractere

inicio
// Seção de Comandos
escreval("Digite a Quantidade de Veículos para Cadastrar ou -1 Para Sair: ")
leia(qtd_Veiculos)
enquanto qtd_Veiculos <> -1 faca
   para indice de 1 ate qtd_Veiculos faca
      escreva("Digite o Nome do Veículo: ")
      leia(nome_veiculo[indice])
   fimpara
   tot_Veiculos <- 0
   tot_Veiculos <- (tot_Veiculos + (indice + 1))
   escreval("Digite a Quantidade de Veículos para Cadastrar ou -1 Para Sair: ")
   leia(qtd_Veiculos)
fimenquanto
para indice de 1 ate tot_Veiculos faca
   escreval("O Veículo ", nome_veiculo[indice], " tem o índice ", indice)
fimpara
fimalgoritmo

Estou usando vetor, o que acontece é o seguinte, por exemplo, digite dois veículos, quando ele retorna perguntando se quero encerrar, eu digo que quero incluir mais dois veículos, ao digitar -1 para sair, ele imprime somente os dois últimos veículos cadastrados e não 4 veículos, que deveria ser o correto, conforme figura anexa. Onde estou errando? Fico no aguardo de ajuda, muito grato.

 

 

 

 

 

 

 

 

 

 

 

Saida.png

Share this post


Link to post
Share on other sites

Montesuma Oliveira

Existe um erro na sua lógica.

Quando você faz o laço para colocar o nome do carro você sempre começa do INDICE 1 até a quantidade.

para indice de 1 ate qtd_Veiculos faca
      escreva("Digite o Nome do Veículo: ")
      leia(nome_veiculo[indice]) <-- aqui você sempre começa de 1 até quantidade. (Errado)
   fimpara

Então eu digito 2 e escrevo na posição 1 o nome A e na posição 2 o nome B.

Quando você digita 2 novamente para adicionar outros nomes você faz novamente a mesma coisa.

Escreve na posição 1 o nome C e na posição 2 o nome C

 

Para arrumar isso eu recomendo você a mudar o leia(nome_veiculo[indice]) alterando o indice para uma outra variável e incrementando ela dentro do seu laço.

 

Assim:

// Seção de Declarações
var
indice, qtd_Veiculos, tot_Veiculos, POSICAO : inteiro
nome_veiculo: vetor [1..40] de caractere

inicio
// Seção de Comandos
escreval("Digite a Quantidade de Veículos para Cadastrar ou -1 Para Sair: ")
leia(qtd_Veiculos)
enquanto qtd_Veiculos <> -1 faca
   para indice de 1 ate qtd_Veiculos faca
      posicao = posicao + 1
      escreva("Digite o Nome do Veículo: ")
      leia(nome_veiculo[POSICAO])
   fimpara
   tot_Veiculos <- POSICAO
   escreval("Digite a Quantidade de Veículos para Cadastrar ou -1 Para Sair: ")
   leia(qtd_Veiculos)
fimenquanto
para indice de 1 ate tot_Veiculos faca
   escreval("O Veículo ", nome_veiculo[indice], " tem o índice ", indice)
fimpara
fimalgoritmo

Então neste caso a lógica fica:

Digito 2 e escrevo na posição 1 o nome A e na posição 2 o nome B.

Quando digitar +2 para adicionar outros nomes, eu não vou iniciar o Vetor novamente do Indice 1, tenho que iniciar da posição 3.

Mudando o indice para posicao e adicionando sempre +1 antes de mover o valor vamos colocar na posição 3 o nome C e na posição 4 o nome D.

 

Se a minha resposta for útil não esqueça de agradecer e votar positivo.

Espero ter ajudado de alguma forma.

 

Att
Felipe Guedes Coutinho

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By luadiego
      algoritmo "ESCOLHA DE NUMEROS PARES OU IMPARES UNSANDO A ESTRUTURA DE CONDICIONAMENTO ESCOLHA COM A ESTRUTURA DE REPETIÇÃO PARA"
      var
         V,MUN,VALORES:INTEIRO
      inicio
          ESCREVA("DIGITE O NUMERO DESEJADO :")
          LEIA(V)
          escreval("----------------------------")
          escreval("  [1] PARA PAR              ")
          escreval("  [2} para IMPAR            ")
          ESCREVAL("----------------------------")
          ESCREVAL("ESCOLHA UM DOS VALORES")
          LEIA(VALORES)
          ESCOLHA(VALORES)
          caso 1
          PARA MUN <- 0 ATE V FACA
           SE (MUN MOD 2 =0) ENTAO
            escreval(MUN)
           FIMSE
          MUN <- MUN +1
          FIMPARA
           caso 2
         PARA MUN <- 0 ATE V FACA
           SE (MUN MOD 2 =1) ENTAO
            escreval(MUN)
           FIMSE
          MUN <- MUN +1
          FIMPARA
         FIMESCOLHA
      fimalgoritmo
    • By luizcmoficial
      escreval("CPF COMPLETO: ",vet[1],vet[2],vet[3]," .",vet[4],vet[5],vet[6]," .",vet[7],vet[8],vet[9]," -",digitoum,digitodois)

      Gostaria de deixar os números um do lado do outro, porém sem esse espaçamento.
      Os números sempre ficam todos meio separados, desta maneira: 3 2 1 . 1 4 3 . 1 2 2 - 5 9
      Não conheço nenhum comando que consiga fazer isso, ou nem sei se existe algum jeito. 
    • By luizrufino
      Boa tarde pessoal, estou com dificuldade para 
      desenvolver as linhas de códigos de um problema.
       
      Escreva um algoritmo em potrugol que leia o NOME do responsável e o número de filhos matriculados em uma escolinha de futebol. com mensalidade de $120,00, imprimir o valor que o responsável vai pagar, baseando-se na seguinte tabele de descontos
       
      filhos matriculados        Desconto
       1                                             10%
       2 a 3                                       15%
      acima de  3                             20
       
      Se alguém puder me ajudar, pode ser somente a estrutura básica.
    • By pedrof
      algoritmo "Bhaskara" var a, b, c, delta, raiz_delta, x1, x, x_delta, x2: Real inicio Escreva("Informe um numero inteiro diferente de 0: ") Leia(a) Escreva("Informe outro numero inteiro diferente de 0: ") Leia(b) Escreva("Novamente, informe outro numero inteiro diferente de 0: ") Leia(c) delta <- (b^2-4*a*c) Se (delta<0) entao delta <- Abs(delta) raiz_delta <- (RaizQ(delta)) x <- (b-b*2)/(2*a) x_delta <- raiz_delta/(2*a) x1 <- (x, "+", x_delta, "i") x2 <- (x, "-", x_delta, "i") Escreval("Utilizando ", a, " como 'a', ", b, " como 'b', ", c, " como 'c' em Delta e aplicando a ") Escreval("Formula de Bhaskara, chegamos ao resultado:) Escreva("x1 = ", x1, " e x2 ", x2) FimSe fimalgoritmo

      Parece ser algo bem idiota, mas não estou conseguindo resolver... Ajuda?
    • By marizita
      algoritmo "semnome"
      // Função :
      // Autor :
      // Data : 17/06/2019
      // Seção de Declarações 
      var
      i,j,aux:inteiro
      Matriz_A: vetor [1..3,1..3] de inteiro
      Matriz_B: vetor [1..3,1..3] de inteiro
      matriz_C: vetor [1..3,1..3] de inteiro

      inicio
      // Seção de Comandos 
      // VETOR A
      para i de 1 ate 3 faca
           para j de 1 ate 3 faca
            escreval ("matriz A: coluna:",i,"linha:",j)
            escreval ("informe o valor da posicao: [",i,"]: [",j,"]:")
            leia(matriz_A[i,j])
         fimpara
        fimpara
        limpatela

      //VETOR B
      para i de 1 ate 3 faca
         para j de 1 ate 3 faca
            escreval ("matriz B: coluna:",i,"linha:",j)
            escreval ("informe o valor da posicao: [",i,"]: [",j,"]:")
            leia(matriz_B[i,j])
         fimpara
         fimpara
        limpatela
        
        //VETOR C
        Para i de 1 ate 3 faca
              Para j de 1 ate 3 faca
                  matriz_C [i,j] <- ( matriz_A[i,1] * matriz_B[1,j] ) + (matriz_A[i,2] * matriz_B[2,j] ) + (matriz_A[i,3] * matriz_B[3,j] )
                  Escreval("matriz_C ",i , " x ",j , " : ", matriz_C [i,j])
              Fimpara
          Fimpara
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.