Ir ao conteúdo
  • Cadastre-se

VisualG Exercício Visualg - Estou perdido...


Posts recomendados

Há duas questões a serem resolvidas, sendo a de número 44 e 45 com foco em estrutura de repetição.

 

Na questão 44 ele pede:

Citação

44) Crie um algoritmo que leia o valor inicial da contagem, o valor final e o incremento, mostrando em seguida todos os valores no intervalo: Ex: Digite o primeiro Valor: 3 Digite o último Valor: 10 | Digite o incremento: 2 | Contagem: 3 5 7 9 Acabou!

 

E fiz conforme proposto:

algoritmo "Atividade 44"
 
var
      inicioV, fimV, incV: inteiro
inicio
      escreva( "Inicio: " )
      leia( inicioV )
      escreva( "Fim: " )
      leia( fimV )
      escreva( "Incremento: " )
      leia( incV )
      
      enquanto ( inicioV < fimV ) faca
           escreva( inicioV, "... " )
           inicioV <- inicioV + incV
      fimenquanto
      escreval( "Acabou!" )
fimalgoritmo

 

 Porém na questão 45 pede:

Citação

45) O programa acima vai ter um problema quando digitarmos o primeiro valor maior que o último. Resolva esse problema com um código que funcione em qualquer situação.


E é aqui onde me perco. Não o que pode ser feito, como por exemplo contar de forma regressiva. Francamente não entendi essa parte onde diz "Resolva esse problema com um código que funcione em qualquer situação."

 

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

@Hatchiko     esse problema pode ser resolvido de várias formas , cada uma de acordo com o gosto do freguês ,  sendo que precisará acrescentar algumas Linhas a mais no código ,  você pode usar o comando  abs ,  ou o se para controlar o loop enquanto , e se soma ou subtrai os valores de incremento , etc . . . !  ,  ou inverter os valores logo no início antes de entrar no enquanto , deixando ele do jeito certo , ou seja , o menor primeiro e o maior depois , e esse código poderia ser assim  :

algoritmo "Atividade 44"
var
  inicioV, fimV, incV,aux : inteiro
inicio
  escreva( "Inicio: " )
  leia( inicioV )
  escreva( "Fim: " )
  leia( fimV )
  escreva( "Incremento: " )
  leia( incV )
  se inicioV > fimV entao
    aux      <- inicioV
    inicioV  <- fimV
    fimV     <- aux
  fimse
  enquanto inicioV < fimV faca
    escreva( inicioV, "... " )
    inicioV <- inicioV + incV
  fimenquanto
  escreval( "Acabou!" )
fimalgoritmo

 

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

  • 2 anos depois...

@GustavoHCS, eu estava com o mesmo problema.

Tentei o que o cara tinha feito acima, mas eu achei que não era o que a questão pedia. Então apaguei tudo e recomecei e consegui fazer de um jeito que acho que era pra ser.

 

algoritmo "contaDor_contaedoi"
// Função :Conta do número inicial ao final com incremento
// Autor :kevin
// Data : 18/01/2023
// Seção de Declarações
var
   ni, nf, in : inteiro
inicio
   // Seção de Comandos
   escreva("Digite o número inicial: ")
   leia(ni)
   escreva("Digite o número final: ")
   leia(nf)
   escreva("Digite o incremento: ")
   leia(in)
   se(ni > nf)então
      enquanto (ni > nf) faca
         escreva(ni)
         ni <- ni - in
      fimenquanto
   senao
      enquanto (ni < nf) faca
         escreva(ni)
         ni <- ni + in
      fimenquanto
   fimse
   escreva(" Acabou!")
fimalgoritmo

 

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

@kevinfalves     a interpretação do enunciado é assim mesmo ,  vai de acordo com a imaginação de cada um , e tem várias maneiras de resolver , e  seu código ficou muito bom  e resolve  bem o que se pede ,  e então imaginei que se o intervalo é de um número ao outro e com isso mostrar todos os números possíveis no intervalo e também mostrar o primeiro e o último  número , quando possível ,   e então me permita  mais uma das soluções possíveis ,  com esse código que agilizei :aqui :

algoritmo "contaDor_contaewoi"
// FunCAo : Conta do número inicial ao final com incremento
// Autor  : kevin
// Data   : 18/01/2023
var
  ni,nf,in,p : inteiro

inicio
  escreva  ( "Digite o número inicial -: " )
  leia( ni )
  escreva  ( "Digite o número final ---: " )
  leia( nf )
  escreva  ( "Digite o incremento -----: " )
  leia( in )
  se ni    >  nf então
    in     := in * -1 // inverte a direCAo da contagem
  fimse
  para p de ni ate nf passo in faca
    escreva( p )      // com esse laCo de repetiCAo
  fimpara             // escreve até o Ultimo nUmero
  escreva(" Acabou . . . !")
fimalgoritmo

 

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

  • Membro VIP

Eu faria algo assim:

 

algoritmo "Contador com incremento"
// Função: Conta do número inicial ao final com incremento
// Autor : Simon Viegas
// Data  : 30/01/2023

//44) Crie um algoritmo que leia o valor inicial da contagem, o valor final e
//o incremento, mostrando em seguida todos os valores no intervalo: Ex: Digite
//o primeiro Valor: 3 Digite o último Valor: 10 | Digite o incremento: 2 |
//Contagem: 3 5 7 9 Acabou!
var
   valorInicial, valorFinal, incremento : inteiro
   i : inteiro
inicio
   escreva ("Digite o primeiro valor: ")
   leia(valorInicial)
   escreva ("Digite o último valor: ")
   leia(valorFinal)
   escreva ("Digite o incremento: ")
   leia(incremento)
   
   para i de valorInicial ate valorFinal passo incremento faca
      escreva (i)
   fimPara

   escreval(" Acabou!")
fimalgoritmo

 

image.png

 

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

@Simon Viegas     seu código dessa Questão #44  ficou bom ,  pois no código que o @GustavoHCS   fez ,  e se escolher o incremento de 1 , ele vai mostrar o número inicial e os outros números possíveis , mas não mostra o número final , considerando que o número inicial e o número final fazem parte do intervalo ,   e esse que você postou mostra mesmo todos os números do intervalo , desde o primeiro número até o último número , porém  o @kevinfalves    está se referindo é naquela Questão #45  .

 

Em 25/12/2020 às 19:36, GustavoHCS disse:

44) Crie um algoritmo que leia o valor inicial da contagem, o valor final e o incremento, mostrando em seguida todos os valores no intervalo: Ex: Digite o primeiro Valor: 3 Digite o último Valor: 10 | Digite o incremento: 2 | Contagem: 3 5 7 9 Acabou!

 

Em 25/12/2020 às 19:36, GustavoHCS disse:

45) O programa acima vai ter um problema quando digitarmos o primeiro valor maior que o último. Resolva esse problema com um código que funcione em qualquer situação.

 

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

  • 2 semanas depois...
  • Membro VIP
Em 31/01/2023 às 07:28, devair1010 disse:

esse que você postou mostra mesmo todos os números do intervalo , desde o primeiro número até o último número , porém  o @kevinfalves    está se referindo é naquela Questão #45  .

 

Ah! Sim! Perfeito! Seria apenas para o 44. 😄

 

 

Sobre o 45:

Em 25/12/2020 às 19:36, GustavoHCS disse:

45) O programa acima vai ter um problema quando digitarmos o primeiro valor maior que o último. Resolva esse problema com um código que funcione em qualquer situação.

 

Aqui existiu duas soluções distintas: uma invertendo trocando os valores iniciais e finais entre si, outra solução foi utilizando o inverso oposto do incremento. As duas formas ficaram interessantes e acho que válidas... O enunciando não me deixou muito claro também, mas para mim fez mais sentido trocar os valores mesmo (como o primeiro código do @devair1010), pois um incremento negativo deixaria de ser incremento, estaria virando um "decremento"... sei lá... Mas a ideia foi muito boa!

 

 

PS:

Nesse primeiro código, como o intervalo se mostrou fechado para o valor inicial, me faz mais sentido que o final também seja fechado. Exemplo:

 

De:

Em 25/12/2020 às 21:52, devair1010 disse:
  enquanto inicioV < fimV faca

 

Para:

  enquanto inicioV <= fimV faca

 

Ou seja: incluindo o valor final de poder está no intervalo. Se digitou 1, 9 e 2, vai sair 1, 3, 5, 7 e 9 (em vez de 1, 3, 5 e 7).

  • Obrigado 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!