Ir ao conteúdo
  • Cadastre-se

VisualG Algoritmo em Visualg Informar qual corredor recebeu o maior e menor tempo.


Posts recomendados

Alguem pode me ajudar com este algoritmo, 

algoritmo "semnome"

var

c1,c2,c3,c4, tempo_maior, tempo_menor:real

inicio

c1 <- 1
c2 <- 2
c3 <- 3
c4 <- 4
//escreva("Informe o tempo do jogador 1: ")
//leia (c1)
//escreva("Informe o tempo do jogador 2: ")
//leia (c2)
//escreva("Informe o tempo do jogador 3: ")
//leia (c3)
//escreva("Informe o tempo do jogador 4: ")
//leia (c4)

se (c1 > c4) e (c1 > c3) e (c1 > c2) então
   tempo_maior <- (c1)
   escreval("O jogador 1 tem maior tempo:",tempo_maior)

senao
   se(c2 > c4) e (c2 > c3) e c2 > c1) então
      tempo_maior <- (c2)
      escreval("O jogador 2 tem maior tempo:",tempo_maior)

   senao
      se(c3 > c4) e (c3 > c2) e (c3 > c1) então
         tempo_maior <- (c3)
         escreval("O jogador 3 tem maior tempo:",tempo_maior)

      senao(c4 > c3) e (c4 > c2) e (c4 > c1) então
         tempo_maior <- (c4)
         escreval("O jogador 4 tem maior tempo:",tempo_maior)
      fimse
   fimse
fimse

se (c1 < c4) e (c1 < c3) e (c1 < c2) então
   tempo_menor <- c1
   escreva("O jogador 1 tem menor tempo:",tempo_menor)

senao (c2 < c4) e (c2 < c3) e (c2 < c1) então
   tempo_menor <- c2
   escreva("O jogador 2 tem menor tempo:",tempo_menor)

   se (c3 < c4) e (c3 < c2) e (c3 < c1) então
      tempo_menor <- c3
      escreva("O jogador 3 tem menor tempo:",tempo_menor)

   senao (c4 < c3) e (c4 < c2) e (c4 < c1) então
      tempo_menor <- c4
      escreva("O jogador 4 tem menor tempo:",tempo_menor)
   fimse
fimse

fimalgoritmo

1.PNG

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

@bnmatrix    para saber qual o maior e o menor, coloque uma variável para o maior e outra para o menor, e inicialize a maior com zero e a menor com um valor alto , por exemplo, 99999, e quando pegar o tempo de um jogador, faça a verificação assim :

escreva("Informe o tempo do jogador 1: ")
leia (c1)
se c1 > tempo_maior ENTÃO
  tempo_maior := c1
  jogador_Ma := 1
senao
  se c1 < tempo_menor ENTÃO
    tempo_menor := c1
    jogador_me := 1
  fimse
fimse

jogador_Ma e jogador_me é igual o número do jogador,  faça assim com os outros jogadores, e no final imprimir o resultado :

escreval("  O Jogador ",jogador_Ma," Tem O Maior Tempo ",tempo_maior)

e na hora de entrar os dados, digite os números decimais só com vírgula,  ou só com ponto,   pois se misturar dará erro e o resultado ficará errado .

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

Em 21/02/2018 às 20:48, devair1010 disse:

@bnmatrix    para saber qual o maior e o menor, coloque uma variável para o maior e outra para o menor, e inicialize a maior com zero e a menor com um valor alto , por exemplo, 99999, e quando pegar o tempo de um jogador, faça a verificação assim :


escreva("Informe o tempo do jogador 1: ")
leia (c1)
se c1 > tempo_maior ENTÃO
  tempo_maior := c1
  jogador_Ma := 1
senao
  se c1 < tempo_menor ENTÃO
    tempo_menor := c1
    jogador_me := 1
  fimse
fimse

jogador_Ma e jogador_me é igual o número do jogador,  faça assim com os outros jogadores, e no final imprimir o resultado :


escreval("  O Jogador ",jogador_Ma," Tem O Maior Tempo ",tempo_maior)

e na hora de entrar os dados, digite os números decimais só com vírgula,  ou só com ponto,   pois se misturar dará erro e o resultado ficará errado .

 

Não entendi sua colocação, quando o sistema fizer a leitura ele sempre vai identificar a variável c1, c2, c3, c4, maior que zero e menor que 99999.

 

Minha duvida é saber qual a logica para saber qual variável, independente da sequencia em que foi informada, quem teve o maior tempo e quem teve o menor tempo.

 

A duvida é a seguinte, qual das variáveis informada é a maior e qual é a menor!

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

  • Membro VIP

Olá @bnmatrix.

 

1 hora atrás, bnmatrix disse:

Não entendi sua colocação, quando o sistema fizer a leitura ele sempre vai identificar a variável c1, c2, c3, c4, maior que zero e menor que 99999.

Justamente! O maior é inicializado com um valor baixo e o menor com um alto. Na primeira verificação sempre o menor ou maior será atualizado. Daí tem que continuar verificando se o c2, c3 e c4 são menores que o menor ou são maiores que o maior. No final, menor e maior terão o menor e maior valor respectivamente.

 

Uma outra forma mais elegante seria inicializar o menor e maior com c1. Daí mesma coisa.. para cada uma das outras variáveis, verifica se é maior ou menor.

 

Tente implementar e pode o código aqui. Qualquer dúvida é só perguntar.

 

No aguardo.

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

O RESULTADO tempo_menor está com ERRO de logica, o que está acontecendo aqui??

 

NÃO FAZ SENTIDO INICIALIZAR A VARIÁVEL tempo_maior com zero e tempo_menor com 60 por exemplo para saber qual é maior ou qual é menor tempo, pois esta inicialização só serve pra delimitar o valor que o sistema poderá receber nestas variáveis (tempo_maior, tempo_menor) dentro do valor inicializado por elas.

 

devair1010, me ajudou muito! obrigado

 

algoritmo "semnome"

var
c1,c2,c3,c4, tempo_maior, tempo_menor:real
corredor_ma, corredor_me: inteiro

inicio

//c1 := 16.56
//c2 := 14.76
//c3 := 13.33
//c4 := 15.22
//tempo_maior := 0
//tempo_menor := 60

escreva("Informe o tempo do Corredor 1: ")
leia (c1)
escreva("Informe o tempo do Corredor 2: ")
leia (c2)
escreva("Informe o tempo do Corredor 3: ")
leia (c3)
escreva("Informe o tempo do Corredor 4: ")
leia (c4)

se c1 > tempo_maior então
   tempo_maior := c1
   corredor_ma := 1

   senao se c1 < tempo_menor então
      tempo_menor := c1
      corredor_me := 1
fimse

se c2 > tempo_maior então
   tempo_maior := c2
   corredor_ma := 2
     
      senao se c2 < tempo_menor então
         tempo_menor := c2
         corredor_me := 2
fimse

se c3 > tempo_maior então
   tempo_maior := c3
   corredor_ma := 3

   senao se c3 < tempo_menor então
      tempo_menor := c3
      corredor_me := 3

fimse

se c4 > tempo_maior então
     tempo_maior := c4
     corredor_ma := 4

     senao se c4 < tempo_menor então
        tempo_menor := c4
        corredor_me := 4
fimse

   escreval("O corredor",corredor_ma," tem maior tempo:",tempo_maior)
   escreval("O corredor",corredor_me," tem menor tempo:",tempo_menor)

fimalgoritmo

 

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

  • Membro VIP

 

9 minutos atrás, bnmatrix disse:

EU CONSEGUI FAZER DESTA FORMA E NÃO FAZ SENTIDO INICIALIZAR A VARIÁVEL tempo_maior com zero e tempo_menor com 60 por exemplo para saber qual é maior ou qual é menor, pois esta inicialização só serve pra delimitar quanto tempo o sistema poderá receber nesta variável o valor que foi inicializado.

Não entendi esse "quanto tempo"... mas em fim, é só uma questão de referências, ou seja, ao se comparar duas coisas, por exemplo, o "valor atual a ser comparado" e "valor contido no maior", é necessário que ambos as coisas já tenham algum valor antes. Correto?

 

Veja:

senao se c1 < tempo_menor então

No momento que esta instrução está sendo executada, qual o valor de tempo_menor? a variável não tem (não deveria ter) valor algum nela... a variável não foi inicializada por você. Entretanto, o desenvolvedor Visualg já pré-inicializa as variáveis globais com um valor padrão. Tipo... os reais e os inteiros ficam com 0, os caracteres ficam com "" (sem caracteres), os variáveis lógicas ficam com falso etc. Basta ir pressionando F8 e verificar que no lado direito, ali nas "Áreas das variáveis de memória" o valor que começa.

 

Veja, isso não é "natural", ao se declarar uma variável, o programa apenas "reserva" um espaço na memória, e na memória (provavelmente) já existe um "lixo" estruturas anteriores (o computador não perde tempo zerando a memória, simplesmente larga lá... é como copiar e apagar um filme no HD... veja que para apagar, é praticamente instantâneo, o SO apenas "marca" como apagado e pronto. O "lixo" fica lá.. o espaço fica "livre para ser usado")... daí, para facilitar a vida do programador, o Visualg já atribui um valor a variável. É um processo mecânico... ao criar a variável, já faz o "favor" de dar um valor a ela.  Entende?

 

 

Então, se c1=15.98 e tempo_menor=0, quem é o menor???

 

Ou seja, a condição NUNCA iria ser verdadeira... Só seria possível atualizar se um dos valores dos c's fossem negativos!!

 

 

"Ah! Simon, mas o programa esta dando certo."

 

Nops! é apenas uma coincidência... é uma coisa que sempre tento levantar: o que importa não e o resultado, mas sim o mecanismo para chegar a um.

 

Na verdade, o Visualg que é bugado.. rs. Duvida? Mude, por exemplo, o valor de c1 para ser o menor  (ex.: 10.23) e veja o que acontece!!! Entretanto, esse "bug" está sendo ocasionada por um erro de sintaxe do seu código. Você não pode colocar o senao e o se na mesma linha, tem que ficar igual como @devair1010 fez.

 

obs.: isso é uma limitação do Visualg, ele teria que aceitar da forma que você fez OU avisar que não poderia fazer assim... no seu caso, ele apenas rodou, mesmo com o a sintaxe errada...

 

Logo:

OU

Você inicializa o menor com um valor alto e o maior com um valor baixo

OU

Você inicializa ambos com o primeiro valor (recomendo esse)

OU

Inicializa de alguma outra forma

 

O que não pode é usar a variável não inicializada ;). É um erro conceitual.

 

 

 

Sobre

25 minutos atrás, bnmatrix disse:

Também encontrei erros na logica do amigo devair1010 nos se senao se fimse, mas me ajudou muito! obrigado

Que erro? tem como citar para eu entendermos melhor?

 

 

 

RESUMINDO:

- inicialize as variáveis maior e menor;

- não deixe o senao e o se na mesma linha.

 

 

 

No aguardo.

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

Eu fiz dessa forma deu certo, mas pra saber qual corredor teve o menor tempo tive que inicializar as variáveis corredor_ma e corredor_me como 1. e comparar os tempos a partir de c2, c3 e c4.

algoritmo "semnome"

var
c1,c2,c3,c4, tempo_maior, tempo_menor:real
corredor_ma, corredor_me: inteiro
inicio

c1 := 11.98
c2 := 18.76
c3 := 12.01
c4 := 13.23
tempo_maior := c1
tempo_menor := c1
corredor_ma := 1
corredor_me := 1

//escreva("Informe o tempo do Corredor 1: ")
//leia (c1)
//escreva("Informe o tempo do Corredor 2: ")
//leia (c2)
//escreva("Informe o tempo do Corredor 3: ")
//leia (c3)
//escreva("Informe o tempo do Corredor 4: ")
//leia (c4)

se c2 > tempo_maior então
   tempo_maior := c2
   corredor_ma := 2
   
senao
     se c2 < tempo_menor então
     tempo_menor := c2
     corredor_me := 2
fimse
fimse

se c3 > tempo_maior então
   tempo_maior := c3
   corredor_ma := 3

senao
     se c3 < tempo_menor então
     tempo_menor := c3
     corredor_me := 3

fimse
fimse

se c4 > tempo_maior então
   tempo_maior := c4
   corredor_ma := 4

senao
   se c4 < tempo_menor então
   tempo_menor := c4
   corredor_me := 4
   
fimse
fimse


escreval("O corredor",corredor_ma," tem maior tempo:",tempo_maior)
escreval("O corredor",corredor_me," tem menor tempo:",tempo_menor)


fimalgoritmo

 

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

  • Membro VIP
2 horas atrás, bnmatrix disse:

Eu fiz dessa forma deu certo, mas pra saber qual corredor teve o menor tempo tive que inicializar as variáveis corredor_ma e corredor_me como 1. e comparar os tempos a partir de c2, c3 e c4.

Perfeito! Me parece que ficou tudo certo agora! :).  Lembrar que o tempo de cada corredor tem que ficar como proposto no enunciado:

 

Em 21/02/2018 às 19:17, bnmatrix disse:

1.PNG

 

 

 

ADENDO:

Alguns pontos que podem ser interessante:

 

1) GERAR NÚMEROS ALEATÓRIOS

O Visual disponibiliza uma ferramenta para gerar números aleatórios bem interessantes... Abaixo, para efeito de demonstração, alterei o código para poder gerar os dados de entrada, veja:

algoritmo "semnome"

var
   c1,c2,c3,c4, tempo_maior, tempo_menor:real
   corredor_ma, corredor_me: inteiro
inicio
//ler os dados do usuário
ALEATORIO 1400, 1700 //obs.: as duas últimas casas serão usadas como a parte decimal
escreva("Informe o tempo do Corredor 1: ")
leia (c1)
escreva("Informe o tempo do Corredor 2: ")
leia (c2)
escreva("Informe o tempo do Corredor 3: ")
leia (c3)
escreva("Informe o tempo do Corredor 4: ")
leia (c4)
ALEATORIO OFF

//divide por 100 para "criar" 2 casas decimais
c1:=c1/100
c2:=c2/100
c3:=c3/100
c4:=c4/100

//inicializa as variáveis
tempo_maior := c1
tempo_menor := c1
corredor_ma := 1
corredor_me := 1

//verifica o maior e menor valores
se c2 > tempo_maior ENTÃO
   tempo_maior := c2
   corredor_ma := 2
senao
   se c2 < tempo_menor ENTÃO
      tempo_menor := c2
      corredor_me := 2
   fimse
fimse

se c3 > tempo_maior ENTÃO
   tempo_maior := c3
   corredor_ma := 3
senao
   se c3 < tempo_menor ENTÃO
      tempo_menor := c3
      corredor_me := 3
   fimse
fimse

se c4 > tempo_maior ENTÃO
   tempo_maior := c4
   corredor_ma := 4
senao
   se c4 < tempo_menor ENTÃO
      tempo_menor := c4
      corredor_me := 4
   fimse
fimse

//exibe o resultado final
escreval("O corredor",corredor_ma," tem maior tempo:",tempo_maior)
escreval("O corredor",corredor_me," tem menor tempo:",tempo_menor)
fimalgoritmo

É muito útil para testes. obs.: mais uma vez lembrando que para o seu código, o valor deve ficar predefinido. O código acima é apenas para demonstração... e ajudar também nos testes.

 

 

 

2) USO DE VETORES

Da forma que você fez, utilizando variáveis individuais, foi necessário criar um conjunto de se para cada variável. Se tivessem 1000 nadadores, seriam 1000 variáveis e 2000 se. Então, no Visualg, seria possível substituir as 4 variáveis por um vetor de 4 posições. Desta forma, cada variável pode ser acessada por uma variável, assim, precisando ter apenas um conjunto de se.... Aí precisaria implementar uma laço de repetição para controlar as posições, ou seja, em vez de usar c1, c2, c3 e c4, usaria c[x]... onde o x variaria de 1 a 4.

 

Aí depende já estudou vetores ou se tem interesse em avançar um pouco...

 

 

 

No aguardo.

 

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

1 hora atrás, Simon Viegas disse:

Perfeito! Me parece que ficou tudo certo agora! :).  Lembrar que o tempo de cada corredor tem que ficar como proposto no enunciado:

 

 

 

 

ADENDO:

Alguns pontos que podem ser interessante:

 

1) GERAR NÚMEROS ALEATÓRIOS

O Visual disponibiliza uma ferramenta para gerar números aleatórios bem interessantes... Abaixo, para efeito de demonstração, alterei o código para poder gerar os dados de entrada, veja:


algoritmo "semnome"

var
   c1,c2,c3,c4, tempo_maior, tempo_menor:real
   corredor_ma, corredor_me: inteiro
inicio
//ler os dados do usuário
ALEATORIO 1400, 1700 //obs.: as duas últimas casas serão usadas como a parte decimal
escreva("Informe o tempo do Corredor 1: ")
leia (c1)
escreva("Informe o tempo do Corredor 2: ")
leia (c2)
escreva("Informe o tempo do Corredor 3: ")
leia (c3)
escreva("Informe o tempo do Corredor 4: ")
leia (c4)
ALEATORIO OFF

//divide por 100 para "criar" 2 casas decimais
c1:=c1/100
c2:=c2/100
c3:=c3/100
c4:=c4/100

//inicializa as variáveis
tempo_maior := c1
tempo_menor := c1
corredor_ma := 1
corredor_me := 1

//verifica o maior e menor valores
se c2 > tempo_maior ENTÃO
   tempo_maior := c2
   corredor_ma := 2
senao
   se c2 < tempo_menor ENTÃO
      tempo_menor := c2
      corredor_me := 2
   fimse
fimse

se c3 > tempo_maior ENTÃO
   tempo_maior := c3
   corredor_ma := 3
senao
   se c3 < tempo_menor ENTÃO
      tempo_menor := c3
      corredor_me := 3
   fimse
fimse

se c4 > tempo_maior ENTÃO
   tempo_maior := c4
   corredor_ma := 4
senao
   se c4 < tempo_menor ENTÃO
      tempo_menor := c4
      corredor_me := 4
   fimse
fimse

//exibe o resultado final
escreval("O corredor",corredor_ma," tem maior tempo:",tempo_maior)
escreval("O corredor",corredor_me," tem menor tempo:",tempo_menor)
fimalgoritmo

É muito útil para testes. obs.: mais uma vez lembrando que para o seu código, o valor deve ficar predefinido. O código acima é apenas para demonstração... e ajudar também nos testes.

 

 

 

2) USO DE VETORES

Da forma que você fez, utilizando variáveis individuais, foi necessário criar um conjunto de se para cada variável. Se tivessem 1000 nadadores, seriam 1000 variáveis e 2000 se. Então, no Visualg, seria possível substituir as 4 variáveis por um vetor de 4 posições. Desta forma, cada variável pode ser acessada por uma variável, assim, precisando ter apenas um conjunto de se.... Aí precisaria implementar uma laço de repetição para controlar as posições, ou seja, em vez de usar c1, c2, c3 e c4, usaria c[x]... onde o x variaria de 1 a 4.

 

Aí depende já estudou vetores ou se tem interesse em avançar um pouco...

 

 

 

No aguardo.

 

 

Interessante essa ferramenta e a forma como foi utilizado, isso é ótimo para testes.

 

No caso de VETORES ainda não cheguei lá, estou seguindo a sequencia do livro Logica de Programação Algorítmica de Sergio Guedes, mas tenho interesse em aprender, assim que tiver estudado sobre vetores volto aqui para continuarmos os estudos, pode ser?

livro.PNG

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

  • Membro VIP
7 horas atrás, bnmatrix disse:

No caso de VETORES ainda não cheguei lá, estou seguindo a sequencia do livro Logica de Programação Algorítmica de Sergio Guedes, mas tenho interesse em aprender [...]

 

Tranquilo. Eu imaginei que ainda não tinha chegado lá, pois senão provavelmente já estaria usando... :).

 

 

7 horas atrás, bnmatrix disse:

[...] assim que tiver estudado sobre vetores volto aqui para continuarmos os estudos, pode ser?

OK. Se for para esse mesmo exercício, pode dar continuidade neste tópico... se for um exercício diferente, por favor, abra um novo tópico.

 

 

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!