« 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> :
DannyS712 (discussion | contributions)
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 :
<sourcesyntaxhighlight lang="scilab">
a = list(list(1, 2, 3), list(4,5,6),list(7,8,9));
tree_show(a);
</syntaxhighlight>
</source>
 
== 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> :
<sourcesyntaxhighlight lang="scilab">
-->aujourdhui = struct("jour", 23, "mois", "octobre", "annee", 2012)
aujourdhui =
Ligne 50 :
mois: [1x1 string]
annee: [1x1 constant]
</syntaxhighlight>
</source>
On peut ajouter un champ à la volée :
<sourcesyntaxhighlight lang="scilab">
-->aujourdhui.semaine = 47
aujourdhui =
Ligne 60 :
annee: [1x1 constant]
semaine: [1x1 constant]
</syntaxhighlight>
</source>
de fait, on peut créer une structure directement en assignant la valeur d'un champ :
<sourcesyntaxhighlight lang="scilab">
-->demain.jour = 24
demain =
Ligne 95 :
month: [1x1 string]
year: [1x1 constant]
</syntaxhighlight>
</source>
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 :
<sourcesyntaxhighlight lang="scilab">
--> fieldnames(aujourdhui)
ans =
Ligne 110 :
! !
!semaine !
</syntaxhighlight>
</source>
 
On peut aussi créer une structure avec une liste typée :
<sourcesyntaxhighlight lang="scilab">
hier = tlist(["nom", "jour", "mois", "annee"], 22, "octobre", 2012)
</syntaxhighlight>
</source>
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 :
<sourcesyntaxhighlight lang="scilab">
tlist(type, a1, a2, …)
</syntaxhighlight>
</source>
* ''type'' est un vecteur de chaînes de caractères dont
Ligne 128 :
 
Enfin, on peut créer une matrice de structures :
<sourcesyntaxhighlight lang="scilab">
-->foo(1, 1).nombre = %e
foo =
Ligne 160 :
st
</syntaxhighlight>
</source>
 
== 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
<sourcesyntaxhighlight lang="scilab">
-->cell(4,3)
ans =
Ligne 177 :
! !
!{} {} {} !
</syntaxhighlight>
</source>
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
<sourcesyntaxhighlight lang="scilab">
cell(4, 3, 2)
</syntaxhighlight>
</source>
crée un tenseur à trois indices 4×3×2, représenté comme deux couches de matrices 4×3 :
<sourcesyntaxhighlight lang="scilab">
-->cell(4,3,2)
ans =
Ligne 208 :
! !
!{} {} {} !
</syntaxhighlight>
</source>
Les dimensions peuvent être indiquées par un vecteur de nombre. Par exemple
<sourcesyntaxhighlight lang="scilab">
V = [4, 3, 2];
A = cell(V);
</syntaxhighlight>
</source>
 
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,
<sourcesyntaxhighlight lang="scilab">
A(1, 1, 1).entries = 'vecteur';
A(1, 1, 2).entries = 1:5;
</syntaxhighlight>
</source>
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
<sourcesyntaxhighlight lang="scilab">
A =
 
Ligne 243 :
! !
!{} {} {} !
</syntaxhighlight>
</source>
Le pointeur <code>.dims</code> donne les dimensions du tableau de cellules.
<sourcesyntaxhighlight lang="scilab">
-->A.dims
ans =
 
4 3 2
</syntaxhighlight>
</source>
 
<!--