CHANGEMENT DE BASES

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 30 mai 2002 à 22:47
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 30 mai 2002 à 22:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11950-changement-de-bases

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
30 mai 2002 à 22:47
J'ai deux petites remarques :

Concernant la fonction Puissance() :
Toute fonction écrite dans Delphi dispose d'une variable prédéfine Result du même type que le résultat de la fonction. Elle peut être utilisée comme opérande et comme résultat. Elle sert aussi à garder le résultat final de la fonction.
Le boucle For ne fait rien si le pas final de la boucle est strictement supérieur au pas d'origine, ce n'est donc pas la peine de tester le cas 0 :
Function puissance(a,n : integer) : integer;
var i: integer;
begin
result:=1;
for i:=1 to n do result:=result*a;
end;

Concernant les conversion.
Rien à dire sur le principe mais tu pourrais optimiser le code, car pour chaque chiffre tu calcules la puissance de la base, ce n'est pas utile car d'un chiffre à l'autre il suffit de multiplier l'ancienne valeur de la base. Par exemple dans le cas de la procédure vers la base 10 :
procedure Passbaseato10(nbr_caractere,base_depart : integer);
Var cptr,Puiss : integer;
begin
nbrdix:=0;
Puiss:=1;
for cptr:=1 to nbr_caractere do
begin
nbrdix:=nbrdix+nbre[cptr]*puiss;
Puiss:=Puiss*Base_depart;
end;
End;

Ou vers la base n :
procedure pass10tobasen(nouvelle_base : integer;nbrdix : longint);
var ctr,quotient,nbrn,puiss : integer;
begin
nbrn:=0;
quotient:=nbrdix;
Puiss:=1;
while quotient>0 do
begin
nbrn:=nbrn+(quotient mod nouvelle_base)*Puiss;
quotient:=quotient div nouvelle_base;
Puiss:=Puiss*10
end;
writeln('Le nombre en base ',nouvelle_base,' est : ',nbrn);
end;

Nono.

P.S.: Pourquoi utilises-tu toujours des applications consoles ?
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
30 mai 2002 à 20:06
Pourquoi ne pas pousser jusqu'à des conversions en hexadécimal, pour l'utile et pour le fun ?
Rejoignez-nous