Découvrir Scilab/Structures de données avancées

9. Structures de données avancées
Listes.
Une liste est un ensemble ordonné d'objets Scilab (nombre, chaîne de caractère, vecteur, matrice, liste, …). Les opérations standard sur les listes sont :
On peut décrire un arbre par des listes imbriquées. La commande codice_9 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);
Structures.
Les structures sont des objets similaires aux vecteurs, mais dont les champs ont un nom de type codice_10. Elles sont créées par la commande codice_11 :
-->aujourdhui = struct("jour", 23, "mois", "octobre", "annee", 2012)
 aujourdhui =
 jour: [1x1 constant]
 mois: [1x1 string]
 annee: [1x1 constant]
-->disp(aujourdhui.mois)
 octobre 
-->aujourdhui("jour")
 ans =
 23. 
-->aujourdhui.mois = "novembre"
 aujourdhui =
 jour: [1x1 constant]
 mois: [1x1 string]
 annee: [1x1 constant]
On peut ajouter un champ à la volée :
-->aujourdhui.semaine = 47
 aujourdhui =
 jour: [1x1 constant]
 mois: [1x1 string]
 annee: [1x1 constant]
 semaine: [1x1 constant]
de fait, on peut créer une structure directement en assignant la valeur d'un champ :
-->demain.jour = 24
 demain =
 jour: [1x1 constant]
-->type(demain)
 ans =
 17. 
-->typeof(demain)
 ans =
 st 
--> today("day") = 23
today = 
 day: [1x1 constant]
--> today("month") = "october"
today = 
 day: [1x1 constant]
 month: [1x1 string]
--> today("year") = 2012
today = 
 day: [1x1 constant]
 month: [1x1 string]
 year: [1x1 constant]
Notons que selon son contenu, la commande codice_12 sur une structure retourne 16 (tlist) ou 17 (mlist).
La commande codice_13 permet d'extraire le nom des champs :
--> fieldnames(aujourdhui)
 ans =
!jour !
!mois !
!annee !
!semaine !
On peut aussi créer une structure avec une liste typée :
hier = tlist(["nom", "jour", "mois", "annee"], 22, "octobre", 2012)
Dans le cas d'une liste typée, les appels suivants sont équivalents : codice_14, codice_15,codice_16. La syntaxe générale de codice_17 est :
tlist(type, a1, a2, …)
où
Si l'objet se comporte de la même manière qu'une structure, en revanche, la commande codice_19 ne retourne donc pas codice_20.
Enfin, on peut créer une matrice de structures :
-->foo(1, 1).nombre = %e
 foo =
 nombre: list
-->foo(2, 2).texte = "e"
 foo =
2x2 struct array with fields:
 nombre
 texte
-->foo(1, 1).nombre
 ans =
 2.7182818 
-->foo(1, 1).texte
 ans =
 []
-->type(foo)
 ans =
 17. 
-->typeof(foo)
 ans =
 st 
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 codice_21. Par exemple
-->cell(4,3)
 ans =

! !
! !
! !
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 codice_22.
Notons que codice_23 crée un matrice 4×4 ; pour créer une liste (tenseur à un indice, vecteur ligne ou colonne), il faut utiliser codice_24 ou codice_25. La commande
cell(4, 3, 2)
crée un tenseur à trois indices 4×3×2, représenté comme deux couches de matrices 4×3 :
-->cell(4,3,2)
 ans =
! !
! !
! !
!{} {} {} !
!{} {} {} !
!{} {} {} !
!{} {} {} !
Les dimensions peuvent être indiquées par un vecteur de nombre. Par exemple
V = [4, 3, 2];
A = cell(V);
Pour accéder à un terme, c'est-à-dire lui assigner une valeur ou bien afficher cette valeur, il faut utiliser le pointeur codice_26. Par exemple,
A(1, 1, 1).entries = 'vecteur';
A(1, 1, 2).entries = 1:5;
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 =
!"vecteur" {} {} !
!{} {} {} !
!{} {} {} !
!{} {} {} !
![1,2,3,4,5] {} {} !
!{} {} {} !
!{} {} {} !
!{} {} {} !
Le pointeur codice_27 donne les dimensions du tableau de cellules.
-->A.dims
 ans =
 4 3 2
"Environnement" < ↑ > "Gestion des fichiers"

Photographie/Fabricants/Lisco
Entreprise états-unienne, a fabriqué des chambres photographiques et des chassis-porte-film. A fusionné avec d'autres sociétés (Fidelity, Riteway).

Photographie/Fabricants/Acmel
Société de conception et de fabrication de matériel de laboratoire.

Photographie/Fabricants/Y.K. Optical
Société japonaise installée à Yokohama (Japon).

Photographie/Fabricants/Fujifilm/Fujifilm Fujipet Thunderbird

Photographie/Fabricants/Fujifilm/Fujifilm Fujipet EE

Photographie/Fabricants/Fujifilm/Fujifilm Fujipet Pet35

Photographie/Fabricants/Fujifilm/Fujifilm GX680III

Photographie/Fabricants/Fujifilm/Fujifilm Fotorama FP-1

Photographie/Fabricants/Eikow
Climat et écocitoyens/Association pour la forêt en Flandre