conversion en base b et subop

Utilisation de Xcas

Modérateur : xcasadmin

slejoly
Messages : 194
Inscription : sam. oct. 14, 2006 10:17 am
Localisation : Lorient

conversion en base b et subop

Message par slejoly » ven. oct. 12, 2007 9:16 am

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

slejoly
Messages : 194
Inscription : sam. oct. 14, 2006 10:17 am
Localisation : Lorient

Message par slejoly » ven. oct. 12, 2007 9:45 am

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

parisse
Messages : 5892
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Message par parisse » ven. oct. 12, 2007 4:34 pm

il vaut mieux ecrire directement L[k]:=10 par exemple que d'utiliser subsop.
Sinon, pour la boucle la syntaxe serait plutot
for (k:=0;k<s;k++){
...
}

slejoly
Messages : 194
Inscription : sam. oct. 14, 2006 10:17 am
Localisation : Lorient

Message par slejoly » ven. oct. 12, 2007 5:28 pm

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)

Répondre