Ir ao conteúdo

Pascal/Delphi Solução de um pequeno problema


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Postado

Boa tarde amigos! Estou com um pequeno problema... este software, conversor de decimal para hexadecimal, ao atribuir o comando de repeat, ele está repetindo as reposta anteriores... alguem sabe como resolver esse problema ou resetar a memoria da variavel ''s''? meio urgente, desde já agradeço. 

 

Segue o programa:

program Dextohex;
uses crt;
Var
deci,x,r:integer;
c:Char;
s:string;
Begin
repeat
ClrScr;
write('Digite o número em decimal: ');
readln(deci);
x:=deci;
repeat
r:=x mod 16;
x:=x div 16;
case r of
10: c:='A';
11: c:='B';
12: c:='C';
13: c:='D';
14: c:='E';
15: c:='F';
else
c:=Chr(48+r);
end;
s:=c+s;
 
Until x=0;
write(s);
readln;
until deci=0;

end.

 

  • Amei 1
  • Membro VIP
  • Solução
Postado
1 hora atrás, Nazshue disse:

Boa tarde amigos! Estou com um pequeno problema... este software, conversor de decimal para hexadecimal, ao atribuir o comando de repeat, ele está repetindo as reposta anteriores... alguem sabe como resolver esse problema ou resetar a memoria da variavel ''s''? meio urgente, desde já agradeço. 

 

Basicamente precisar "reinicializar" a variável s a cada loop.

 

Algo assim:

//program Dextohex;
program DecToHex;
uses 
  CRT;
var
  deci,x,r:integer;
  c :char;
  s:string;
begin
repeat
  ClrScr;
  write  ('Digite o número em decimal: ');
  readln(deci);
  x := deci;
  s := ''; //zera a variável
  repeat
    r := x mod 16;
    x := x div 16;
    case r of
      10: c := 'A';
      11: c := 'B';
      12: c := 'C';
      13: c := 'D';
      14: c := 'E';
      15: c := 'F';
    else
      c := chr(48+r);
    end; //fim case
    s := c+s;
  until x=0;
write(s);
readln;
until deci=0;
end.

 

  • Curtir 2
  • Amei 1
  • Membro VIP
Postado
26 minutos atrás, Nazshue disse:

@Simon Viegas Muito obrigado amigo! Era exatamente isso que eu queria, eu não sabia a função pra zerar a string, valeu!

 

Só um detalhe: não chamaria de "função". Acho que poderia dizer algo como: "eu não sabia uma forma pra zerar a string". Chamaria de "uma função para zerar", se fosse usado algo assim:

ZeraString(s); //obs.: essa função não existe como padrão, mas é possível criar se quiser

Entende?

 

 

O termo "função" e "procedimento" no Pascal são relacionados a esses recursos que "fazem algo", ou seja, esses "comandos".

 

Exemplo de comandos no Pascal: chr() e ReadKey(), writeln(), readln(), ClrScr() etc

 

Existem 2 tipos: Function e Procedure.

 

Quando o "comando" retorna algo em si mesmo, é chamado de function (função). Quando não retorna algo, é chamado Procedure. Ex.: chr() e ReadKey() são function, pois "fazem algo e trazem um valor neles mesmos". Tanto que você fez:

c := chr(48+r); //a function recebe um paramentro, faz algo
                //lá e retorna um valor em si mesmo. Daí pode
                //"jogar" esse valor em c

 

Repare que você utilizou uma variável para receber o "comando" como valor e funciona.

 

Já os comandos do tipo procedure não retorna nada em si mesmo. Tente fazer algo assim para você ver:
 

c := writeln("Olá mundo");

Não vai funcionar!

 

RESUMINDO:

Function e Procedure são basicamente a mesma coisa, apenas um retorna algo em si, a outra não.

  • Curtir 2
Postado

@Simon Viegas Huum, entendi. Bem observado, me referi errado, mais uma vez obrigado, e obrigado também pelas dicas, estou começando agora... tudo que eu puder aprender vou fazer o possível haha

  • Curtir 2

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