Algorithmique et traduction pour Xcas

De
Publié par

Algorithmique et traduction pour Xcas Renée De Graeve 22 avril 2010

  • commande breakpoint d'argu

  • barre de boutons sst

  • programme syntaxiquement correct

  • touche f9 de vôtre ordinateur

  • xcas

  • menu cfg


Publié le : jeudi 1 avril 2010
Lecture(s) : 56
Tags :
Source : www-fourier.ujf-grenoble.fr
Nombre de pages : 333
Voir plus Voir moins
Algorithmique et traduction pour Xcas
Renée De Graeve
22 avril 2010
2
Chapitre 1
Vue d'ensemble de Xcas pour le programmeur
1.1
Installation de Xcas
Le programme est un logiciel libre écrit en C++, (disponible sous licence Xcas GPL). La version à jour se récupère sur : http://wwwfourier.ujfgrenoble.fr/˜parisse/giac_fr.htmlou ftp ://fourier.ujf-grenoble.fr/xcas où l'on trouve le code source ( ) ou des versions précompilées pour giac.tgz Linux (PC ou ARM), Windows, Mac OS.
1.2
Les différents modes
propose un mode de compatibilité avec , et la : Xcas Maple MuPAD TI89/92 pour cela, il suffit de le spécifier dans du menu de configuration du Prog style (bouton ou menu ) ou avec le cas Config Cfg->Configuration du CAS menu . On peut choisir, en cliquant sur la flèche située Cfg->Mode (syntax) à coté de : ou ou ou . Prog style Xcas Maple MuPAD TI89/92 On a aussi la possibilité d'importer une session ou une archive Maple TI89/92 en choisissant du menu , ou importer dans un niveau éditeur de Importer Fich programmes un fichier écrit en syntaxe , ou par le menu Maple Mupad TI89/92 . Prog->Inserer On présente ici le mode qui est proche de la syntaxe . On a aussi la pos-Xcas C sibilité d'avoir toutes les instructions en français de façon à être proche du la ngage Algorithmique.
1.3 Éditer, sauver, exécuter un programme avec la syn-taxe Xcas On édite un programme ou un script (i.e. une suite de commandes séparées par des ) avec son éditeur préféré : on peut écrire, dans un même fichier, la défini-; tion de plusieurs fonctions séparées par des points virgules ( ) (que l'on sauve par ; exemple sous le nom de ), puis dans on tape : bidon Xcas read("bidon") ;
3
4CHAPITRE 1. VUE D'ENSEMBLE DE XCAS POUR LE PROGRAMMEUR
et cela a pour effet, de compiler les différentes fonctions de , de les mettre bidon comme réponse (avec dans la zone des résultats intermédiaires pour Success.. indiquer les fonctions valides). En reéditant le programme, ou le script, avec son éditeur préféré, on peut le cor-riger, le sauver sous un autre nom etc..., mais il est préférable de le recopier dans un niveau éditeur de programmes (que l'on ouvre avec ) pour cela on peut : Alt+p – soit écrire directement le programme (ou le script), dans un niveau éditeur de programmes, – soit utiliser le menu sous-menu de l'éditeur de programmes, Fich Charger si le programme est dans un fichier, – soit le recopier avec la souris, si le programme est dans la ligne de commande (par exemple après avoir fait du menu de la session) ou si Charger Fich le programme est dans son éditeur préféré, En effet, depuis un niveau éditeur de programmes, on peut : – avoir de l'aide sur les commandes de : il suffit d'écrire la commande Xcas et d'appuyer sur la touche F1 de vôtre ordinateur, – indenter facilement : il suffit d'appuyer sur la touche de tabulation de vôtr e ordinateur, – tester facilement si le programme est syntaxiquement correct : il suffit d'ap-puyer sur le bouton de la barre des menus ou sur la touche F9 de vôtre OK ordinateur : la ligne où se trouve la faute de syntaxe est indiquée en bleu dans la zone intermédiaire. On corrige les fautes si il y en a... Quand le programme est syntaxiquement cor-rect, il y a dans la zone intermédiaire et on a le Success compilling ... programme en réponse ou si on a terminé l'écriture du programme par . Done : ; On peut alors exécuter le programme dans une ligne de commande. Vous sauvez le programme avec le bouton du niveau éditeur de programmes Save sous le nom que vous voulez lui donner en le terminant par le suffixe (ce nom .cxx s'inscrit alors à côté du bouton du niveau éditeur de programmes. Si ensuite, Save vous voulez lui donner un autre nom il faut le faire avec le menu sous-menu Prog de l'éditeur de programmes. Sauver comme
1.4
Débugger un programme avec la syntaxe Xcas
Pour utiliser le débuggeur, il faut que ce programme soit syntaxiquement cor-rect : vous avez par exemple un programme syntaxiquement correct, mais qui ne fait pas ce qu'il devrait faire, il faut donc le corriger. Avec le débuggeur, on a la possibilité d'exécuter le programme au pas à pas ( ), ou d'aller directement ( ) à une ligne précise marquée par un point sst cont d'arrêt ( ), de voir ( ou ) les variables que l'on désire surveiller, break voir watch d'exécuter au pas à pas les instructions d'une fonction utilisateur utilisée dans le programme ( ou ), ou de sortir brutalement du débuggeur ( ou dans sst_in tuer ). kill On tape : . debug(nom _du_programme(valeur_des_ arguments)) Il faut bien sûr que le programme soit validé : – si le programme est dans un niveau éditeur de programme, on appuie sur OK
1.4. DÉBUGGER UN PROGRAMME AVEC LA SYNTAXE XCAS
5
pour le compiler, on corrige les fautes de syntaxe éventuelles et on appuie sur jusqu'à obtenir OK Success compiling... – si le programme qui est syntaxiquement correct se trouve dans un fichier, on tape : si est le nom du fichier où se trouve ce read("toto") toto programme. Par exemple, si a été validé, on tape : pgcd debug(pgcd(15,25)) L'écran du débugger s'ouvre : il est formé par trois écrans séparé s par une ligne et une barre de boutons : eval sst,dans,cont... 1. dans l'écran du haut, le programme source est écrit et la ligne en surbrilla nce sera exécutée grâce au bouton . sst
2. 3. 4.
dans la ligne , marque automatiquement l'action en cours par eval Xcas exemple . Cette ligne permet aussi de faire des calculs dans l'environ-sst nement du programme ou de modifier une variable, par exemple on peut y écrire pour modifier la valeur de en cours de programme, a :=25 a dans l'écran du milieu, on trouve, le programme, les points d'arrêts, le numé ro de la ligne du curseur. une barre de boutons sst,dans,cont... – exécute la ligne courante (celle qui est en surbrillance) sans entrer sst dans les fonctions et met en surbrillance l'instruction suivante, – ou exécute la ligne courante (celle qui est en surbrillance) dans sst_in en entrant dans les fonctions utilisées dans le programme et qui ont été définies précédemment par l'utilisateur, puis met en surbrillance l'instruc-tion suivante du programme en incluant les instructions de la fonction. Cela permet ainsi d'exécuter pas à pas les instructions de cette fonction. – exécute les instructions du programme situées entre la ligne courante cont et la ligne d'un point d'arrêt et met en surbrillance cette ligne, – ou ferme brutalement l'écran du débuggeur. tuer kill Attentionil faut fermer l'écran du débuggeur pour pouvoir utiliser . Xcas – ajoute un point d'arrêt. Les points d'arrêts permettent d'aller di-break rectement à un point précis avec le bouton . On marque les points cont d'arrêts grâce au bouton ou à la commande d'argu-break breakpoint ments le nom du programme et le numéro de la ligne où l'on veut un point d'arrêt : par exemple . Pour faciliter son utili-breakpoint(pgcd,3) sation, il suffit de cliquer dans l'écran du haut sur la ligne où l'on veut le point d'arrêt pour avoir : dans la ligne , avec le nom breakpoint eval du programme et le bon numéro de ligne, puis de valider la commande. Il suffit donc de cliquer et de valider ! – enlève un point d'arrêt. On doit, pour réutiliser d'autres points rmbrk d'arrêts, d'effacer les points d'arrêts utilisés précédemment avec la co m-mande qui a les mêmes arguments que . rmbreakpoint breakpoint Là encore, pour faciliter son utilisation, il suffit de cliquer sur la ligne où l'on veut enlever le point d'arrêt pour avoir : dans la rmbreakpoint ligne de commande, avec le nom du programme et le bon numéro de ligne. Attentionen mettra un !si il n'y a pas de point d'arrêt à cet endroit Xcas – ou ajoute la variable que l'on veut voir évoluer. Si on ne voir watch
6VUE D'ENSEMBLE DE XCAS POUR LE PROGRAMMEURCHAPITRE 1.
se sert pas de ou toutes les variables locales et tous les ar-voir watch guments du programme sont montrées. Si on se sert de ou voir watch seules les variables designées seront montrées : on appuie sur le bouton ou et la commande s'écrit dans la ligne d'évalu-voir watch watch ation . On tape alors, les arguments de qui sont les noms eval watch des variables que l'on veut surveiller, par exemple : et on watch(b,r) valide la commande. – efface les variables désignées précédemment avec et que rmwtch watch l'on ne veut plus voir, par exemple : . rmwatch(r) 5. dans l'écran du bas, on voit soit l'évolution de toutes les variables locale s et de tous les arguments du programme, soit l'évolution des variables désignées par . watch
1.5
1.5.1
Présentation générale des instructions avec la syntaxe Xcas Les commentaires
Les commentaires sont des chaînes de caractères, ils sont précédés de ou // sont parenthésés par / / * *
1.5.2
Le bloc
Une ou est une séquence d'une ou plusieurs instructions. action bloc Quand il y a plusieurs instructions il faut les parenthéser avec et séparer les { } instructions par un point virgule ( ) ; Un est donc parenthésé par et commence éventuellement par la déclara-bloc { } tion des variables locales ( ). local...
1.5.3
Les variables globales et les variables locales
Voir aussi2.2Les variables sont les endroits où l'on peut stocker des valeurs, des nombres, des expressions, des objets. Le nom des variables est formé par une suite de caractères et commence par une lettre : attention on n'a pas droit aux mots réservés ...ne pas utiliser par exemple la variable dans un si vous avez cocher dans la i for pas de test de i car représente le nombre complexe de module configuration generale i π 1 et d'argument . 2 L'affectation se fait avec (par exemple ). := a :=2 ; b :=a ;
Les variables locales non symboliques
Une variable utilisée uniquement à l'intérieur d'une fonction (resp d'un bloc ) pour contenir des résultats intermédiaires est une variable locale à la fonction (resp au bloc). Les variables locales doivent être déclarées au début de la fonction (resp au début d'un bloc) par le mot réservé puis on met les noms des variables local séparés par des virgules ( ) et cette déclaration initialise alors ces variables locales , à . 0
1.5. PRÉSENTATION GÉNÉRALE DES INSTRUCTIONS AVEC LA SYNTAXE7 XCAS
Les variables locales peuvent être initialisées lors de leur déclaration à une autre valeur en mettant les affectations entre parenthèses et separées par des vir-gules. Mais attention l'initialisation des variables locales faites dans la ligne de se fait en utilisant le contexte global d'évaluation , par exemple : local n:=5; f():={ local (n:=1),(d:=n+1); return d; } renvoie et non : c'est la valeur de ou est global. Il faut initialiser f() 6 2 n+1 n d après la déclaration locale pour utiliser le contexte local en tapant :
f():={ local (n:=1),d; d:=n+1; return d; } et alors renvoie 2. f()
Les variables locales symboliques
AttentionLes variables locales sont toujours affectèes, par exemple : local A ; print(A) ; affichera écrit en bleu. A :0 Si on veut utiliser dans un programme des variables formelles, on a 2 solutions : – On considère les variables formelles du programme comme globales, MAIS alors il faut s'assurer que ces variables sont purgées avant l'exé cution du programme...ce qui contraignant ! – On déclare les variables formelles du programme avec (par exemple local ), PUIS on utilise pour spécifier que local x ; assume(x,symbol) ; la variable devient symmbolique ou on utilise pour purger x purge(x) la variable qui devient symmbolique. Ainsi au cours du programme, x x pourra devenir non symbolique si on l'affecte, puis, redevenir symbolique après l'instruction ou l'instruction . assume(x,symbol) ; purge(x) Il est donc préférable de définir la variable formelle , avec suivi var local var ; de ou de . assume(var,symbol) ; purge(var) Exemple Voici le programme qui donne la valeur de la suite de Fibonnacciudéfinie par u0=u0, u1=u1, un+2=un+1+un. 2 On sait que siaetbsont les racines dexx1, les suites vérifiant la rela-tion de récurrenceun+2=un+1+unsont des combinaisons linéaires des suites n n géométriquesaetb, c'est-à-dire que l'on a :
n n un=Aa+Bb
pourAetBsolutions du système[u0=A+B, u1=Aa+Bb]. Voici les deux façons de faire :
8VUE D'ENSEMBLE DE XCAS POUR LE PROGRAMMEURCHAPITRE 1.
– les variables formelles sont globales, Dans le programme qui suit, on utilise les variables formelles qui x,A,B doivent être purgées et qui seront des variables globales. On tape : u(n,uo,u1):={ local L,a,b; //verifier que A,B,x ne sont pas affect\'ees [a,b]:=solve(x^2-x-1,x); L:=linsolve([A+B=uo,A a+B b=u1],[A,B]); * * return normal(L[0] a^n+L[1] b^n); * * }; Lors de la compliation, dit : Xcas //Warning : x A B declared as global variable(s) compiling u On tape : u(3,0,1) On obtient : 2
– les variables formelles sont declarées locales, Dans le programme qui suit, on utilise les variables formelles qui A,B,x seront symboliques ou formelles grâce aux commandes : assume(A,symbol); assume(B,symbol); assume(x,symbol); ou à la commande . purge(A,B,x) Remarque: pour retrouver des variables non formelles il suffira de les af-fecter. On tape : u(n,uo,u1):={ local L,a,b,A,B,x; assume(A,symbol); assume(B,symbol); assume(x,symbol); [a,b]:=solve(x^2-x-1,x); L:=linsolve([A+B=uo,A a+B b=u1],[A,B]); * * return normal(L[0] a^n+L[1] b^n); * * }; Ou on tape : u(n,uo,u1):={ local L,a,b,A,B,x; purge(A,B,x); [a,b]:=solve(x^2-x-1,x); L:=linsolve([A+B=uo,A a+B b=u1],[A,B]); * * return normal(L[0] a^n+L[1] b^n); * * }; Lors de la compliation, dit : Xcas // Success compiling u
1.5. PRÉSENTATION GÉNÉRALE DES INSTRUCTIONS AVEC LA SYNTAXE9 XCAS
On tape : u(3,0,1) On obtient : 2 Pour bien comprendre ce qui se passe, on rajoute des : print u(n,uo,u1):={ local L,a,b,A,B,x; print(A); assume(A,symbol); print(A); assume(B,symbol); assume(x,symbol); [a,b]:=solve(x^2-x-1,x); L:=linsolve([A+B=uo,A a+B b=u1],[A,B]); * * A:=5; print(A); return normal(L[0] a^n+L[1] b^n); * * }; On tape : A :=30 u(3,0,1) On obtient écrit en bleu : ( est locale et n'est pas symbolique et vaut ) A :0 A 0 ( est locale et symbolique) A :A A ( est locale etn'est pas symbolique et vaut ) A :5 A 5 puis la réponse : 2 On tape : A On obtient : (la variable globale n'est pas symbolique et vaut ) 30 A 30
Variables locales internes à un bloc Voici comme exemple le programme de la fonction qui donne le quotient et le reste de la division euclidienne de 2 entiers (c'est la fonction de ) : iquorem Xcas idiv2(a,b):={ local (q:=0),(r:=a); if (b!=0) { q:=iquo(a,b); r:=irem(a,b); } return [q,r]; }; Voici le programme de la même fonction mais avec les variables locales in-ternes au bloc du : if idiv2(a,b):={
10VUE D'ENSEMBLE DE XCAS POUR LE PROGRAMMEURCHAPITRE 1.
if (b==0) {return [b,a];} if (b!=0) { local q,r; q:=iquo(a,b); r:=irem(a,b); return [q,r]; } }; ou encore avec les variables locales internes au bloc du : else idiv2(a,b):={ if (b==0) {return [b,a];} else { local q,r; q:=iquo(a,b); r:=irem(a,b); return [q,r]; } };
1.5.4 Les programmes et les fonctions Les paramètres sont mis après le nom du programme ou de la fonction entre parenthèses (par exemple ). f(a,b) :=... Ces paramètres sont initialisés lors de l'appel du programme ou de la fonction e t se comportent comme des variables locales. L'affectation se fait avec (par exemple ). := a :=2 ; b :=a ; Les entrées se font par passage de paramètres ou avec . input Les sorties se font en mettant le nom de la variable à afficher (ou la séquence des variables à afficher ou entre crochets les variables à afficher séparées par une virgule) précedé du mot réservé . print Il n'y a pas de distinction entre programme et fonction : la valeur d'une fonction est précedée du mot réservé . return Remarquen'est pas obligatoire car renvoie toujours la valeur de return Xcas la dernière instruction, mais est très utile car il fait sortir de la fonction : return les instructions situèes après ne sont jamais effectuées. return
1.5.5 Les tests Avec le langage les tests ont soit une syntaxe similaire au langage Xcas C++ soit une version française proche du langage algorithmique. Pour les tests, les syntaxes admises sont :
if(condition) instruction; on met {..} lorsqu'il faut faire plusieurs instructions : if(condition){instructions} ou siconditionalorsinstructionsfsi
1.5. PRÉSENTATION GÉNÉRALE DES INSTRUCTIONS AVEC LA SYNTAXE11 XCAS
on teste la condition : si elle est vraie, on fait les instructions et si elle est fausse on ne fait rien c'est à dire on passe aux instructions qui suivent le if ou le . si Par exemple : testif1(a,b):={ if (a<b) b:=b-a; return [a,b]; }; ou testsi1(a,b):={ si a<b alors b:=b-a; fsi; return [a,b]; }; et on a : testif1(3,13)=testsi1(3,13)=[3,10] testif1(13,3)=testsi1(13,3)=[13,3] if(condition) instruction1; elseinstruction2; on met {..} lorsqu'il faut faire plusieurs instructions : if(condition){instructions1} else {instructions2} ou siconditionalorsinstructions1sinoninstructions2 fsi on teste la condition : si elle est vraie, on fait les instructions1 et si elle est fausse on fait les instructions2. Par exemple : testif(a,b):={ if (a==10 or a<b) b:=b-a; else a:=a-b; return [a,b]; }; ou testsi(a,b):={ si a==10 or a<b alors b:=b-a; sinon a:=a-b; fsi; return [a,b]; }; et on a : testif(3,13)=testsi(3,13)=[3,10] testif(13,3)=testsi(13,3)=[10,3] testif(10,3)=testsi(10,3)=[10,-7]
Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.