« Découvrir Scilab/Structures de données avancées » : différence entre les versions
Contenu supprimé Contenu ajouté
m →Structures : Elles sont créées par la commande <code>struct("''champ1''", ''valeur1'', "''champ2''", ''valeur2'', …)</code> : |
m <source> -> <syntaxhighlight> (phab:T237267) |
||
Ligne 19 :
* <code>L3 = lstcat(L1, L2)</code> : concaténation des listes.
On peut décrire un [[w:fr:Arborescence|arbre]] par des listes imbriquées. La commande <code>tree_show</code> permet d'afficher la liste sous forme arborescente, par exemple :
<
a = list(list(1, 2, 3), list(4,5,6),list(7,8,9));
tree_show(a);
</syntaxhighlight>
== Structures ==
Les structures sont des objets similaires aux vecteurs, mais dont les champs ont un nom de type <code>structure.champ</code>. Elles sont créées par la commande <code>struct("''champ1''", ''valeur1'', "''champ2''", ''valeur2'', …)</code> :
<
-->aujourdhui = struct("jour", 23, "mois", "octobre", "annee", 2012)
aujourdhui =
Ligne 50 :
mois: [1x1 string]
annee: [1x1 constant]
</syntaxhighlight>
On peut ajouter un champ à la volée :
<
-->aujourdhui.semaine = 47
aujourdhui =
Ligne 60 :
annee: [1x1 constant]
semaine: [1x1 constant]
</syntaxhighlight>
de fait, on peut créer une structure directement en assignant la valeur d'un champ :
<
-->demain.jour = 24
demain =
Ligne 95 :
month: [1x1 string]
year: [1x1 constant]
</syntaxhighlight>
Notons que selon son contenu, la commande <code>type()</code> sur une structure retourne 16 (tlist) ou 17 (mlist).
La commande <code>fieldnames()</code> permet d'extraire le nom des champs :
<
--> fieldnames(aujourdhui)
ans =
Ligne 110 :
! !
!semaine !
</syntaxhighlight>
On peut aussi créer une structure avec une liste typée :
<
hier = tlist(["nom", "jour", "mois", "annee"], 22, "octobre", 2012)
</syntaxhighlight>
Dans le cas d'une liste typée, les appels suivants sont équivalents : <code>hier(2)</code>, <code>aujourdhui("jour")</code>,<code>hier.jour</code>. La syntaxe générale de <code>tlist</code> est :
<
tlist(type, a1, a2, …)
</syntaxhighlight>
où
* ''type'' est un vecteur de chaînes de caractères dont
Ligne 128 :
Enfin, on peut créer une matrice de structures :
<
-->foo(1, 1).nombre = %e
foo =
Ligne 160 :
st
</syntaxhighlight>
== Tableaux de cellules ==
On peut voir un tableau de cellules ''(cell array)'' comme une « hypermatrice » pouvant contenir des objets hétéroclites ; par hypermatrice, nous entendons un tenseur à ''n'' indices. Un tableau de cellules est créée par la commande <code>cell</code>. Par exemple
<
-->cell(4,3)
ans =
Ligne 177 :
! !
!{} {} {} !
</syntaxhighlight>
crée une matrice (tenseur à deux indices) 4×3. Cette matrice s'affiche encadrée de points d'exclamation. Les éléments vides sont représentés par des paires d'accolades <code>{}</code>.
Notons que <code>cell(4)</code> crée un matrice 4×4 ; pour créer une liste (tenseur à un indice, vecteur ligne ou colonne), il faut utiliser <code>cell(4,1)</code> ou <code>cell(1,4)</code>. La commande
<
cell(4, 3, 2)
</syntaxhighlight>
crée un tenseur à trois indices 4×3×2, représenté comme deux couches de matrices 4×3 :
<
-->cell(4,3,2)
ans =
Ligne 208 :
! !
!{} {} {} !
</syntaxhighlight>
Les dimensions peuvent être indiquées par un vecteur de nombre. Par exemple
<
V = [4, 3, 2];
A = cell(V);
</syntaxhighlight>
Pour accéder à un terme, c'est-à-dire lui assigner une valeur ou bien afficher cette valeur, il faut utiliser le pointeur <code>.entries</code>. Par exemple,
<
A(1, 1, 1).entries = 'vecteur';
A(1, 1, 2).entries = 1:5;
</syntaxhighlight>
met la chaîne de caractères « vecteur » dans le terme A(1, 1, 1), et le vecteur [1, 2, 3, 4, 5] dans le terme terme A(1, 1, 2), ce qui donne
<
A =
Ligne 243 :
! !
!{} {} {} !
</syntaxhighlight>
Le pointeur <code>.dims</code> donne les dimensions du tableau de cellules.
<
-->A.dims
ans =
4 3 2
</syntaxhighlight>
<!--
|