Ir ao conteúdo
  • Cadastre-se

VisualG Exercício usando procedimento e usando chamada válida


Posts recomendados

Boa, pessoal. Tudo bem?

Estou com uma dúvida em um exercício que fiz. O exercício é esse:

 

89)  Crie um programa que melhore o procedimento Gerador() da questão anterior para que o programador possa escolher uma entre três bordas:

+-------=======------+ Borda 1
~~~~~~~~:::::::~~~~~~~ Borda 2
<<<<<<<<------->>>>>>> Borda 3

Ex: Uma chamada válida seria Gerador("Portugol Studio", 3, 2)

~~~~~~~~:::::::~~~~~~~
Portugol Studio
Portugol Studio
Portugol Studio

~~~~~~~~:::::::~~~~~~~

 

PS. O exercício anterior:

1)      Crie um programa que melhore o procedimento Gerador() da questão anterior para que mostre uma mensagem vário Ex: Ao chamar Gerador("Aprendendo Portugol", 4) aparece:

+-------=======------+
Aprendendo Portugol
Aprendendo Portugol
Aprendendo Portugol
Aprendendo Portugol
+-------=======------+

 

 

O jeito que eu consegui fazer é esse:

algoritmo "Ex. 89"
var
Procedimento Gerador()
var
   C, Borda: inteiro
   B, AP: caractere
Inicio
   AP <- "Portugol Studio"
   EscrevaL ("+-------=======------+ Borda 1")
   EscrevaL ("~~~~~~~~:::::::~~~~~~~ Borda 2")
   EscrevaL ("<<<<<<<<------->>>>>>> Borda 3")
   Escreva ("Qual borda você escolhe? ")
   Leia (Borda)
   Escolha Borda
   Caso 1
      B := "+-------=======------+"
   Caso 2
      B := "~~~~~~~~:::::::~~~~~~~"
   Caso 3
      B := "<<<<<<<<------->>>>>>>"
   FimEscolha
   EscrevaL (B)
   Para C <- 1 ate 3 faca
      EscrevaL (AP)
   FimPara
   EscrevaL (B)
FimProcedimento
inicio
   Gerador()
fimalgoritmo

 

Mas para mim parece que não está certo ainda, por que não consegui fazer a chamada igual a que o exercício. E também sinto que poderia encurtar o código, mas não sei como. Agradeço desde já

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

1 hora atrás, AlexandreCalanca disse:

Mas para mim parece que não está certo ainda, por que não consegui fazer a chamada igual a que o exercício. E também sinto que poderia encurtar o código, mas não sei como. Agradeço desde já

sim está errado, você teria que usar parâmetros nas funções.

exemplo

procedimento gerador(msg:caractere; repeticao, borda_tipo:inteiro)
var
   contador:inteiro
inicio
   escolha (borda_tipo)
      caso 1
         escreval("+-------=======------+")
         
      caso 2
         escreval("~~~~~~~~:::::::~~~~~~~")
         
      caso 3
         escreval("<<<<<<<<------->>>>>>>")
   fimEscolha

   para contador de 1 ate repeticao faca
      escreval(msg)
   fimPara

   escolha (borda_tipo)
      caso 1
         escreval("+-------=======------+")
         
      caso 2
         escreval("~~~~~~~~:::::::~~~~~~~")
         
      caso 3
         escreval("<<<<<<<<------->>>>>>>")
   fimEscolha
fimProcedimento

 

Mas eu prefiro dessa maneira.

Algoritmo "bordas"

const
   BORDA1 = 1
   BORDA2 = 2
   BORDA3 = 3

var
   opcao, contador, quantidade:inteiro
   msg:caractere

procedimento borda(borda_tipo:inteiro)
inicio
   escolha (borda_tipo)
      caso BORDA1
         escreval("+-------=======------+")
         
      caso BORDA2
         escreval("~~~~~~~~:::::::~~~~~~~")
         
      caso BORDA3
         escreval("<<<<<<<<------->>>>>>>")
   fimEscolha
fimProcedimento

procedimento gerador(msg:caractere; repeticao, borda_tipo:inteiro)
var
   contador:inteiro
inicio
   borda(borda_tipo)
   para contador de 1 ate repeticao faca
      escreval(msg)
   fimPara
   borda(borda_tipo)
fimProcedimento

inicio
   escreval("Escolha entre uma dessas bordas")
   para contador de BORDA1 ate BORDA3 faca
      escreva("Borda ", contador,"|")
      borda(contador)
   fimPara
   leia(opcao)
   escreval("Digite uma mensagem para aparecer na borda")
   leia(msg)
   escreval("Digite a quantidade de vezes que voce quer que a mensgaem se repita")
   leia(quantidade)
   gerador(msg, quantidade, opcao)
fimAlgoritmo

 

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

  • 11 meses depois...

Bom dia.

Eu estou casualmente estudando esse exercício, e foi de grande ajuda o seu código@kgin, pude entender o que era necessário fazer, e como fazer, porém eu estava analisando o enunciado do exercício, e pede para que o programador possa escolher, e não o usuário, então dei uma modificada com o que eu aprendi no seu código, e o que eu já havia aprendido e ficou dessa forma.

 

Algoritmo "Exercício 89"

//PROPOSTA: Crie um programa que melhore o procedimento gerador() da questão anterior
//para que o programador possa escolher uma entre as três bordas
//+-------=======-------+ Borda1
//~~~~~~~:::::::~~~~~~~~  Borda2
//<<<<<<<------->>>>>>>   Borda3
//Ex: Uma chamada válida seria Gerador("Portugol Studio",3,2)
// ~~~~~~~:::::::~~~~~~~~
//    Portugol Studio
//    Portugol Studio
//    Portugol Studio
// ~~~~~~~:::::::~~~~~~~~
//Autora: Franciele Juchem Santiago
//Prof: Gustavo Guanabara
//Data:15/04/2023

const
   BORDA1 = 1
   BORDA2 = 2
   BORDA3 = 3

var
   contador:inteiro
   Msg:Caractere

procedimento borda(borda_tipo:inteiro)
inicio
   escolha (borda_tipo)
   caso BORDA1
      escreval("+-------=======------+")

   caso BORDA2
      escreval("~~~~~~~~:::::::~~~~~~~")

   caso BORDA3
      escreval("<<<<<<<<------->>>>>>>")
   fimEscolha
fimProcedimento

procedimento gerador(msg:caractere; repeticao, borda_tipo:inteiro)

inicio
   borda(borda_tipo)
   para contador de 1 ate repeticao faca
      escreval("Portugol Studio")
   fimPara
   borda(borda_tipo)
fimProcedimento

inicio
   gerador(msg, 3, 2)
fimAlgoritmo

 

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

  • 6 meses depois...

Bem, eu fiz desse jeito aqui, pode tá meio confuso, mas funciona kkkk

 

algoritmo "Q89 procedimento"
var
   vezes, repet, repet1, bor :inteiro
   bor1, n, c : caractere
inicio

procedimento gerador (hello : caractere)
var c : inteiro
inicio
   escolha bor
   caso 1
      bor1 := " +-------=======------+ "
   caso 2
      bor1 := " ~~~~~~~~:::::::~~~~~~~ "
   caso 3
      bor1 := " <<<<<<<<------->>>>>>> "
   fimescolha
   escreval (bor1)
   para c <- 1 ate repet1 faca
      escreval (hello)
   fimpara
   escreval (bor1)
fimprocedimento

escreval ("como quer que seja a sua mensagem? ")
leia (n)
escreval ("escolha como vai ser sua borda na mensagem de 1 a 3 ")
escreval (" +-------=======------+ Borda 1  ")
escreval (" ~~~~~~~~:::::::~~~~~~~ Borda 2  ")
escreval (" <<<<<<<<------->>>>>>> Borda 3  ")
leia (bor)
escolha bor
caso 1
   escreval (" +-------=======------+ ")
caso 2
   escreval (" ~~~~~~~~:::::::~~~~~~~ ")
caso 3
   escreval (" <<<<<<<<------->>>>>>> ")
fimescolha
escreval ("quantas vezes quer repetir a mensagem? ")
leia (repet1)
escreval ("quantas vezes quer repetir o conjunto inteiro? ")
leia (repet)
limpatela
para vezes := 1 ate repet faca
   gerador (n)
fimpara

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

  • Membro VIP
Em 23/10/2023 às 20:53, como ta a mente do palhaço disse:
algoritmo "Q89 procedimento"
var
   vezes, repet, repet1, bor :inteiro
   bor1, n, c : caractere
inicio

 

O comando inicio, relacionado ao programa principal, deve ficar após as funções e procedimento.

 

 

Aproveitando a postagem:

Em 15/04/2023 às 10:07, Fran.DevCoder disse:
algoritmo "Exercício 89"
//...
var
   contador : inteiro
   msg : caractere

 

 

Essas duas variáveis são locais. A primeira melhor declarada dentro da função que a usa. A segunda já está declarada na assinatura do método, ou seja, declarando aí, está simplesmente duplicando, mas se qualquer forma, o enunciado sugere que envie um texto diretamente (utilizando aspas duplas).

 

 

Vejam como é a chamada do procedimento:

Em 15/04/2023 às 10:07, Fran.DevCoder disse:
//Ex: Uma chamada válida seria Gerador("Portugol Studio",3,2)

 

Mas no código está utilizando a variável global msg.

Em 15/04/2023 às 10:07, Fran.DevCoder disse:
inicio
   gerador(msg, 3, 2)
fimAlgoritmo

 

Observe que no momento dessa chamada, essa variável está em branco... pois o programa acabou de ser iniciado. Estaria "funcionando" pois o texto está fixo lá dentro do procedimento, vejam:

Em 15/04/2023 às 10:07, Fran.DevCoder disse:
procedimento gerador(msg:caractere; repeticao, borda_tipo:inteiro)

inicio
   borda(borda_tipo)
   para contador de 1 ate repeticao faca
      escreval("Portugol Studio")
   fimPara
   borda(borda_tipo)
fimProcedimento

 

Resumindo: o texto precisa vir de fora, daí utiliza a variável msg (que está na assinatura do procedimento) para tal. Exemplo:

procedimento gerador (msg:caractere; repeticao, borda_tipo:inteiro)
var
   contador : inteiro
inicio
   borda(borda_tipo)

   para contador de 1 ate repeticao faca
      escreval(msg)
   fimPara

   borda(borda_tipo)
fimProcedimento

 

Exemplo de chamada:

inicio
   gerador("Portugol Studio", 3, 1)
   gerador("Portugol Studio", 3, 2)
   gerador("Portugol Studio", 3, 3)
fimAlgoritmo

 

Segue um código completo:

algoritmo "Exercício 89"
//PROPOSTA: Crie um programa que melhore o procedimento gerador() da questão anterior
//para que o programador possa escolher uma entre as três bordas
//+-------=======-------+ Borda1
//~~~~~~~:::::::~~~~~~~~  Borda2
//<<<<<<<------->>>>>>>   Borda3
//Ex: Uma chamada válida seria Gerador("Portugol Studio",3,2)
// ~~~~~~~:::::::~~~~~~~~
//    Portugol Studio
//    Portugol Studio
//    Portugol Studio
// ~~~~~~~:::::::~~~~~~~~
//Autora: Franciele Juchem Santiago
//Prof: Gustavo Guanabara
//Data:15/04/2023

const
   BORDA1 = 1
   BORDA2 = 2
   BORDA3 = 3

var
   //Obs.: devido a um bug do VisualG, necessário deixar o comando var, mesmo
   //que não tenha variáveis globais (versão 3.6.0.5)

procedimento borda (borda_tipo:inteiro)
inicio
   escolha (borda_tipo)
   caso BORDA1
      escreval("+-------=======------+")
   caso BORDA2
      escreval("~~~~~~~~:::::::~~~~~~~")
   caso BORDA3
      escreval("<<<<<<<<------->>>>>>>")
   fimEscolha
fimProcedimento

procedimento gerador (msg:caractere; repeticao, borda_tipo:inteiro)
var
   contador : inteiro
inicio
   borda(borda_tipo)

   para contador de 1 ate repeticao faca
      escreval(msg)
   fimPara

   borda(borda_tipo)
fimProcedimento

inicio
   gerador("Portugol Studio", 3, 1)
   gerador("Portugol Studio", 3, 2)
   gerador("Portugol Studio", 3, 3)
fimAlgoritmo
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!