Ir ao conteúdo
  • Cadastre-se

Algoritmo visualg posição


Posts recomendados

Alguém me explica como coloca a posição do primeiro valor digitado caso ele seja o maior ou o menor? Por exemplo eu estou digitando de 1 ate 10 aí no final aparece que a posição do menor(1) é 0 e se eu digitar ao contrario (de 10 ate 1) aparece que a posição do maior (10) é 0. Por favor me ajuda alguém! É urgente !!!

algoritmo "maior e menor"
var
vet: vetor [1..10] de inteiro
N,MA,ME,contador,posma,posme,a:inteiro

procedimento lernumero()
inicio

para a de 1 ate 10 faca
escreva("Escreva o ",a,"º número: ")
leia(vet[a])
fimpara
fimprocedimento


procedimento comparar()
inicio
para a de 1 ate 10 faca

se (contador=0) então
ME <- vet[a]
MA <- vet[a]
fimse
se vet[a] > MA então
MA <- vet[a]
posma<-a
fimse
se vet[a] < ME então
ME <- vet[a]
posme<-a
fimse


contador<-contador+1

 fimpara


fimprocedimento

inicio
contador<-0
lernumero()
comparar()

escreval ("MAIOR:",MA," posição",posma)
escreval ("MENOR:",ME," posição",posme)

fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Ana Leticia Montelo.

 

Perceba, qual variável está apresentando o valor errado? então, faltou inicializá-las (posma e posme), assim como foi feito com MA e ME.

 

 

 

 

PS: abaixo seu código identado (apenas alterei de "então" para "ENTÃO", para o VisuAlg não dar erro).

algoritmo "maior e menor"
var
   vet: vetor [1..10] de inteiro
   N,MA,ME,contador,posma,posme,a:inteiro

procedimento lernumero()
   inicio
   para a de 1 ate 10 faca
      escreva("Escreva o ",a,"º número: ")
      leia(vet[a])
   fimpara
fimprocedimento

procedimento comparar()
   inicio
   para a de 1 ate 10 faca
      se (contador=0) ENTÃO
         ME <- vet[a]
         MA <- vet[a]
      fimse
      se vet[a] > MA ENTÃO
         MA <- vet[a]
         posma<-a
      fimse
      se vet[a] < ME ENTÃO
         ME <- vet[a]
         posme<-a
      fimse
      contador<-contador+1
   fimpara
fimprocedimento

inicio
contador<-0
lernumero()
comparar()
escreval ("MAIOR:",MA," posição",posma)
escreval ("MENOR:",ME," posição",posme)
fimalgoritmo


 

No aguardo.

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

Obrigada! Muito obrigada!

Eu o modifiquei e fiz assim:

 

algoritmo "Questão 5"
//Escrever um algoritmo que leia um vetor com 10 elementos inteiros e
//determine o maior e o menor elementos deste vetor, bem como suas
//posições. Estes valores devem ser escritos no algoritmo principal e
//devem ser passados/recebidos pela função
var
vet: vetor [1..10] de inteiro
contador,a,ma,me,posma,posme:inteiro

procedimento lernumero():inteiro

inicio
para a de 1 ate 10 faca
escreva("Escreva o ",a,"º número: ")
leia(vet[a])
fimpara
fimprocedimento

Procedimento comparar()
inicio
me<-vet[1]
ma<-vet[1]
posma<-1
posme<-1
para a de 2 ate 10 faca
     se me > vet[a] então
      me<- vet[a]
      posme<-a
     fimse
fimpara

para a de 2 ate 10 faca
     se ma < vet[a] então
      ma<- vet[a]
      posma<-a
     fimse
fimpara
   escreval("O menor elemento do vetor é" , me, " e está na posição ",posme)
   escreval("O maior elemento do vetor é" , ma, " e está na posição ",posma)
fimprocedimento

inicio
 lernumero()
 comparar()

fimalgoritmo

 

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

  • Membro VIP

Olá @Ana Leticia Montelo.

 

Inicialmente, para facilitar a visualização do código, segue o seu código reidentado (usei espaçamento 3, sem tabulação inteligente):

algoritmo "Questão 5"
//Escrever um algoritmo que leia um vetor com 10 elementos inteiros e
//determine o maior e o menor elementos deste vetor, bem como suas
//posições. Estes valores devem ser escritos no algoritmo principal e
//devem ser passados/recebidos pela função
var
   vet: vetor [1..10] de inteiro
   contador,a,ma,me,posma,posme:inteiro

procedimento lerNumero():inteiro
   inicio
   para a de 1 ate 10 faca
      escreva("Escreva o ",a,"º número: ")
      leia(vet[a])
   fimPara
fimProcedimento

Procedimento comparar()
   inicio
   me<-vet[1]
   ma<-vet[1]
   posma<-1
   posme<-1
   para a de 2 ate 10 faca
      se me > vet[a] então
         me<-vet[a]
         posme<-a
      fimSe
   fimPara
   para a de 2 ate 10 faca
      se ma < vet[a] então
         ma<-vet[a]
         posma<-a
      fimse
  fimPara
  escreval("O menor elemento do vetor é" , me, " e está na posição ",posme)
  escreval("O maior elemento do vetor é" , ma, " e está na posição ",posma)
fimProcedimento

INICIO
lernumero()
comparar()
fimAlgoritmo


Vamos lá:
1) VERIFICAÇÃO DO MENOR E MAIOR

Você está utilizando 2 for idênticos para fazer a mesma coisa, no entanto, poderia (diria que deve) fazer com o for só.

 

2) USO "MELHOR" DAS VARIÁVEIS

Que tal em vez de usar uma variável para armazenar o menor e maior, apenas utilizar a posição??? ou seja, se você já tem a posição, basta usar a posição no vetor!!!!! (apague ma e me e ajuste o código)

 

2) CONDIÇÕES MUTUAMENTE EXCLUDENTES (deixe esse para depois do código pronto)

Para essa parte, necessariamente tem que verificar o item 1...

Resumidamente falando é que você deve usar SE/SENAO/SE, em vez de 2 SE isolados para verificar o menor e maior números. Se você ainda não estudou SE/SENÃO, pode deixar seu código sem ele, mas recomendo se adiantar, e se for o caso, ter 2 códigos...

 

Explicadamente falando seria:
Sempre que observo tento levantar essa questão... então, quando um ou mais eventos não podem ocorrer ao mesmo tempo, não faz sentido (lógico) continuar verificando o restante dos eventos quando um deles já ocorreu antes...

Como assim? você pode perguntar... No caso, se um número for "maior que o maior", ele jamais será ao mesmo tempo "menor que o menor" (mesmo inicialmente, pois eles começam iguais), logo, se ele já é "maior...." não se faz necessário depois verificar se ele é "menor..." também... É uma incoerência lógica, entende? Do jeito que está, ele verificará se é maior, e mesmo atualizando, continua e verifica se é menor... mas não deveria ("perda de tempo").

Vide por exemplo essa fonte (e se deseja, dá um Google):
https://pt.wikipedia.org/wiki/Eventos_mutuamente_exclusivos


Obs.: como disse, se não entender muito bem, não precisa ver isso agora... se quiser depois explico com mais calma.

***

No aguardo.

  • Curtir 1
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...