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.
31 janv. 2010 à 11:02
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;
31 janv. 2010 à 11:53
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.
31 janv. 2010 à 12:28
J'espère que cela t'aura permis de découvrir qu'on peut faire plus court et plus simple.
Bonne continuation.
31 janv. 2010 à 13:47
1 févr. 2010 à 13:03
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.