Programmer des algorithmes.

Utilisation de Xcas

Modérateur : xcasadmin

JACQUOT
Messages : 7
Inscription : mar. déc. 09, 2008 8:58 am
Localisation : nice

Programmer des algorithmes.

Message par JACQUOT » lun. mai 25, 2009 4:36 pm

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.

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Message par frederic han » lun. mai 25, 2009 7:50 pm

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

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

Message par parisse » lun. mai 25, 2009 7:58 pm

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)

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;
}:;
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

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;
}:;

Répondre