Ir ao conteúdo
  • Cadastre-se

VisualG Não consigo determinar a repetição específica de um procedimento


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Boa tarde.

Estou com uma dúvida no seguinte exercício(segue em anexo):

 

 

Minha dúvida é: Não sei como determinar o número de repetições, no caso 4,  para que consequentemente, a mensagem se repita 4 vezes.  Já tentei declarar a variável dentro do procedimento, mas não obtive o resultado que queria. 

Agradeço desde já!

 

<>

imagem_2021-04-23_135031.png

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

  • Membro VIP

@Bruno Faria Moraes Jeronimo, sim. A quantidade de repetições está sendo repassada pelo parâmetro do procedimento. Vide:
 

1 hora atrás, Bruno Faria Moraes Jeronimo disse:

image.png


Você deve fazer o seguinte:
Lá onde está exibindo a variável do parâmetro, você vai fazer repetir quantas vez está no valor desse segundo (e novo) parâmetro.
 

inicio
   escreval("+-------=======------+")
   //aqui estrutura que vai exibir X vezes o texto
   escreval("+-------=======------+")
fimProcedimento



Então, em relação:

 

1 hora atrás, Bruno Faria Moraes Jeronimo disse:

Já tentei declarar a variável dentro do procedimento, mas não obtive o resultado que queria. 

 

Primeiramente, poste o seu código atual do exercício 87. Seria necessário antes verificar se este ficou "correto", já que o 88 seria uma mudança nele, ou seja: é como um "Efeito bola de neve"... se possível poste também o 86, rs.

 

A partir dos código, posso sugerir as correções e posteriormente instruir como pode fazer para o 88. 

Caso queira tentar... a variável para controlar o laço precisaria ser declarado dentro da função... 

 

Link para o comentário
Compartilhar em outros sites

algoritmo "semnome"
var
Procedimento Gerador(msg: Caractere)
inicio
      EscrevaL("====================")
      EscrevaL(msg)
      EscrevaL("====================")
FimProcedimento
inicio
      Gerador("Aprendendo Portugol")

fimalgoritmo

 

Aí está o código que eu escrevi no exercício 87

 

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

  • Membro VIP

@Bruno Faria Moraes Jeronimo, as linhas não são um monte de "=". Coloque como está no enunciado.

 

Pronto... você vai receber mais um parâmetro no procedimento e aí você vai fazer repetir essa linha que está no meio utilizando esse novo parâmetro como referência.

Link para o comentário
Compartilhar em outros sites

algoritmo "semnome"
var
Procedimento Gerador(msg: Caractere)
inicio
      EscrevaL("+-------=======------+")
      EscrevaL(msg)
      EscrevaL("+-------=======------+")
FimProcedimento
inicio
      Gerador("Aprendendo Portugol", 4)
fimalgoritmo

 

Eu não sei o que está incorreto; executando esse código, me retorna um erro de sintaxe.  Não consegui compreender muito bem sua explicação

 

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

  • Membro VIP
  • Solução

O procedimento está definido para receber 1 parâmetro (um texto). Lá no programa principal está passando 2. São assinaturas diferentes.

 

Ajuste a assinatura do procedimento, exemplo:
 

procedimento Gerador(msg: caractere; qtd: inteiro)


Aí, coloque apenas para exibir o valor de qtd na tela... apenas para ver se está funcionando.

 

Após, você ira criar um laço de repetição que vai fazer o msg ser impresso qtd vezes.
 

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

algoritmo "semnome"
var
Procedimento Gerador(msg: Caractere; qtd: Inteiro)
var
  c : Inteiro
inicio
      EscrevaL("+-------=======------+")
      Para c <- 1 ate qtd faca
      EscrevaL(msg)
      FimPara
      EscrevaL("+-------=======------+")
FimProcedimento
inicio
      Gerador("Aprendendo Portugol", 4)

fimalgoritmo

 

 

 

Não sei se era isso que você esperava, mas deu certo kkkkk. Meu problema era não saber como declarar mais de um tipo de variável dentro do procedimento (agora eu sei que se usa " ; " graças a você.)

Muito obrigado, viu? Me ajudou bastante!!

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

  • Membro VIP

1# Identar o código

Pressione Ctrl+G no VisualG

 

 

2# Postar código aqui no fórum

Edite seu tópico. Pressione o botão "<>" que está na Barra de Ferramentas e cole o código.

 

 

3# Sobre o problema x solução

Sim. Creio que seria exatamente isso.

 

Falta colocar para imprimir o texto centralizado.. fica o desafio lançado!!

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

algoritmo "semnome"
var
Procedimento Gerador(msg: Caractere; qtd: Inteiro)
var
   c: Inteiro
inicio
   EscrevaL("+-------=======------+")
   Para c <- 1 ate qtd faca
      EscrevaL(" ",msg)
   FimPara
   EscrevaL("+-------=======------+")

FimProcedimento
inicio
   Gerador("Aprendendo Portugol", 3)

fimalgoritmo

 

Provavelmente foi uma gambiarra, mas ficou centralizado.

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

  • Membro VIP

Sim, sim.. a ideia é essa!!! mas só vai funcionar para esse texto... como é fixo, tá valendo, rs.

 

Mas a proposta de "desafio" é fazer centralizar de acordo com o tamanho do texto. Precisaria "criar" / "utilizar" um algoritmo para calcular os espaços necessários e após imprimir... apesar da ideia ser boa, ela não é "justa". Por exemplo. Imagine eu fazer isso:
 

Procedimento Gerador(msg: Caractere; qtd: Inteiro)
var
   c: Inteiro
inicio
   EscrevaL("+-------=======------+")
   EscrevaL(" ",msg)
   EscrevaL(" ",msg)
   EscrevaL(" ",msg)
   EscrevaL(" ",msg)
   EscrevaL("+-------=======------+")
FimProcedimento

inicio
   Gerador("Aprendendo Portugol", 4)
fimalgoritmo

 

Ou isso:

inicio
   EscrevaL("+-------=======------+")
   EscrevaL(" Aprendendo Portugol")
   EscrevaL(" Aprendendo Portugol")
   EscrevaL(" Aprendendo Portugol")
   EscrevaL(" Aprendendo Portugol")
   EscrevaL("+-------=======------+")
FimProcedimento

 

Sacou? O que importa aqui não é o resultado (que seriam idênticos), mas sim os meios... é a "lógica utilizado por trás que está em jogo".

 

Se quiser tentar fazer... não precisa tentar por esse código... crie novo. Ex.:

 

Crie um programa que leia um texto e imprima esse texto centralizado na tela. (Vale pesquisa uma resposta pronta no Google, mas tem que entender todo o funcionamento.)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
11 minutos atrás, Bruno Faria Moraes Jeronimo disse:

Vou jogar a toalha nesse. Não cheguei nem perto de conseguir, o máximo que eu fiz foi: ficar dando espaço e executando, até centralizar, e depois jogar essa quantidade de espaços na função "Compr", o que não me levou a lugar algum...

 

É isso mesmo... é normal ter dificuldade e, por sinal, é o esperado... Acho que uma boa base seria utilizar o Compr() mesmo. Mas tente entender melhor o problema... 

 

Faça algo bem simples... por exemplo, em vez de ficar lendo do teclado, já defina a string no código e vá testando lógicas diferentes... dps vai mudando o texto e vendo se vai dando certo... por aí vai.

 

Com essa "perda" de tempo, você vai pegando macetes... que vai servindo para outras coisas q podem parecer que não tem nada a ver... 

 

Dá uns google... acha algumas lógicas já criadas... aí adapta para VisualG... tá valendo. Não precisa reinventar a roda por enquanto.

 

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

A tela do console que o Visualg abre, me parece que tem 65 caracteres de largura, então para centralizar uma frase é preciso fazer um cálculo.

frase <- "Frase centralizada"
espaco <- 65 - Compr(frase)
espaco <- Int(espaco / 2)
escreval("":espaco, frase)

 

No caso espaco é uma variável do tipo inteiro.

 

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

@JorgeGus Por mais que você tenha me dado a resposta, eu sinto que não chegaria a lugar nenhum nesse desafio. Portanto, obrigado de qualquer forma, não posso reclamar de você ter "estragado a surpresa" kkkkkkkkkk.

 

Outra coisa, pra quê serve esses " : " depois das aspas e antes de "espaco"? Eu usei uma vez, num exercício resolvido, mas não entendi seu valor.

 

Link para o comentário
Compartilhar em outros sites

17 minutos atrás, Bruno Faria Moraes Jeronimo disse:

@JorgeGus Por mais que você tenha me dado a resposta, eu sinto que não chegaria a lugar nenhum nesse desafio. Portanto, obrigado de qualquer forma, não posso reclamar de você ter "estragado a surpresa" kkkkkkkkkk.

 

Outra coisa, pra quê serve esses " : " depois das aspas e antes de "espaco"? Eu usei uma vez, num exercício resolvido, mas não entendi seu valor.

 

Antes dos dois pontos você coloca uma string ou número que vai ser alinhado, e depois você informa o tamanho total do espaço, se a string ou número for menor que o tamanho do espaço, o Visualg preenche o resto com espaços em branco. Strings são alinhadas à esquerda e números à direita. Isso é mais usado para alinhar números, esse uso que eu fiz para centralizar a frase foi basicamente uma "gambiarra", já que o Visualg parece não dispor de uma função para replicar um caractere ou uma string um determinado número de vezes.

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

  • Membro VIP

Sobre:

Em 23/04/2021 às 19:18, JorgeGus disse:

strings são alinhadas à esquerda e números à direita

 

Sabia dessa não... curioso! Mais uma coisa estranha no VisualG :D... no Pascal, pai do VisualG, os comportamentos são iguais... alinham pela direita.

 

 

 

Sobre:

Em 23/04/2021 às 18:35, JorgeGus disse:


frase <- "Frase centralizada"
espaco <- 65 - Compr(frase)
espaco <- Int(espaco / 2)
escreval("":espaco, frase)

 

 

Dando uma simplificada:

frase <- "Frase centralizada"
espaco <- (65 - Compr(frase)) \ 2
escreval("":espaco, frase)

 

 

 

Uma alternativa boa seria cria um procedimento para facilitar o reuso. Exemplo:

procedimento EscrevalCentro(texto: caractere)
var
   espaco: inteiro
inicio
   espaco <- (65 - Compr(texto)) \ 2
   escreval("":espaco, texto)
fimProcedimento

 

 

Como efeito de demonstração, poderia ser assim tb:

procedimento EscrevalCentro(texto: caractere)
inicio
   escreval("":(65 - Compr(texto)) \ 2, texto)
fimProcedimento

 

Mas acho que fica meio poluído. Usaria da forma anterior.

 

ADENDO: funciona pois o que é esperado ali dps do ":" é um inteiro... como toda essa conta resulta num inteiro... funciona.

 

Link para o comentário
Compartilhar em outros sites

  • 8 meses depois...
Em 23/04/2021 às 15:53, Simon Viegas disse:

O procedimento está definido para receber 1 parâmetro (um texto). Lá no programa principal está passando 2. São assinaturas diferentes.

 

 Ajuste a assinatura do procedimento, exemplo:
 

procedimento Gerador(msg: caractere; qtd: inteiro)


Aí, coloque apenas para exibir o valor de qtd na tela... apenas para ver se está funcionando.

 

Após, você ira criar um laço de repetição que vai fazer o msg ser impresso qtd vezes.
 

Salvando os estudos como sempre! vlwwww

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