Ir ao conteúdo
  • Cadastre-se
ynp

VisualG conversão de decimal para outras bases VisualG

Posts recomendados

Recebi uma tarefa de um professor para fazer um programa que converta números decimais para binário, octal e hexadecimal, estou tentando usar o VisualG por estar no meu primeiro ano da faculdade e ser a única linguagem que conheço o básico, e estou tendo dificuldades, pois estou com um código que faz as conversões corretamente, porém ele faz sempre as 3 de uma vez, e eu gostaria de poder escolher a conversão que desejo fazer, tentei usar o "caso" mas não está dando certo. Meu código é esse, se alguém puder me ajudar ou me dizer algo que está errado eu agradeceria.

Algoritmo "conversãodecimal"
Var
Num, Valor: inteiro
Resultado1, Resultado2, Resultado3, opcao, binario, octal, hexadecimal: Caractere
Inicio
// primeira parte, onde eu desejo criar a "interface" permitindo o usuário escolher qual conversão deseja fazer

escreval("para qual base você deseja converter seu número decimal?")
escreval("binário")
escreval("octal")
escreval("hexadecimal")
leia(opcao)
escolha opcao
// conversão para binário

caso(opcao=binario) faca
escreval ("Digite um valor Decimal: ")
leia (Num)
Valor <- (Num)
enquanto (Num > 0) faca
escolha (Num mod 2)
	caso 0
	Resultado1 <- ("0" + Resultado1)
	caso 1
	Resultado1 <- ("1" + Resultado1)
    fimescolha
     Num <- (Num div 2)
   fimenquanto
     escreval ("O valor: ", Valor, " em Decimal será de: ", Resultado1, " em Binários!!")
// conversão para octal

caso (opcao="octal") faca
 escreval ("Digite um valor Decimal: ")
  leia (Num)
   Valor <- (Num)
   enquanto (Num > 0) faca
    escolha (Num mod 8)
       caso 1
        Resultado2 <- ("1" + Resultado2)
	caso 2
	Resultado2 <- ("2" + Resultado2)
	caso 3
	Resultado2 <- ("3" + Resultado2)
	caso 4
	Resultado2 <- ("4" + Resultado2)
	caso 5
	Resultado2 <- ("5" + Resultado2)
	caso 6	
	Resultado2 <- ("6" + Resultado2)
	caso 7
	Resultado2 <- ("7" + Resultado2)
    fimescolha
     Num <- (Num div 8)
   fimenquanto
     escreval ("O valor: ", Valor, " em decimal será de: ", Resultado2, " em octal")
// conversão para hexadecimal

caso (opcao = hexadecimal) faca
 escreval ("Digite um valor Decimal: ")
  leia (Num)
   Valor <- (Num)
   enquanto (Num > 0) faca
    escolha (Num mod 16)
	caso 1
	Resultado3 <- ("1" + Resultado3)
	caso 2
	Resultado3 <- ("2" + Resultado3)
	caso 3
	Resultado3 <- ("3" + Resultado3)
	caso 4
	Resultado3 <- ("4" + Resultado3)
	caso 5
	Resultado3 <- ("5" + Resultado3)
	caso 6
	Resultado3 <- ("6" + Resultado3)
	caso 7
	Resultado3 <- ("7" + Resultado3)
	caso 8
	Resultado3 <- ("8" + Resultado3)
	caso 9
	Resultado3 <- ("9" + Resultado3)
	caso 10
	Resultado3 <- ("A" + Resultado3)
	caso 11
	Resultado3 <- ("B" + Resultado3)
	caso 12
	Resultado3 <- ("C" + Resultado3)
	caso 13
	Resultado3 <- ("D" + Resultado3)
	caso 14
	Resultado3 <- ("E" + Resultado3)
	caso 15
	Resultado3 <- ("F" + Resultado3)
    fimescolha
     Num <- (Num div 16)
   fimenquanto
     escreval ("O valor: ", Valor, " em decimal será de: ", Resultado3, " em hexadecimal.")
fimalgoritmo

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ynp    seu código está bom , e aqui no    visualG 3.0.6.5     está funcionando bem ,  e organizando ele melhor poderia ser assim  :

Algoritmo "Caso_teste_2"
Var
  a,opc                  : caracter
  num,valor,op           : inteiro
  resultado1,resultado2  : caracter
  resultado3,opcao,octal : caracter
  hexadecimal,binario    : caracter

procedimento hexa     // procedimento q converte p/ HexadecimaL
inicio
  enquanto num > 0 faca
    escolha num mod 16
    caso 1
      resultado3 := "1"+resultado3
    caso 2
      resultado3 := "2"+resultado3
    caso 3
      resultado3 := "3"+resultado3
    caso 4
      resultado3 := "4"+resultado3
    caso 5
      resultado3 := "5"+resultado3
    caso 6
      resultado3 := "6"+resultado3
    caso 7
      resultado3 := "7"+resultado3
    caso 8
      resultado3 := "8"+resultado3
    caso 9
      resultado3 := "9"+resultado3
    caso 10
      resultado3 := "A"+resultado3
    caso 11
      resultado3 := "B"+resultado3
    caso 12
      resultado3 := "C"+resultado3
    caso 13
      resultado3 := "D"+resultado3
    caso 14
      resultado3 := "E"+resultado3
    caso 15
      resultado3 := "F"+resultado3
    fimescolha
    num := num div 16
  fimenquanto
  escreva("O valor: ",valor," em decimal será de: ")
  escreval(resultado3," em HexadecimaL")
fimprocedimento

procedimento octal        // procedimento q converte p/ OctaL
inicio
  enquanto num > 0 faca
    escolha num mod 8
    caso 1
      resultado2 := "1"+resultado2
    caso 2
      resultado2 := "2"+resultado2
    caso 3
      resultado2 := "3"+resultado2
    caso 4
      resultado2 := "4"+resultado2
    caso 5
      resultado2 := "5"+resultado2
    caso 6
      resultado2 := "6"+resultado2
    caso 7
      resultado2 := "7"+resultado2
    fimescolha
    num := num div 8
  fimenquanto
  escreva("O Valor: ",valor)
  escreva(" em decimal será de: ")
  escreval(resultado2," em OctaL")
fimprocedimento

procedimento binar     // procedimento q converte p/ Binário
inicio
  enquanto num > 0 faca
    escolha num mod 2
    caso 0
      resultado1 := "0"+resultado1
    caso 1
      resultado1 := "1"+resulotado1
    fimescolha
    num := num mod 2
  fimenquanto
  escreva("O Valor: ",valor)
  escreva(" em Decimal será de: ",resultado1)
  escreval("em Binário")
fimprocedimento
//------------   I N I C I O ---- D O --  C Ó D I G O    ------------------------------
Inicio
  repita
    limpatela
    escreval("     binario    ")
    escreval("     OctaL      ")
    escreval("     HrxadecimaL")
    escreval("     Sair       ")
    leia(opcao)
    escreva("digite um valor Decimal : ")
    leia(num)
    valor := num
    escolha opcao
    caso "binario"
      binar
    caso "octal"
      octal
      //conversão para hexadecimal
    caso "hexadecimal"
      hexa
    caso "sair"
      escreval("Saindo Do Programa")
      opc := "N"
    outrocaso
      escreval("Opção InválidA . . . !")
    fimescolha
    se opcao <> "SAIR" entao
      escreva("     Tecle Enter !")
      leia(op)
    fimse
  ate opc = "N"
Fimalgoritmo

porém não está convertendo nada com nada    .

Compartilhar este post


Link para o post
Compartilhar em outros sites
20 horas atrás, ynp disse:

Recebi uma tarefa de um professor para fazer um programa que converta números decimais para binário, octal e hexadecimal, estou tentando usar o VisualG por estar no meu primeiro ano da faculdade e ser a única linguagem que conheço o básico, e estou tendo dificuldades, pois estou com um código que faz as conversões corretamente, porém ele faz sempre as 3 de uma vez, e eu gostaria de poder escolher a conversão que desejo fazer, tentei usar o "caso" mas não está dando certo. Meu código é esse, se alguém puder me ajudar ou me dizer algo que está errado eu agradeceria.

 

Tentei rodar o código aqui, mas para no escolha/caso.

 

tela.png

 

De um modo geral, duas dicas: [1] Evite tentar fazer tudo de uma vez. Prefira fazer por etapas. [2] Procure sempre consultar a estrutura de cada comando, ou seja: meio que nem precisa decorar, na dúvida, dar um Google. Com o tempo vai assimilando.

 

Como eu faria/sugiro fazer:

 

Inicia com o esboço:

algoritmo "Conversão decimal para outras bases"
var
   opcao : caractere
Inicio
   escreval("Para qual base você deseja converter seu número decimal?")
   escreval("1 - Binário")
   escreval("2 - Octal")
   escreval("3 - Hexadecimal")
   leia(opcao)

fimAlgoritmo

Testa, rodou.. beleza! Deu erro? ajusta! (não adianta inserir algo novo se o atual não está pronto)

 

Daí tenta implementar mais uma coisa. Por exemplo: vou colocar os se/senao... há! já tenho uma base e acho que vai ser melhor colocar um escolha/caso mesmo, como esqueci a estrutura dela, vou dar uma pesquisa e monto uma base, ex.:

algoritmo "Conversão decimal para outras bases"
var
   opcao : caractere
Inicio
   escreval("Para qual base você deseja converter seu número decimal?")
   escreval("1 - Binário")
   escreval("2 - Octal")
   escreval("3 - Hexadecimal")
   leia(opcao)

   escolha opcao
   caso 1
      escreval("Caso 1")
   caso 2
      escreval("Caso 2")
   fimEscolha

fimAlgoritmo

 

Fiz assim e deu pau! Veja que deu erro logo no início!!! não precisei completar toda a lógica para descobrir que a minha estrutura está errada. Parei e corrigi:

   escolha opcao
   caso "1"
      escreval("Caso 1")
   caso "2"
      escreval("Caso 2")
   fimEscolha

 

Pronto! faltou os "" para os "casos", pois declarei como caractere (em vez de inteiro). Perceba que a ideia aí é saber se a estrutura está funcional... No teu código, a estrutura está fora do padrão... qualquer coisa compare os códigos. Outra forma seria como o @devair1010 fez... fiz análogo ao dele, mas em vez de digitar o nome, coloquei um "código", mas é a mesma coisa.Vou adiante:

 

Inserir o cálculo para binário...

algoritmo "Conversão decimal para outras bases"
var
   opcao : caractere
   decimal : inteiro
   temp : inteiro
   
   resultado : caractere
Inicio
   escreval("Para qual base você deseja converter seu número decimal?")
   escreval("1 - Binário")
   escreval("2 - Octal")
   escreval("3 - Hexadecimal")
   leia(opcao)

   escolha opcao
   caso "1"
      escreval ("Digite um valor inteiro em Decimal: ")
      leia(decimal)
      temp <- decimal
      resultado <- ""
      enquanto (temp > 0) faca
         escolha (temp mod 2)
         caso 0
            resultado <- ("0" + resultado)
         caso 1
            resultado <- ("1" + resultado)
         fimEscolha
         temp <- (temp div 2)
      fimEnquanto
      escreval("O valor ", decimal:1, " em Decimal será de ", resultado, " em Binário!")
   caso "2"
      escreval("Caso 2")
   fimEscolha

fimAlgoritmo

 

Durante o processo foi dando vários errinhos. Fui testando até ficar "bom". 

 

Então.. a medida que for programando, já vai conseguindo fazer mais coisas de uma vez... mas, por exemplo, não faria sentido tentar logo fazer o octal sem ter uma boa garantia que o binário está ok... até mesmo porque, a lógica de um, poderia ser reutilizada no outro, daí, se errou em um, teria que sair alterando tudo no outro também.. mas como já deixei mais ou menos pronto, no próximo já vou mais afiado!

 

Continuando... tentei implementar o Octal:

algoritmo "Conversão decimal para outras bases"
var
   opcao : caractere
   decimal : inteiro
   temp : inteiro

   resultado : caractere
Inicio
   escreval("Para qual base você deseja converter seu número decimal?")
   escreval("1 - Binário")
   escreval("2 - Octal")
   escreval("3 - Hexadecimal")
   leia(opcao)

   escolha opcao
   caso "1"
      escreval ("Digite um valor inteiro em Decimal: ")
      leia(decimal)
      temp <- decimal
      resultado <- ""
      enquanto (temp > 0) faca
         escolha (temp mod 2)
         caso 0
            resultado <- ("0" + resultado)
         caso 1
            resultado <- ("1" + resultado)
         fimEscolha
         temp <- (temp div 2)
      fimEnquanto
      escreval("O valor ", decimal:1, " em Decimal será de ", resultado, " em Binário!")
   caso "2"
      escreval ("Digite um valor inteiro em Decimal: ")
      leia(decimal)
      temp <- decimal
      resultado <- ""
      enquanto (temp > 0) faca
         escolha (temp mod 8)
         caso 1
            resultado <- "1" + resultado
         caso 2
            resultado <- "2" + resultado
         caso 3
            resultado <- "3" + resultado
         caso 4
            resultado <- "4" + resultado
         caso 5
            resultado <- "5" + resultado
         caso 6
            resultado <- "6" + resultado
         caso 7
            resultado <- "7" + resultado
         fimEscolha
         temp <- (temp div 2)
      fimenquanto
      escreval("O valor ", decimal:1, " em Decimal será de ", resultado, " em Octal!")
   fimEscolha

fimAlgoritmo

Mas deu algo errado... fiz testes e os valores estão completamente errados. 

 

Tente dar continuidade a este código.


Onde está o erro:

Spoiler

Tem certeza que quer a resposta?

Spoiler

Sugiro que realmente tente descobrir

Spoiler

Apenas adianto que tem pelo menos 2 erros.

 


No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

Redes de Computadores - Gabriel Torres

PROMOÇÃO DE QUARENTENA

De R$ 39,90 por apenas R$ 9,90 só até as 23h59min desta sexta-feira 03/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!