Structures simples et tableaux Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)

Slides:



Advertisements
Présentations similaires
Structures de données avancées : MLH (Multidimensional linear hashing)
Advertisements

Module Systèmes d’exploitation
Structures de données avancées : Principales structures de fichiers
Structures de données avancées : B arbres
Structures de données avancées : Principales structures de données
Structures de données avancées : MBT ( Multidimensional B-trees )
Structures de données avancées : MTH ( Multidimensional trie hashing )
Introduction a L’algorithme
Tris.
Traitement sémantique et grammaire dattributs Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI)
Le langage Z Pr ZEGOUR DJAMEL EDDINE
Machines de Turing Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI)
Sémantique des déclarations pour le langage Z minimal
Algorithmique (suite)
C.
1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.
Structures et unions types énumérés Qu'est-ce qu'une structure
8. Les tableaux P. Costamagna – ISEN N1.
Initiation à la programmation et algorithmique cours 3
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Les bases de l’Algorithmique
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Programmation fonctionnelle Le langage LISP
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Semaine #1 INF135 par Frédérick Henri.
Séance d’introduction
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Stocker plusieurs valeurs de même type dans une variable
Le langage C Structures de données
Structures de données avancées : Arbres AVL & Arbres Rouge et Noir
Structures complexes Pr ZEGOUR DJAMEL EDDINE
Expressions logiques Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Programmation en Java Tableaux NGUYEN Thi Minh Tuyen
Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Listes linéaires chaînées Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Les variables et les types standard des données
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Sémantique des expressions arithmétiques pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Tables de compilation pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Le langage Z minimal Pr ZEGOUR DJAMEL EDDINE
Structures de données avancées : Fichiers uni-dimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
L’analyse lexicale Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Structures de données avancées : Concepts du Multidimensionnel D. E ZEGOUR Institut National d ’Informatique.
Structures de contrôle Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz
Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Expressions sur les chaînes de caractères Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Cours LCS N°4 Présenté par Mr: LALLALI
Une brève présentation de C# Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Fonctions standards Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Module algorithmique et programmation
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) C O M P I L Z.
COMPIL - Z Compilateur visible
Fichiers Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Introduction à l’utilitaire
Objets et Actions Élémentaires.
Organisation de la mémoire pour le langage minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
PhP 2. Tableaux et structures de contrôle. Les tableaux Définition –Rassemblement d’un ensemble de valeurs portant le même nom de variable –Types de tableaux.
Transcription de la présentation:

Structures simples et tableaux Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)

Structures simples et tableaux : Définitions Structure = Enregistrement Une structure simple est un ensemble d’éléments de types différents. Chaque type est simple (Entier, Booleen, Car, Chaine) Un tableau est un ensemble d’éléments de même type. Chaque élément peut être de type simple ou du type structure simple. Exemples Soit s1 une structure (entier, boolean, car); Soit s2 : (chaine, entier); Soit v1 un vecteur(5,6) de entiers; Soit v2 un vecteur de (chaine, booleen);

Structures simples et tableaux : Représentation d’un tableau en mémoire (à l’exécution) Zone de données Tableau Descriptif Dimension Bornes

Structures simples et tableaux Représentation d’une structure simple en mémoire (à l’exécution) Zone de données Les différents champsStructure( adresse vers les valeurs des champs)

Représentation d'un tableau en mémoire Déclaration : A(a 1 :b 1 ; a 2 :b 2 ;......a n :b n ) Ordre de rangement des sous tableaux A(i, *, *,..., *) : A(a 1, *, *,..., *), A(a 1 +1, *, *,..., *), A(a 1 +2, *, *,..., *), , A(b 1, *, *,..., *)

Représentation d'un tableau en mémoire A l'intérieur de chaque sous tableau A(i, *, *,...., *), l'ordre suivant des sous sous-tableaux est considéré : A(i, a 2, *, *,..., *), A(i, a 2 +1, *, *,..., *), A(i, a 2 +2, *, *,..., *),......, A(i, b 2, *, *,..., *) Et ainsi de suite...  Donc rangement de la matrice ligne par ligne. Ce sont les derniers indices qui varient le plus rapidement.

Représentation d'un tableau en mémoire Exemple pour un tableau A(3, 2, 3)

Représentation d'un tableau en mémoire Adresse d'un élément A(i 1, i 2.., i n ) ? Posons d i = b i - a i + 1 Adr de A(i 1, *, *,....) : AD 1 = Base + (i 1 -a 1 ) d 2 d 3...d n Adr de A(i 1, i 2, *,...., *) : AD 2 = AD 1 + (i 2 -a 2 )d 3 d 4...d n Adr de A(i 1, i 2,...i n ) : AD n = Base + (i 1 -a 1 )d 2 d 3..d n + (i 2 -a 2 )d 3 d 4...d n (i n-1 -a n-1 )d n + (i n -a n ) Partie constante : Base -(a 1  i=2,n d i + a 2  i=3,n d i +...+a n-1 d n + a n ) Partie variable : i 1  i=2,n d i + i 2  i=3,n d i i n-1 d n + i n

Représentation d'un tableau en mémoire Si a 1 = a 2 = = a n = 0, l‘adresse de A(i 1, i 2,...i n ) est i 1 d 2 d 3..d n + i 2 d 3 d 4...d n i n-1 d n + i n Ou bien :  j=1,n ( i j.  i=j+1,n d i ) d i d i+1...d n : facteur multiplicatif

Structure de TABOB (Statut, Type, Nombre, Adresse) avec Statut qui peut être : 'L' : Variables locales 'X' : Variable auxiliaire de valeur créée par le compilateur 'Y' : Variable auxiliaire d'adresse créée par le compilateur 'C' : Constante entière, logique, pointeur, chaîne de caractères Type : Indice vers la tables des types.( 'W' pour NIL ) TABTYP : chaîne de caractères contenant tous les types Nombre : Longueur du type (nombre de caractères formant le type) Adresse : Adresse relative de l'objet dans la zone de données si le statut est 'L', 'X' ou 'Y' Rang dans la liste des constantes si le statut est 'C'

Sémantique des structures simples : Quadruplés Au niveau des déclarations (Voir grammaire) A : pointeur TABOB vers l’objet composé B, et C non utilisés Pour un objet composé, Statut=‘L’, Type= indice dans la table des types (TABTYP), Nombre=nombre de caractères formant le type, Adresse=adresse relative de l’objet dans la zone de données (‘Ds’, A, B, C )

Sémantique des structures simples : Quadruplés Manipulation:STRUCT(S,Rang),AFF_STRUCT(S,Rang,Exp),INIT_STRU CT(S,[Exp1, Exp2, …]) A : pointeur dans TABOB vers l’objet composé B : numéro du champ C : pointeur dans TABOB vers le résultat de Struct B : numéro du champ C : pointeur dans TABOB vers la valeur à affecter A : pointeur dans TABOB vers l’objet composé B : pointeur dans TABCOMP vers la liste des expressions scalaires C : nombre d’expressions (‘Struct’, A, B, C ) (‘Aff_struct’, A, B, C ) (‘Init_struct’, A, B, C )

Sémantique des tableaux : Quadruplés Au niveau des déclarations (Voir grammaire) A : pointeur dans TABOB vers l’identificateur de tableau B : indice dans TABCOMP vers la liste des bornes D : dimension Pour un objet tableau, Statut=‘L’, Type= indice dans la table des types ( TABTYP ), Nombre=nombre de caractères formant le type, Adresse=adresse relative de l’objet dans la zone de données (‘Dt’, A, B, C )

Sémantique des tableaux : Quadruplés Au niveau des instructions : ELEMENT(T[Exp1,Exp2,..]), AFF_ELEMENT(T[Exp1,Exp2,..], Exp), INIT_TABLEAU(T, [[Exp1,Exp2,..]) A : pointeur TABOB vers l’identificateur de tableau B : pointeur dans TABCOMP vers la liste des expressions C : pointeur dans TABOB vers le résultat de Element A : pointeur TABOB vers l’identificateur de tableau B : pointeur dans TABCOMP vers la liste des expressions D : pointeur dans TABOB vers la valeur à affecter A : pointeur TABOB vers l’identificateur de tableau B : pointeur dans TABCOMP vers la listes des expressions C : non utilisé (‘Element’, A, B, C ) (‘Init_vect’, A, B, C ) (Aff_Element’, A, B, C )

Structures simples et tableaux : Déclarations Types dans {Entier, Booleen, Car, Chaine} Sep dans { :, Un, Une, Des} Cste désigne une constante numérique entière Chaîne : chaîne de caractères Idf désigne un identificateur Opr dans {, >=, =, <> } Opa dans { +, -, Ou } Opm dans { *, /, Et } Sign dans {+, -} Tableau est synonyme de Vecteur Init_tableau est synonyme de Init_vecteur

Structures simples et tableaux : Déclarations  [ ~Soit|Soient~ ] Debut Fin [;]  ;{ [~Soit|Soient~] ;}*  [Sep ]  Idf {, Idf}*

Structures simples et tableaux : Déclarations  Types | Tableau ( ) [De~ | Types~ ] | |  [Structure ](Types {, Types }*)  Cste {, Cste}*

Structures simples et tableaux : Instructions  { ; }*  Idf := | Lire ( Idf {, Idf }* ) | Ecrire ( {, }* ) | Tantque [ : ] Fintantque | Si [:] [Sinon ] Fsi | Pour Idf:=, [, ][:] Finpour

Structures simples et tableaux : Instructions  Aff_element ( [[ {, }* ]], ) | Aff_struct(Idf, Cste, ) ~ Init_vecteur | Init_struct ~ ( Idf, [[ ~ |[[ {, }*]] ~ {, ~ |[[ {, }*]]~}* ]] ) |

Structures simples et tableaux : Expressions  [ Opr ]  [Sign] { Opa }*  {Opm }*  Idf | Cste | ( ) | Non | Vrai | Faux | Chaine  Struct ( Idf, Cste) Element ( [[ {, }* ]] ) | |

Sémantique d’une déclaration de structure: Fonctions sémantiques  [Structure ] (Types {, Types }*) F1F2 Faire Type=‘(‘+Types F1 Faire Type= Type + Types F2 F3 Faire Type= Type + ‘)’ F3

Sémantique d’une déclaration de tableau: Fonctions sémantiques  Tableau ( ) [De~ | Types~ ] F1  Cste {, Cste }* Faire Type=‘V‘; Type_element=‘E’ (par défaut’) F1 Faire Type= Type +Cste; Ranger Cste dans TABCOMP(soit PtComp l’emplacement); Compte:=1 F2 Faire Type= Type + ‘,’+Cste; Ranger Cste dans TABCOMP; Compte= Compte +1; F3 F2F3 F4 Soit T est le type produit par ou Types. Type_element = T; Faire Type= Type + Type_element F4

Sémantique d’une déclaration : Fonctions sémantiques  [ Sep ] F1 Soit L la liste produite par et soit Type le type produit par. Ranger Type dans TABTYP si Type n’existe pas. Soit I son indice dans cette table.Pour chaque Idf dans L :-- Le mettre dans la table des symboles; -- Lui attribuer une adresse relative A et le mettre dans la table des objets (soit Pt son emplacement). L’objet créé aura comme Statut=‘L’;Type=I; Nombre=Longueur(Type) et Adresse=A; Si type simple :Générer le quadruplé (‘D’+types, Pt,, ) Si structure simple : Générer le quadruplé (‘DS’, Pt,, ) Si tableau : Générer le quadruplé (‘DT’, Pt, Ptcomp, Compte, ) F1 Déjà traité en CS7. C’est plus général

Sémantique de Aff_struct : Fonctions sémantiques Aff_struct (Idf, Cste, ) F1 Vérifier que idf est déclarée comme une structure (S). Sinon Erreur.Soit Pt son emplacement dans TABOB F1 F2F3 Récupérer le nombre (N)de champ de S. Si cste N :Erreur. Récupérer le type (T) du champ de S de rang cste. F2 Soit Temp le résultat de. Vérifier si le type de Temp est égal à T. Si non égal : erreur. Générer le quadruplet ( ‘Aff_struct’, Pt, cste, Temp) F3

Sémantique de Aff_element : Fonctions sémantiques Aff_element ( [[ {, }* ]], ) F1 Soit Temp1 (emplacement dans TABOB)le résultat de et soit Type son type. Si Type n’est pas un tableau : Erreur. Récupérer dans Typtab son type et dans Dim sa dimension F1 F2F3 Soit Temp le résultat de. Si son type n’est pas un entier: Erreur. Intialiser Compte à 0.Mettre Temp dans la table Tabcomp.Soit Ptabcomp son emplacement. F2 Soit Temp le résultat de. Si son type n’est pas un entier: Erreur. Incrémenter Compte d’une unité.Mettre Temp dans la table Tabcomp. F3 F4

Sémantique de Aff_element : Fonctions sémantiques Aff_element ( [[ {, }* ]], ) F1 Soit Temp2 (emplacement dans TABOB)le résultat de et soit Type2 son type. Si Type2 # Typtab : Erreur. Si Compte # Dim : Erreur Générer le quadruplé (‘Aff_element’, Temp1,Ptabcomp, Temp2) F4 F2F3 F4

Sémantique de Struct : Fonctions sémantiques Struct (, Cste ) F1 Soit Temp1 (emplacement dans TABOB)le résultat de et soit Type2 son type. Si Type2 n’est pas une structure : Erreur. Récupérer le nombre de champ de la structure dans N et le type du champ n° cste (Typechamp) F1 F2 Vérifier que Cste est entière et comprise entre 1 et N. Sinon Erreur. Générer un temporaire d’adresse avec le ‘Satut=‘Y’et avec Type= Typechamp. Soit Temp2 son emplacement dans TABOB). Générer le quadruplé (‘Struct’, Temp1,Cste, Temp2) F2

Sémantique de Element : Fonctions sémantiques Element ( [[ {, }* ]] ) F1 Soit Temp1 (emplacement dans TABOB)le résultat de et soit Type2 son type. Si Type2 n’est pas une tableau : Erreur. Récupérer la dimension du tableau dans Dim et le type des éléments dans Typtab F1 F2 Soit Temp1 le résultat de. Vérifier que Temp est du type entier. Sinon Erreur. Intialiser Compte à 0.Mettre Temp1 dans la table Tabcomp.Soit Ptabcomp son emplacement F2 F3 Soit Temp le résultat de. Si son type n’est pas un entier: Erreur. Incrémenter Compte d’une unité.Mettre Temp dans la table Tabcomp. F3 F4

Sémantique de Element : Fonctions sémantiques Element ( [[ {, }* ]] ) F1F2 Si Dim # Compte : Erreur Générer un temporaire d’adresse avec le ‘Satut=‘Y’et avec Type= Typtab. Soit Temp2 son emplacement dans TABOB). Générer le quadruplé (‘Element’, Temp1, Ptabcomp, Temp2) F4 F3F4

Sémantique de Init_Struct et Init_vecteur : Fonctions sémantiques Retrouver la sémantique pour Init_struct et Init_vecteur

Sémantique des structures : Exemple soit s une structure(entier, chaine, booleen); debut aff_struct(s, 1, 5); aff_struct(s, 2, 'abc'); aff_struct(s, 3, Vrai); ecrire (Struct(s,2)); fin TABCONS En fin de compilation, programme source = table des quadruplés + TABOB + TABCONS + LONGZDD ‘L’150 ‘C’ ‘Y’ TABOB 2 LONGZDD 3 4 Quadruplés générés ‘Ds’1 ‘Aff_st’ ‘Struct’137 ‘Ecr’ TABCOMP 7 ‘1’, ‘5’,’2’,’abc’,’3’,’vrai’ TABTYP (ESB)

Sémantique des vecteurs : Exemple soit T un vecteur(3) de entier; debut Aff_element(T[1], 13); Aff_element(T[2], 18); Aff_element(T[3], 35); ecrire( Element(T[2]) ); fin TABCONS En fin de compilation, programme source = table des quadruplés + TABOB + TABCONS + LONGZDD ‘C’110 ‘L’230 ‘C’ ‘Y’ TABOB 8 LONGZDD 3 4 Quadruplés générés ‘Dt’2 ‘Aff_el’ ‘Elem’247 ‘Ecr’ TABCOMP 7 ‘3’, ‘1’,’13’,’2’,’18’,’35’ TABTYP EV3E

Structures simples et tableaux : interprétation À la rencontre du quadruplé Pt : Pointeur dans TABOB vers l’objet tableau Liste : Pointeur dans TABCOMP vers la liste des bornes Dim : Dimension (nombre de bornes) Il y a : Allocation d’une zone pour le descriptif et son remplissage Allocation d’un espace pour le tableau et initialisation à Nil (‘Dt’, Pt, Liste, Dim )

Structures simples et tableaux : interprétation À la rencontre du quadruplé Pt : pointeur dans TABOB vers la structure Il y a Allocation d’un espace pour la structure dont la taille est égal au nombre de champ Allocation pour les différents champs en fonction des types (‘Ds’, Pt,, )

Structures simples et tableaux : interprétation À la rencontre du quadruplé Ptobj: pointeur dans TABOB vers le tableau Ptcom : pointeur dans TABCOMP Ptres : pointeur vers l’objet où sera rangé le résultat Les opérations suivantes sont entreprises : - Accès au descriptif via le champ adresse de Ptobj. On y trouvera l’adresse du premier élément du tableau. - Utiliser le module de calcul d’adresse pour calculer l’emplacement de l ’élément d’indice i1, i2, i3,.. - Vérifier que c’est dans l’intervalle. Sinon Erreur. (Ces indices sont récupérés via TABCOMP  TABOB  adresses) - Récupérer le résultat dans Ptres (‘Element’, Ptobj, Ptcomp, Ptres )

Structures simples et tableaux : interprétation Retrouver l’interprétation des quadruplés pour Struct, Aff_struct, Aff_element, Init_struct et Init_vecteur