Bonjour,
je tente de faire un petit programme pour passer de la base b (b<=16) à la base 10 sans utiliser convert.
Pour b<=10 pas de problème :
bvers10(b,L):={//L est une liste : L:=[ , , ]
local s;
s:=size(L);
l:=revlist(L);
return(sum(b^(k)*L[k],k,0,s-1));
}:;
Les problèmes commencent à partir de b=11
je veux donc convertir les lettres A, B... en 10, 11... dans la liste L et dans l'aide j'ai trouvé la commande subop
mais elle ne "marche" pas comme je voudrais, exemple :
> L:=[A,B]
> subop(L,0=10)
> L
réponse d'Xcas : [A B] , apparement il n'a pas subsstitué 10 à A.
donc évidement le programme ci-dessous ne marche pas :
Bvers10(b,L):={
local s;
s:=size(L);
for(k;0;s-1){
if (L[k]=="A") {subop(L,k=10)};
if (L[k]=="B") {subop(L,k=11)};
if (L[k]=="C") {subop(L,k=12)};
if (L[k]=="D") {subop(L,k=13)};
if (L[k]=="E") {subop(L,k=14)};
if (L[k]=="F") {subop(L,k=15)};
}//fin for
l:=revlist(L);
return(sum(b^(l)*L[l],l,0,s-1));
}:;
Quelqu'un voit-il s'il y a quelque chose qui cloche (synthaxe de subop mal utilisée...) ?
Stéphane Lejoly
conversion en base b et subop
Modérateur : xcasadmin
Je me corrige partiellement :
j'avais mal tapé la commande elle même :
subsop et non subop !!
Bon mais je n'arrive toujours pas à substituer dans ma liste :
Bvers10(b,L):={//b<=15
local s;
s:=size(L);
for(k;0;s-1){
if (L[k]=="A") {L:=subsop(L,k=10)};
if (L[k]=="B") {L:=subsop(L,k=11)};
if (L[k]=="C") {L:=subsop(L,k=12)};
if (L[k]=="D") {L:=subsop(L,k=13)};
if (L[k]=="E") {L:=subsop(L,k=14)};
if (L[k]=="F") {L:=subsop(L,k=15)};
}//fin for
l:=revlist(L);
return(L+"vaut en base 10 "+ sum(b^(l)*L[l],l,0,s-1));
}:;
Stéphane Lejoly
j'avais mal tapé la commande elle même :
subsop et non subop !!
Bon mais je n'arrive toujours pas à substituer dans ma liste :
Bvers10(b,L):={//b<=15
local s;
s:=size(L);
for(k;0;s-1){
if (L[k]=="A") {L:=subsop(L,k=10)};
if (L[k]=="B") {L:=subsop(L,k=11)};
if (L[k]=="C") {L:=subsop(L,k=12)};
if (L[k]=="D") {L:=subsop(L,k=13)};
if (L[k]=="E") {L:=subsop(L,k=14)};
if (L[k]=="F") {L:=subsop(L,k=15)};
}//fin for
l:=revlist(L);
return(L+"vaut en base 10 "+ sum(b^(l)*L[l],l,0,s-1));
}:;
Stéphane Lejoly
Oups désolé ! Remarquez cette erreur de débutant a un coté rafraichissant à la hauteur de sa bétise !
Sinon il y avait une autre erreur sur les caractères A B ... il ne fallait pas de " " cela donne donc :
Bvers10(b,L):={//b<=15 et L le nombre sous forme de liste L:=[ ; ;]
local s;
s:=size(L);
for(k:=0;k<s;k++){
if (L[k]==A) {L[k]:=10};
if (L[k]==B) {L[k]:=11};
if (L[k]==C) {L[k]:=12};
if (L[k]==D) {L[k]:=13};
if (L[k]==E) {L[k]:=14};
if (L[k]==F) {L[k]:=15};
}//fin for
L:=revlist(L);
return("le nombre L vaut en base 10 "+ sum(b^(l)*L[l],l,0,s-1));
}:;
et ça marche .
Merci.
Stéphane Lejoly (confus)
Sinon il y avait une autre erreur sur les caractères A B ... il ne fallait pas de " " cela donne donc :
Bvers10(b,L):={//b<=15 et L le nombre sous forme de liste L:=[ ; ;]
local s;
s:=size(L);
for(k:=0;k<s;k++){
if (L[k]==A) {L[k]:=10};
if (L[k]==B) {L[k]:=11};
if (L[k]==C) {L[k]:=12};
if (L[k]==D) {L[k]:=13};
if (L[k]==E) {L[k]:=14};
if (L[k]==F) {L[k]:=15};
}//fin for
L:=revlist(L);
return("le nombre L vaut en base 10 "+ sum(b^(l)*L[l],l,0,s-1));
}:;
et ça marche .
Merci.
Stéphane Lejoly (confus)