Convertisseur d'un nombre décimal en binaire et hexadecimal

0/5 (8 avis)

Vue 12 217 fois - Téléchargée 1 577 fois

Description

Petit programme très simple qui convertit un nombre décimal que l'utilisateur saisi lui-même en nombre binaire et hexadécimal dans des mémos et l'utilisateur peut également choisir le nombre de lignes qu'il désir faire apparaitre.
Pour une raison de durée d'exécution, j'ai limité le nombre de lignes à 129 avec une variable en shortint.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
31 janv. 2010 à 11:02
Bon, pour un code de débutant, c'est pas mal mais ça manque quand même de vérifications des saisies utilisateurs.
D'autre part, il y a de nombreuses pistes d'allègement du code et d'optimisation des performances.
Aussi, je te propose le code suivant (documenté pour un débutant) de manière aiguiser la curiosité et proposer une autre manière de coder.
Je voudrais signaler l'utilisation des blocs d'exception présent dans presque tous les langages qui sont un formidable moyen de gérer les erreurs pouvant survenir à n'importe quel moment de l'exécution du programme. Il ne faut surtout pas s'en priver. Ne soit pas étonné si le débogueur de Delphi s'arrête sur une partie du code, c'est normal. Si tu exécutes ton code tel qu'un utilisateur lambda peut le faire, c'est à dire en lançant l'exe, tu ne verras pas ces fenêtres, preuve que les erreurs sont bien gérées.
A+

{Retourne une chaine représentant la valeur de number
en notation hexadécimale 32 bits}
function IntToHex(number: integer): string;
begin
try
{Pour convertir en hexadécimal, on s'appuie sur la fonction
format et ses multiples possibilités}
result := format('$%.8x', [number]);
except
result := ''
end;
end;

{Renvoie la valeur en sa représentation binaire}
function IntToBin(number: integer): string;
begin
result := '';
while number > 0 do
begin
{utilisation de l'opérateur binaire AND}
result := IntToStr(number and 1) + result;
{Décalage à droite et mémorisation du nombre résultant}
number := number shr 1;
end;
end;

{Détermination du nombre de lignes à calculer et à afficher}
function NombreDeLignes(chaine: string): shortint;
begin
{Simplification du code à l'aide d'un bloc try..except}
try
{... on tente la conversion}
Result := StrToInt(chaine) - 1;
except
{si rien n'est ou une valeur incorrecte est saisie,
on affecte 0 au résultat}
Result := 0;
end;
end;

function scrollbar(numberlines: integer): boolean;
begin
//Simplification du code !
result := numberlines > 14;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
nombre: integer;
i: shortint;
begin
memo1.ScrollBars := ssnone;
memo2.ScrollBars := ssnone;
memo1.lines.clear;
memo2.lines.clear;
if Trim(edit1.Text) = '' then
memo1.Text := 'Merci de respectez les consignes'
else
begin
{Protection du code par un bloc try..except pour
protéger ton code}
try
nombre := StrToInt(edit1.text);
for i := 0 to NombreDeLignes(edit2.Text) do
begin
memo1.lines.append(IntToBin(nombre + i));
memo2.lines.append(IntToHex(nombre + i));
end;
except
edit1.Text := 'Nombre incorrect !';
end;
end;
Memo1.Font.Color := clWindowText;
Memo2.Font.Color := clWindowText;
if scrollbar(NombreDeLignes(edit2.Text)) then
begin
memo1.ScrollBars := ssvertical;
memo2.scrollbars := ssvertical;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
{Plutôt que de devoir se déplacer avec la touche tabulation
ou cliquer sur le bouton, il est plus naturel de taper sur
la touche [Enter] pour beaucoup d'utilisateurs}
button1.Default := true;
end;
ludokk Messages postés 10 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 31 janvier 2010
31 janv. 2010 à 11:53
Merci beaucoup pour ce conseil, vos commentaires sont très clairs, je les ai mêmes compris.
Il y a une seule chose que je ne comprend pas vraiment, c'est est-ce que la variable result est une variable connu dans delphi et correspond à la valeur que va prendre la fonction, car j'ai remarqué que vous ne la définissez pas dans var.
Sinon, c'est tout j'ai compris le reste et je vous en remercie.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
31 janv. 2010 à 12:28
Oui, la variable result est définie par Delphi pour toutes les fonctions. On n'est pas obligés d'affecter le résultat au nom d'une fonction comme dans les autres langages.
J'espère que cela t'aura permis de découvrir qu'on peut faire plus court et plus simple.
Bonne continuation.
ludokk Messages postés 10 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 31 janvier 2010
31 janv. 2010 à 13:47
Oui, j'ai bien compris, merci pour ces informations
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
1 févr. 2010 à 13:03
Bonjour Philippe, bonjour Ludovic
pour la conversion binaire hexa on peut aussi directenet utiliser ceci :

function translationhex(nomber:integer):string;
///--- function IntToHex(Value:Integer;Digits:Integer):string;
begin
result := inttohex(nomber,nomber div 16 + 1)
end;

cordialement

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (ludokk)