Algorithmes et structures de donnes avances 6me cours - PowerPoint PPT Presentation

1 / 60
About This Presentation
Title:

Algorithmes et structures de donnes avances 6me cours

Description:

1/2 cuill re caf de cannelle - 1 pinc e de poivre noir - 1/2 cuill re soupe de ... Stock dans 4 Octets (32 bit), comme a on peut adresser ... – PowerPoint PPT presentation

Number of Views:101
Avg rating:3.0/5.0
Slides: 61
Provided by: PatrickR158
Category:

less

Transcript and Presenter's Notes

Title: Algorithmes et structures de donnes avances 6me cours


1
Algorithmes et structures de données
avancées6ème cours
  • Patrick Reuter
  • http//www.labri.fr/preuter

2
Ingrédients dalgorithmes
  • Affectation (ex. mois 6, jours1 31)
  • Condition/Comparaison (ex. mois lt 12)
  • Appel de fonction (ex. writeln(mois))
  • Structure de contrôle
  • Branchements conditionnels (multiples) (si ..
    Alors .. Sinon)
  • Boucles (tant que..faire, pour.. faire)
  • Bloc dinstructions (begin .. end)

3
Aujourd'hui
  • TYPES
  • tableau 1D
  • tableau 2D
  • types énumérés
  • enregistrements
  • pointeurs
  • PORTEE
  • variables globales
  • variables locales
  • APPEL DE FONCTIONS
  • appel par valeur
  • appel par référence

4
Déclaration de variables
Préparation La veille, mettez les pois chiches
dans un bol d'eau. Le jour même, roulez le
couscous .Si vous utilisez du couscous roulé et
séché, rincez-le à l'eau froide, égouttez-le et
laissez-le gonfler pendant 30 mn. Coupez la
viande en morceaux.Pelez les oignons et
coupez-en 1 en morceaux. Lavez et passez les
tomates à la moulinette.Mettez la viande dans
une marmite et ajoutez les morceaux d'oignon, les
tomates ou le concentré de tomate dilué dans 1
verre d'eau, l'huile, le poivre, le piment, la
cannelle et du sel. Faites revenir ..
  • Comme dans un livre de recettes
  • Ingrédients(pour 8-10 personnes) - 1 kg de
    couscous roulé - 1 kg de mouton - 1 poignée de
    pois chiches - 2 oignons secs - 3-4 tomates
    fraîches ou 1 cuillère.à soupe de concentré de
    tomate - 3-4 pommes de terre - 3-4 navets -
    3-4 carottes - 3-4 courgettes - 1 tranche de
    courge - 4 cuillères à soupe d'huile - 1/2
    cuillère à café de cannelle - 1 pincée de poivre
    noir - 1/2 cuillère à soupe de piment rouge doux
    ou de paprika - 1/2 cuillère à soupe de
    ras-el-hanout
  • - 1 piment rouge sec - 100 g de beurre ou 3
    cuillères à soupe d'huile - sel

5
Déclaration de variables
  • var compteur integer
  • var diviseur single
  • var c byte
  • var precision double
  • var nom string
  • var masculin boolean
  • var jours array1..12 of byte
  • diviseur 1.1 Affectation
  • compteur 1
  • Nom Gerhard

Nombre entier
Nombre à virgule flottante
Nombre à virgule flottante avec double précision
Chaîne de caractères
Tableau
TYPE
6
Déclaration de variables
  • Types prédéfinis
  • Integer, boolean, single,
  • Types que lon peut définir soi-même
  • type t_tableau array1..12 of byte
  • var jours t_tableau
  • au lieu de
  • var jours array1..12 of byte

7
Organisation de la mémoire
  • type t_tableau array1..12 of byte
  • var jours t_tableau 12
    octets

536.870.911
536.870.910
...
jours12 2011
31
...
Occupe de la place successive dans la mémoire
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
0
? joursindex (2000index-1)
8
  • Tableau 2D

9
Motivation
type t_champ (vide, blanc, noir) type
t_ligne array1..8 of t_champ type t_damier
array1..8 of t_ligne var damier
t_damier var i,j integer Pour initialiser un
damier vide POUR i 1 à 8 faire POUR j 1
à 8 faire damierij vide FIN
POUR FIN POUR
10
Enregistrements
11
Déclaration de variables
  • Type enregistrement (structure hétérogène)
  • type t_enregistrement RECORD
  • nom_de_variable_1 type1
  • nom_de_variable_2 type2
  • ...
  • nom_de_variable_n typen
  • END
  • var dossier t_enregistrement
  • structure hétérogène, les éléments peuvent être
    dun type différent
  • occupe de la place successive dans la mémoire
  • random access l accès aux différents
    éléments se fait à coût égal

12
Type enregistrement (structure hétérogène)
  • Exemple
  • Déclaration du type
  • type t_date RECORD
  • an integer
  • mois byte
  • jour byte
  • END
  • Déclaration dune variable
  • var aujourdhui t_date
  • Affectation
  • aujourdhui.jour 17
  • aujourdhui.mois 10
  • aujourdhui.an 2006

13
Enregistrements
  • Motivation (à ne pas faire !)
  • type t_couleur (rouge, vert, jaune)
  • var joueurnom array1..n of string
  • var joueurscore array1..n of integer
  • var joueurcouleur array1..n of t_couleur
  • joueurnom1 " Martin
  • joueurscore1 0
  • joueurcouleur1 rouge
  • joueurnom2 " Romain
  • joueurscore2 0
  • joueurcouleur2 vert

14
Enregistrements
  • Motivation (à faire !)
  • type t_couleur (rouge, vert, jaune)
  • type t_joueur RECORD
  • nom string
  • score integer
  • couleur t_couleur
  • END
  • var joueur array1..n of t_joueur
  • joueur1.nom " Martin
  • joueur1.score 0
  • joueur1.couleur rouge
  • joueur2.nom " Romain
  • joueur2.score 0

15
  • type t_date RECORD
  • an integer
  • mois byte
  • jour byte
  • END
  • var aujourdhui t_date

536.870.911
...
536.870.910
...
17
aujourdhui.jour 4005
aujourdhui.mois 4004
10
aujourdhui.an 4003
0
aujourdhui.an 4002
0
Occupe de la place successive dans la mémoire
aujourdhui.an 4001
7
aujourdhui.an 4000
214
...
0
16
Type tableaux denregistrements
  • Déclaration du type enregistrement
  • type t_chanson RECORD
  • titre string100
  • artiste string100
  • album string100
  • longueur integer
  • date t_date
  • END
  • Déclaration du type tableau
  • type t_tableau_chansons array1..n of
    t_chanson
  • Déclaration dune variable de ce type
  • var collection t_tableau_chansons
  • Affectation

17
Type tableaux denregistrements
  • Exercice
  • type t_chanson RECORD
  • titre string100
  • artiste string100
  • album string100
  • longueur integer
  • date t_date
  • END
  • type t_tableau_chansons array1..n of
    t_chanson
  • var collection t_tableau_chansons
  • Trouver lartiste dune chanson donnée kaya
  • i 1
  • tant que iltn

18
Type tableaux denregistrements
  • Exercice
  • type t_chanson RECORD
  • titre string100
  • artiste string100
  • album string100
  • longueur integer
  • date t_date
  • END
  • type t_tableau_chansons array1..n of
    t_chanson
  • var collection t_tableau_chansons
  • Trouver lartiste dune chanson donnée kaya
  • i 1
  • tant que iltn
  • si collectioni.title kaya alors
  • afficher collectioni.artiste

19
Type tableaux denregistrements
  • Exercice
  • type t_chanson RECORD
  • titre string100
  • artiste string100
  • album string100
  • longueur integer
  • date t_date
  • END
  • type t_tableau_chansons array1..n of
    t_chanson
  • var collection t_tableau_chansons
  • Trouver lartiste dune chanson donnée kaya
  • trouve FAUX
  • i 1
  • tant que (iltn ET trouve FAUX)
  • si collectioni.title kaya alors
  • afficher collectioni.artiste

20
NOUVEAU Addressage mémoire
21
(No Transcript)
22
(No Transcript)
23
Adresse dune variable
  • Stocké dans 4 Octets (32 bit), comme ça on peut
    adresser
  • 232 octets 4 294 967 296 octes
  • 4 GO
  • Limite bientôt atteint

24
Organisation de la mémoire
  • var a byte ( 1 octet (byte) )

536.870.911
536.870.910
...
1.000
...
5
a 4
3
2
1
0
25
Organisation de la mémoire
  • var a byte
  • a 97

536.870.911
536.870.910
...
1.000
...
5
a 4
97
3
2
1
0
26
Organisation de la mémoire
  • var a byte
  • a 97

536.870.911
536.870.910
...
1.000
...
5
a 4
97
3
2
1
0
Comment connaître ladresse de a ? ? Addr(a)
27
Organisation de la mémoire
  • var a byte
  • a 97
  • p_a Addr(a) Sauvegarder ladresse

536.870.911
536.870.910
...
1.000
...
5
a 4
97
3
2
1
0
Comment connaître ladresse de a ? ? Addr(a)
28
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse

536.870.911
536.870.910
p_a pointe vers a
0
p_a 1.003
0
p_a 1.002
0
p_a 1.001
p_a 1.000
5
...
a 5
97
4
3
2
1
0
Comment connaître ladresse de a ? ? Addr(a)
29
  • var a byte
  • var p_a pointer to byte 4 octets, lire
    pointeur vers a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse
  • p_a est 4, p_a est 97)
  • p_a 10 Déréférencement
  • p_a est 4, p_a est 10)

536.870.911
536.870.910
0
p_a 1.003
0
p_a 1.002
0
p_a 1.001
p_a 1.000
4
...
5
p_a a 4
10
3
2
1
Comment connaître ladresse de a ? ? Addr(a)
0
30
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse
  • p_a 10 affectation par déréférencement
  • a 10 affectation

31
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse
  • p_a 10 affectation par déréférencement
  • a 10 affectation

Cest équivalent !!
32
Définitions
  • Déclaration dun pointeur vers un byte
  • var p_a byte
  • Déréférencement dun pointeur
  • p_a
  • Connaître ladresse dune variable a
  • Addr(a) ou bien
  • _at_a

33
Fonctions
34
  • type t_tableau array1..n of integer
  • var tab t_tableau
  • function dedans(quoi integer, n integer)
    integer
  • var position integer
  • var i integer
  • début
  • position 0
  • i 1
  • tant que (iltn) faire
  • si (quoi tabi) alors
  • position i
  • fin si
  • i i 1

35
  • type t_tableau array1..n of integer
  • var tab t_tableau
  • function dedans(quoi integer, n integer)
    integer
  • var position integer
  • var i integer
  • début
  • position 0
  • i 1
  • tant que (iltn) faire
  • si (quoi tabi) alors
  • position i
  • fin si
  • i i 1

En-tête de la fonction
36
  • type t_tableau array1..n of integer
  • var tab t_tableau
  • function dedans(quoi integer, n integer)
    integer
  • var position integer
  • var i integer
  • début
  • position 0
  • i 1
  • tant que (iltn) faire
  • si (quoi tabi) alors
  • position i
  • fin si
  • i i 1

Corps de la fonction
37
  • type t_tableau array1..n of integer
  • var tab t_tableau
  • function dedans(quoi integer, n integer)
    integer
  • var position integer
  • var i integer
  • début
  • position 0
  • i 1
  • tant que (iltn) faire
  • si (quoi tabi) alors
  • position i
  • fin si
  • i i 1

Paramètres de la fonction (arguments)
38
  • type t_tableau array1..n of integer
  • var tab t_tableau
  • function dedans(quoi integer, n integer)
    integer
  • var position integer
  • var i integer
  • début
  • position 0
  • i 1
  • tant que (iltn) faire
  • si (quoi tabi) alors
  • position i
  • fin si
  • i i 1

Type de retour de la fonction
Valeur de retour de la fonction
39
La portée
40
  • program portee
  • var i byte
  • function somme(n byte) byte
  • var i byte
  • begin
  • result 0
  • for i 1 to n do
  • begin
  • result result i
  • end
  • end
  • begin
  • i3
  • WriteLn(somme(5))
  • WriteLn('i ', i)

41
  • program portee
  • var i byte
  • function somme(n byte) byte
  • var i byte
  • begin
  • result 0
  • for i 1 to n do
  • begin
  • result result i
  • end
  • end
  • begin
  • i3
  • WriteLn(somme(5))
  • WriteLn('i ', i)

...
...
i 100
...
0
42
  • program portee
  • var i byte
  • function somme(n byte) byte
  • var i byte
  • begin
  • result 0
  • for i 1 to n do
  • begin
  • result result i
  • end
  • end
  • begin
  • i3
  • WriteLn(somme(5))
  • WriteLn('i ', i)

...
...
i 201
n 200
5
3
i 100
...
0
43
  • program portee
  • var i byte
  • function somme(n byte) byte
  • var i byte
  • begin
  • result 0
  • for i 1 to n do
  • begin
  • result result i
  • end
  • end
  • begin
  • i3
  • WriteLn(somme(5))
  • WriteLn('i ', i)

...
...
i 201
n 200
5
3
i 100
...
0
44
  • program portee
  • var i byte
  • function somme(n byte) byte
  • var i byte
  • begin
  • result 0
  • for i 1 to n do
  • begin
  • result result i
  • end
  • end
  • begin
  • i3
  • WriteLn(somme(5))
  • WriteLn('i ', i)

...
...
1
i 201
n 200
5
3
i 100
...
0
45
  • program portee
  • var i byte Variable
    globale
  • function somme(n byte) byte
  • var i byte Variable locale
  • begin
  • result 0
  • for i 1 to n do
  • begin
  • result result i
  • end
  • end
  • begin
  • i3
  • WriteLn(somme(5))
  • WriteLn('i ', i)

46
  • program portee
  • var i byte Variable
    globale
  • function somme(n byte) byte
  • var i byte Variable locale
  • begin
  • result 0
  • for i 1 to n do
  • begin
  • result result i
  • end
  • end
  • begin
  • i3
  • WriteLn(somme(5))
  • WriteLn('i ', i)

47
Appel des fonctions
  • Appel par valeur
  • Appel par référence

48
Appel par valeur
  • var a byte
  • procedure ajouter (parametre byte)
  • début
  • WriteLn(parametre, parametre)
  • parametre parametre 2
  • WriteLn(parametre, parametre)
  • fin
  • début
  • a 4
  • WriteLn(a, a)
  • ajouter(a)
  • WriteLn(a, a)

49
Appel par valeur
536.870.911
536.870.910
...
  • var a byte
  • procedure ajouter (parametre byte)
  • début
  • WriteLn(parametre, parametre)
  • parametre parametre 2
  • WriteLn(parametre, parametre)
  • fin
  • début
  • a 4
  • WriteLn(a, a)
  • ajouter(a)
  • WriteLn(a, a)

...
223
222
221
220
...
203
202
201
a 200
4
...
0
50
Appel par valeur
536.870.911
536.870.910
...
  • var a byte
  • procedure ajouter (parametre byte)
  • début
  • WriteLn(parametre, parametre)
  • parametre parametre 2
  • WriteLn(parametre, parametre)
  • fin
  • début
  • a 4
  • WriteLn(a, a)
  • ajouter(a)
  • WriteLn(a, a)

...
223
222
221
4
parametre 220
...
203
202
201
a 200
4
...
0
51
Appel par valeur
536.870.911
536.870.910
...
  • var a byte
  • procedure ajouter (parametre byte)
  • début
  • WriteLn(parametre, parametre)
  • parametre parametre 2
  • WriteLn(parametre, parametre)
  • fin
  • début
  • a 4
  • WriteLn(a, a)
  • ajouter(a)
  • WriteLn(a, a)

...
223
222
221
6
parametre 220
...
203
202
201
a 200
4
...
0
52
Appel par valeur
536.870.911
536.870.910
...
  • var a byte
  • procedure ajouter (parametre byte)
  • début
  • WriteLn(parametre, parametre)
  • parametre parametre 2
  • WriteLn(parametre, parametre)
  • fin
  • début
  • a 4
  • WriteLn(a, a)
  • ajouter(a)
  • WriteLn(a, a)

...
223
222
221
220
...
203
202
201
a 200
4
...
0
53
Appel par valeur
536.870.911
536.870.910
...
  • var a byte
  • procedure ajouter (parametre byte)
  • début
  • WriteLn(parametre, parametre)
  • parametre parametre 2
  • WriteLn(parametre, parametre)
  • fin
  • début
  • a 4
  • WriteLn(a, a)
  • ajouter(a)
  • WriteLn(a, a)

...
223
222
221
220
...
203
202
201
200
4
...
0
54
Appel par référence
  • var a byte
  • type t_p_a byte
  • procedure ajouter (parametre t_p_a)
  • begin
  • WriteLn('parametre', parametre)
  • parametre parametre 2
  • WriteLn('parametre', parametre)
  • end
  • début
  • a 4
  • WriteLn('a', a)
  • ajouter(Addr(a))

55
Appel par référence
  • var a byte
  • type t_p_a byte
  • procedure ajouter (parametre t_p_a)
  • begin
  • WriteLn('parametre', parametre)
  • parametre parametre 2
  • WriteLn('parametre', parametre)
  • end
  • début
  • a 4
  • WriteLn('a', a)
  • ajouter(Addr(a))

Parametre est un pointeur
Appel par référence
56
Appel par référence
536.870.911
536.870.910
...
  • var a byte
  • type t_p_a byte
  • procedure ajouter (parametre t_p_a)
  • begin
  • WriteLn('parametre', parametre)
  • parametre parametre 2
  • WriteLn('parametre', parametre)
  • end
  • début
  • a 4
  • WriteLn('a', a)
  • ajouter(Addr(a))

...
...
203
202
201
a 200
4
...
0
57
Appel par référence
536.870.911
536.870.910
...
  • var a byte
  • type t_p_a byte
  • procedure ajouter (parametre t_p_a)
  • begin
  • WriteLn('parametre', parametre)
  • parametre parametre 2
  • WriteLn('parametre', parametre)
  • end
  • début
  • a 4
  • WriteLn('a', a)
  • ajouter(Addr(a))

parametre 243
0
0
parametre 242
0
parametre 241
200
parametre 240
...
...
203
202
201
a 200
4
...
0
58
Appel par référence
536.870.911
536.870.910
...
  • var a byte
  • type t_p_a byte
  • procedure ajouter (parametre t_p_a)
  • begin
  • WriteLn('parametre', parametre)
  • parametre parametre 2
  • WriteLn('parametre', parametre)
  • end
  • début
  • a 4
  • WriteLn('a', a)
  • ajouter(Addr(a))

parametre 243
0
0
parametre 242
0
parametre 241
200
parametre 240
...
...
203
202
201
a 200
6
...
0
59
Appel par référence
536.870.911
536.870.910
...
  • var a byte
  • type t_p_a byte
  • procedure ajouter (parametre t_p_a)
  • begin
  • WriteLn('parametre', parametre)
  • parametre parametre 2
  • WriteLn('parametre', parametre)
  • end
  • début
  • a 4
  • WriteLn('a', a)
  • ajouter(Addr(a))

243
242
241
240
...
...
203
202
201
a 200
6
...
0
60
Appel par référence (2)
  • var a byte
  • procedure ajouter (var parametre byte)
  • début
  • WriteLn(parametre, parametre)
  • parametre parametre 2
  • WriteLn(parametre, parametre)
  • fin
  • début
  • a 4
  • WriteLn(a, a)
  • ajouter(a)
  • WriteLn(a, a)

Une autre façon dappeler une fonction par
référence qui est moins explicite
Write a Comment
User Comments (0)
About PowerShow.com