Apprendre Maple Séquences, listes, ensembles,
tables et tableaux


 
  Page d'accueilPage d'accueil   RechercherRechercher   Forum de discussionForum de discussion   ContactContact   SommaireSommaire 
  Cours MapleCours Maple   Travaux dirigésTravaux dirigés   Thèmes d'activitésThèmes d'activités   Thèmes d'activitésMaplets
Ecran MapleEcran Maple  TéléchargementTéléchargement  BibliographieBibliographie  LiensLiens  

 

Page d'accueil   Cours Maple   << Chapitre précédent   Chapitre suivant >>



LES SÉQUENCES:


Une
séquence , de type exprseq , est une suite d'éléments séparés par une virgule . On accède à

chaque élément par son rang , mais l'affectation est interdite :

 

> restart:
    s:=a,b,-1,2*p-q,r;

s := a, b, -1, 2*p-q, r

> s[4];s[2..5];s[3]:=0;

2*p-q

b, -1, 2*p-q, r

Error, cannot assign to an expression sequence

NULL désigne la séquence vide:

> v:=NULL;

v := NULL

 

Pour répéter un élément , utiliser l'opérateur dollar $ :

> t:=a$2,y$5;

t := a, a, y, y, y, y, y

Pour concaténer 2 séquences ,utiliser l'opérateur virgule ,

> u:=s,t;

u := a, b, -1, 2*p-q, r, a, a, y, y, y, y, y

 

op(expr) retourne la séquence formée des opérandes de l'expression expr :

 

> op(a-y*(a+y+z)+3*z);

a, -y*(a+y+z), 3*z

La fonction seq permet de créer une séquence

pour un indice i variant de a à b avec un pas de 1 : syntaxe seq(expr,i=a..b) , ou

pour un indice décrivant les opérandes d'une expression e : syntaxe seq(expr,i=e) :

 

> seq(i^3,i=-1/2..2);

-1/8, 1/8, 27/8

> e:=a-y*(a+y+z)+3*z:op(e);
    seq(mu+i,i=e);

a, -y*(a+y+z), 3*z

mu+a, mu-y*(a+y+z), mu+3*z

> seq(seq(a||i||j,j=1..3),i=1..3);

a11, a12, a13, a21, a22, a23, a31, a32, a33

 

LES LISTES:

 

Une liste , de type list , est obtenue en plaçant une séquence entre les crochets [ et ] .

La liste vide se note [] .

 

> s:=a$2,b$3,alpha,beta;L:=[s];

s := a, a, b, b, b, alpha, beta

L := [a, a, b, b, b, alpha, beta]

On accède à chaque élément d'une liste par son rang , l'affectation est autorisée:

> L[6];L[2..5];L[3]:=delta;

alpha

[a, b, b, b]

L[3] := delta

op transforme une liste en séquence , nops donne le nombre d'éléments d'une liste .

Les fonctions op et nops ne peuvent agir sur une séquence s : faire ops([s]) et nops([s])

 

> op(L);

a, a, delta, b, b, alpha, beta

> nops(L);

7

Pour modifier une liste, on peut aussi utiliser subs ou subsop :

> L:=subs(b=b1,L);

L := [a, a, delta, b1, b1, alpha, beta]

> L:=subsop(3=gamma,L);

L := [a, a, gamma, b1, b1, alpha, beta]

 

La fonction booléenne member permet de savoir si une expression est membre d'une liste:

> member(gamma,L), member(epsilon,L);

true, false

 

LES ENSEMBLES:

 

Un ensemble , de type set , est obtenu en plaçant une séquence entre les accolades { et }.

Les éléments sont rangés par adresse , donc l'ordre initial n'est pas nécessairement conservé et les éléments en

double sont supprimés. L'ensemble vide se note {} .

 

> s:=a$2,b$3,alpha,beta;e:={s};

s := a, a, b, b, b, alpha, beta

e := {a, b, alpha, beta}

On accède à chaque élément d'un ensemble par son rang , mais l'affectation est interdite :

 

> e[2];e[2..3];e[3]:=delta;

b

{b, alpha}

Error, cannot assign to a set

op transforme un ensemble en séquence , nops donne le nombre d'éléments d'un ensemble .

 

> op(e);nops(e);

a, b, alpha, beta

4

Pour modifier un ensemble , l'affectation étant interdite , utiliser sub s ou subsop :

 

> e:=subs(b=b1,e);

e := {a, alpha, beta, b1}

> e:=subsop(3=delta,e);

e := {a, alpha, delta, b1}

 

La fonction booléenne member permet de savoir si une expression est membre d'un ensemble:

> member(delta,e), member(epsilon,e);

true, false

 

Convertir un ensemble en somme, en produit, en liste, ou convertir une liste en

ensemble avec convert :

> convert(e,`+`);convert(e,`*`);
    e:=convert(e,list);e:=convert(e,set);

a+alpha+delta+b1

a*alpha*delta*b1

e := [a, alpha, delta, b1]

e := {a, alpha, delta, b1}

Opérations sur les ensembles:

union (union) , intersect (intersection) , minus (différence) .
la fonction booléenne
a indique si a est un sous-ensemble de b .

 

> e:={alpha,beta,gamma,delta}:f:={beta,delta,epsilon,phi,lambda}:
    u:=e union f;i:=e intersect f;m:=f minus e;

u := {alpha, beta, delta, epsilon, lambda, gamma, p...

i := {beta, delta}

m := {epsilon, lambda, phi}

> i subset e, i subset m;

true, false

 

QUELQUES OUTILS DU PACKAGE COMBINAT:

 

> with(combinat,choose):

(appel de l'outil choose , qui génère les sous-listes ordonnées d'une liste donnée)

> choose([a,b,c]);

[[], [a], [b], [a, b], [c], [a, c], [b, c], [a, b, ...

Génération de toutes les sous-listes de longueur 2 ordonnées d'une liste de longueur 3:

> choose([a,b,c],2);

[[a, b], [a, c], [b, c]]

choose ( n , p ) avec n , p entiers , génère toutes les sous-listes de longueur p ordonnées de [1,2,.., n ]

> choose(4,3);

[[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]

 

> with(combinat,permute):

(appel de l'outil permute , qui génère les listes de permutation d'une liste donnée)

> permute([a,b,c]);

[[a, b, c], [a, c, b], [b, a, c], [b, c, a], [c, a,...

Génération de toutes les sous-listes de permutation de longueur 2 de [a,b,c] :

> permute([a,b,c],2);

[[a, b], [a, c], [b, a], [b, c], [c, a], [c, b]]

permute ( n ) , avec n entier , donne les listes de permutation de [1,2,..., n ]

> permute(3);

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1,...

permute ( n , p ) , avec n , p entiers , donne les sous-listes de permutation de de longueur p de [1,2,..., n ]

> permute(3,2);

[[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]

> restart;

 

LES TABLES:

 

Une table est une structure indexée dont les indices (ou index ) peuvent être de n'importe quel type.

La fonction table permet de créer une table :

 

Création d'une table vide:

> v:=table();

v := TABLE([])

Création d'une table T avec une liste de valeurs:

> T:=table([valeur1,valeur2]);

T := TABLE([1 = valeur1, 2 = valeur2])

Création d'une table U avec liste d'index (ici ° . *) et de valeurs:

> U:=table([`°`=valeur1,`.`=valeur2,`*`=valeur3]);

U := TABLE([`.` = valeur2, `°` = valeur1, `*` = val...

Pour afficher le contenu d'une table , utiliser print ou eval

> print(T),eval(U);

TABLE([1 = valeur1, 2 = valeur2])

TABLE([`.` = valeur2, `°` = valeur1, `*` = valeur3]...

On peut modifier , créer un nouvel élément , ou supprimer un élément par affectation :

> T[a]:=valeur3:U[~]:=valeur4:print(T),eval(U);

TABLE([1 = valeur1, 2 = valeur2, a = valeur3])

TABLE([`.` = valeur2, `°` = valeur1, ~ = valeur4, `...

Une table peut être directement créée par assignation :

> V[a]:=1:V[b]:=2:V[c]:=3:eval(V);

TABLE([c = 3, b = 2, a = 1])

Fonctions agissant sur des tables:

> op(op(V));

[c = 3, b = 2, a = 1]

> indices(V);

[c], [b], [a]

> entries(V);

[3], [2], [1]

La fonction map permet d'appliquer une fonction sur les valeurs d'une table:

> V:=map(sqrt,V);

V := TABLE([c = sqrt(3), b = sqrt(2), a = 1])

La fonction copy permet d'effectuer une copie d'une table:

> W:=copy(V);

W := TABLE([c = sqrt(3), b = sqrt(2), a = 1])

 

LES TABLEAUX:

Un tableau est une structure indexée, de type array , de plusieurs dimensions, dont les indices

sont des entiers appartenant à un intervalle a..b (de type range ) .

 

La fonction array permet de créer un tableau :

Des fonctions analogues à celles utilisées pour les tables existent :

 

Création d'un tableau à une dimension:

> T:=array(1..3);

T := array(1 .. 3,[])

Création d'un tableau à une dimension avec initialisation partielle:

> U:=array(1..5,[a,b,c]);

U := vector([a, b, c, U[4], U[5]])

Création d'un tableau à 2 dimensions avec initialisation complète:

> V:=array([[a,b,c],[d,e,f]]);

V := matrix([[a, b, c], [d, e, f]])

 

 

Création d'un tableau rectangulaire d'entiers par affectation à l'aide de boucles imbriquées:

> T:=array(1..2,1..3):
    for i to 2 do
        for j to 3 do
            T[i,j]:=(i-1)*3+j;
        end do;
    end do:
    print(T);

matrix([[1, 2, 3], [4, 5, 6]])

> op(op(T));

1 .. 2, 1 .. 3, [(2, 2) = 5, (1, 2) = 2, (1, 1) = 1...

> indices(T);

[2, 2], [1, 2], [1, 1], [2, 1], [1, 3], [2, 3]

> entries(T);

[5], [2], [1], [4], [3], [6]

> map(x->x^2,T);

matrix([[1, 4, 9], [16, 25, 36]])

Conversion d'un tableau en liste (si la dimension est 1) ou en liste de listes (si la dimension est >1):

> convert(U,list);convert(T,listlist);

[a, b, c, U[4], U[5]]

[[1, 2, 3], [4, 5, 6]]

Conversion d'un tableau de dimension quelconque en ensemble:

> convert(T,set);

{1, 2, 3, 4, 5, 6}

> T:=convert([a,b,c,d],array);

T := vector([a, b, c, d])

> U:=copy(T);

U := vector([a, b, c, d])

 


 

Exercice corrigé 4:

 

Ex 4.1: Ecrire une procédure qui inverse les éléments d'une liste .

 

> restart;
    listeinverse:= proc(L::list)
        local i;
            [seq(op(nops(L)-i,L),i=0..nops(L)-1)];
   
end proc:

> listeinverse([a,b,c,d,e,f]);

[f, e, d, c, b, a]

 

Ex 4.2: Créer une matrice de Vandermonde d'ordre n . Exemple , pour n = 4 :

> VDM:=proc(n::posint)
        local i,j,a,V;
            a:=array(1..n):V:=array(1..n,1..n):
            for i to n do for j to n do V[i,j]:=a[i]^(j-1) end do end do;
            print(V);
    end proc:

 

> VDM(4);

matrix([[1, a[1], a[1]^2, a[1]^3], [1, a[2], a[2]^2...

 


 

Travail dirigé 4:

 

TD 4.1:

1° Un tableau
T à n lignes et p colonnes étant donné , écrire une procédure

ligne( T , p , i ) qui calcule la somme des éléments de T situés en ligne i .

 

2° Un tableau T à n lignes et p colonnes étant donné , écrire une procédure

colonne( T , n , j ) qui calcule la somme des éléments de T situés en colonne j .

 

3° Un tableau carré T à n lignes et n colonnes étant donné , écrire une procédure

diagonale1( T , n ) qui calcule la somme des éléments de T situés sur la première diagonale.

 

4° Un tableau carré T à n lignes et n colonnes étant donné , écrire une procédure

diagonale2( T , n ) qui calcule la somme des éléments de T situés sur la seconde diagonale.

 

5° Un tableau T carré à n lignes et n colonnes est dit magique si la somme des éléments de

n'importe quelle ligne , de n'importe quelle colonne , et de n'importe quelle diagonale est

la même .

Utiliser les procédures précédentes pour écrire une fonction booléenne magique( T , n )

rendant la valeur true si T est magique, et false sinon .

 

Exemples:

T := MATRIX([[8, 1, 6], [3, 5, 7], [4, 9, 2]])

 

 

> magique(T,3);

true

 

U := matrix([[5, 6, 3], [0, 8, 1], [4, 7, 2]])

> magique(U,3);

false

 

 

TD 4.2:

Ecrire la procédure intitulée
coder(st::string) qui convertit la chaîne de caractères st

(écrite en lettres minuscules) en un nombre.

 

On code : proc (a) options operator, arrow; 1 end proc , proc (b) options operator, arrow; 2 end proc , etc ... , proc (z) options operator, arrow; 26 end proc .

 

Exemple: si st = maple alors proc (m) options operator, arrow; 13 end proc , proc (a) options operator, arrow; 1 end proc , proc (p) options operator, arrow; 1 end proc 6 , proc (l) options operator, arrow; 12 end proc , proc (e) options operator, arrow; 5 end proc .

 

> coder("maple");

1301161205

 

Aide: pour écrire cette procédure , on construira un alphabet puis une table T de conversion

proc (lettres) options operator, arrow; nombres end... et on utilisera au besoin les fonctions de Maple suivantes:

 

length(st) qui donne la longueur de la chaîne de caractères st .

substring(st,m..n) qui extrait de st la sous-chaîne des caractères situés entre les positions m et n .

 

 

 

haut de cette page


©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.