Bonjour.
Voici 2 algorithmes proposés au bac L spé
1)France-juin 2007
entrée: a un entier naturel
initialisation: L liste vide
affecter la valeur a à x
traitement: tant que x>0
effectuer la division euclidienne de x par 7
affecter son reste à r et son quotient à q
mettre la valeur de r au début de la liste L
affecter q à x
sortie: afficher les éléments de la liste L
2)France-juin 2008
entrée: N est le code à 4 chiffres chacun choisi dans la liste
{0,1,2,3,4,5,6,7,8,9}
initialisation: affecter à P la valeur de N
affecter à S la valeur 0
affecter à K la valeur 1
traitement: tant que K<=4
affecter à U le chiffre des unités de P
affecter à K la valeur K+1
affecter à S la valeur S+K*U
affecter à U la valeur ( P-U)/10
affecter à R le reste de la division euclidienne de S par 7
affecter à C la valeur 7-R
sortie: afficher C
Je bloque lamentablement à cuse de la liste L du sujet 2007 et pour l'affectation à U du chiffre des unités de P pour le sujet 2008.
Pouvez-vous me donner les grandes lignes des instrucions xcas pour programmer ces 2 algorithmes.
Ces sujets pourraient avoir leur place dans les thèmes d'étude du programme 2009-2010 pour la classe de seconde.
Merci.
Programmer des algorithmes.
Modérateur : xcasadmin
-
- Messages : 1137
- Inscription : dim. mai 20, 2007 7:09 am
- Localisation : Paris
- Contact :
Bonjour, pour le 1
On initialise L par une liste vide:
L:=[];
on trouve les restes et quotients avec iquo et irem
q:=iquo(x,7);
r:=irem(x,7);
L:=concat(r,L); (ou augment)
ou bien L:=[r,op(L)];
x:=r;
Pour le 2:
pourquoi pas?
U:=irem(P,10);
sinon: convert(P,base,10) rend un tableau. Par ex en mode xcas
convert(P,base,10)[0]
a+
Frederic
On initialise L par une liste vide:
L:=[];
on trouve les restes et quotients avec iquo et irem
q:=iquo(x,7);
r:=irem(x,7);
L:=concat(r,L); (ou augment)
ou bien L:=[r,op(L)];
x:=r;
Pour le 2:
pourquoi pas?
U:=irem(P,10);
sinon: convert(P,base,10) rend un tableau. Par ex en mode xcas
convert(P,base,10)[0]
a+
Frederic
bonjour,
(Fred tu m'as grillé!)
le premier prog est l'écriture en base 7, en traduction littérale xcas ça donne (avec une séquence pour L)
le deuxième est mystérieux, je pensais à un test de divisibilité par 7, mais ça ne correspond pas, c'est censé faire quoi?
Il n'y a pas d'indication où se termine la boucle, et l'instruction d'affectation de (P-U)/10 dans U ne servirait à rien, je l'ai remplacé par dans P
(Fred tu m'as grillé!)
le premier prog est l'écriture en base 7, en traduction littérale xcas ça donne (avec une séquence pour L)
Code : Tout sélectionner
f(a):={
local L,x,q,r;
L:=NULL;
x:=a;
tantque x>0 faire
q,r:=iquorem(x,7);
L:=r,L;
x:=q;
ftantque;
return L;
}:;
Il n'y a pas d'indication où se termine la boucle, et l'instruction d'affectation de (P-U)/10 dans U ne servirait à rien, je l'ai remplacé par dans P
Code : Tout sélectionner
g(N):={
local P,K,U,R;
P:=N; S:=0; K:=1;
tantque K<=4 faire
U:=irem(P,10);
K++;
S:=S+K*U;
P:=(P-U)/10;
ftantque;
R:=irem(S,7);
return 7-R;
}:;