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
31
30 mai 2002 à 20:06
Pourquoi ne pas pousser jusqu'à des conversions en hexadécimal, pour l'utile et pour le fun ?