Algorithmes et structures de données avancées 6ème cours Patrick Reuter

Slides:



Advertisements
Présentations similaires
Algorithmes et structures de données (avancées) Cours 1+2
Advertisements

La prise en charge du risque maladie
Algorithmes et structures de données avancées Cours 7
Patrick Reuter maître de conférences
Algorithmique (suite)
Algorithmes et structures de données avancées Cours 4
Algorithmes et structures de données 9ème cours Patrick Reuter maître de conférences
Conception de Site Webs dynamiques Cours 6
Algorithmes et structures de données avancées 5ème cours Patrick Reuter
Algorithmes et structures de données avancées Cours 6 Patrick Reuter
Conception de Site Webs dynamiques Cours 5
Algorithmes et structures de données 7ème cours
Algorithmes et structures de données avancés
Algorithmes et structures de données 3ème cours Patrick Reuter
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.
Algorithmes et structures de données
Créer une base de données MySQL
Patrick Reuter maître de conférences
Conception de Site Webs Interactifs Cours 10 Patrick Reuter
Algorithmes et structures de données Cours 8
Algorithmes et structures de données Cours 3
Conception de Site Webs Interactifs Cours 9 Patrick Reuter
Conception de Site Webs Interactifs Cours 3
Algorithmes et structures de données Cours 10 Patrick Reuter
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 Patrick Reuter.
Algorithmes et structures de données Cours 7
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 9 Patrick Reuter.
Algorithmes et structures de données Cours 1 Patrick Reuter
Conception de Site Webs Interactifs Cours 8 Patrick Reuter
Conception de Site Webs Interactifs Cours 4
Algorithmes et structures de données 4ème cours
Algorithmes et structures de données 5ème cours
C++ 6ème cours Patrick Reuter maître de conférences
Algorithmes et structures de données Cours 9 Patrick Reuter
Algorithmes et structures de données avancées Cours 1+2+3
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 8 Patrick Reuter.
Algorithmes et structures de données Cours 2
La logique algorithmique
Scène de test (60000 polygones, 4000m2)
Comment afficher rapidement un univers immense ?.
Yannick LEGRÉ - DataGrid France - Lyon 31 janvier 2001 Tests de Globus Lancement des algorithmes dArtémis à travers la grille... WP 6 / WP 10.
Affecter les élèves sur le net
Module 6 : Programmation dynamique
L’ASSOCIATION SCHOOL DE TARRA
00002–Fr–1 – Décembre 2003 Organisation mondiale de la Santé Nombre de personnes vivant Total40 millions (34 – 46 millions) avec le VIH/SIDA Adultes37.
Les dates Recherche d’un algorithme pour déterminer si une année est bissextile ou non.
Les algorithmes: complexité et notation asymptotique
Jeu dOthello Projet dAlgorithmique et Programmation.
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
LIN 1750 DGD 11 Prosodie.
Efficacité des algorithmes
Sixième partie Sixième partie Le recrutement dans ladministration scolaire et universitaire (ASU) et dans les corps des services déconcentrés (SD) de lEtat.
Planification et suivi d'un projet de S.I Réfs : chapitre 9 p 251.
Quels sont les résultats des élèves de l’école ?
L’énergie éolienne descEolien.php..
Algorithmes sur les sons
V d. Des élections professionnelles pour élire : Vos délégués du personnel aux Commissions Administratives Paritaires des professeurs des écoles et des.
Jardins des châteaux de la Renaissance
Cours 4 - Trois algorithmes de recherche dans un tableau
Structures de contrôle
BULLETIN STATISTIQUE Derniers développements – Juillet 2014.
Vibert Dimitri CSII3 Tuteur : Volker Bäcker.  Présentation de Montpellier RIO Imaging  La mission  Les langages et outils utilisés  Le planning 
Travaux Pratiques Optimisation Combinatoire
FOULPOUGNE Station Hydrométrique sur la TOUVRE Code Hydro : R Ministère de l'Écologie, de l'Énergie, du Développement.
Jésus aborde la question du mariage « Celui qui renvoie sa femme pour en épouser une autre est coupable d'adultère envers elle. Si une femme a renvoyé.
par Joshua, Philippe et Francis
LE CONGE INDIVIDUEL DE FORMATION - Définition - Quels sont les critères ? - Quelles sont les conditions de recevabilité ?
Cours 5 - Trois algorithmes de tri d'un tableau
DIAPO 1: 30 secondes Voici un algorithme SCRATCH Question 1
Les ventilateurs Etude de cas n°1 1 : Observations - Comparaisons
Transcription de la présentation:

Algorithmes et structures de données avancées 6ème cours Patrick Reuter

Ingrédients dalgorithmes Affectation (ex. mois := 6, jours[1] := 31) Condition/Comparaison (ex. mois <= 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)

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

Déclaration de variables 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 tomates fraîches ou 1 cuillère. à soupe de concentré de tomate pommes de terre navets carottes 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 g de beurre ou 3 cuillères à soupe d'huile - sel 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 …..

Déclaration de variables var compteur : integer; var diviseur : single; var c : byte; var precision : double; var nom : string; var masculin : boolean; var jours : array[1..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

Déclaration de variables Types prédéfinis –Integer, boolean, single, … Types que lon peut définir soi-même type t_tableau = array[1..12] of byte; var jours : t_tableau; au lieu de var jours : array[1..12] of byte;

Organisation de la mémoire type t_tableau = array[1..12] of byte; var jours : t_tableau; {12 octets} #0 jours[1] # # # jours[index] #(2000+index-1) jours[3] #2002 jours[12] # Occupe de la place successive dans la mémoire jours[2] #

Tableau 2D

Motivation type t_champ =(vide, blanc, noir); type t_ligne = array[1..8] of t_champ; type t_damier = array[1..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 damier[i][j] := vide; FIN POUR

Enregistrements

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

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;

Enregistrements Motivation (à ne pas faire !) type t_couleur = (rouge, vert, jaune); var joueurnom : array[1..n] of string; var joueurscore : array[1..n] of integer; var joueurcouleur : array[1..n] of t_couleur; joueurnom[1] := " Martin; joueurscore[1] := 0; joueurcouleur[1] := rouge; joueurnom[2] := " Romain; joueurscore[2] := 0; joueurcouleur[2] := vert; …

Enregistrements Motivation (à faire !) type t_couleur = (rouge, vert, jaune); type t_joueur = RECORD nom : string; score : integer; couleur : t_couleur; END; var joueur : array[1..n] of t_joueur; joueur[1].nom := " Martin; joueur[1].score := 0; joueur[1].couleur := rouge; joueur[2].nom := " Romain; joueur[2].score := 0; joueur[2].couleur := vert; …

type t_date = RECORD an:integer; mois:byte; jour:byte; END; var aujourdhui : t_date; aujourdhui.an # # # aujourdhui.an; # aujourdhui.an; # #0 Occupe de la place successive dans la mémoire aujourdhui.an; #4003 aujourdhui.mois; #4004 aujourdhui.jour; #

Type tableaux denregistrements Déclaration du type enregistrement : type t_chanson = RECORD titre:string[100]; artiste:string[100]; album:string[100]; longueur:integer; date:t_date; END; Déclaration du type tableau type t_tableau_chansons = array[1..n] of t_chanson; Déclaration dune variable de ce type var collection : t_tableau_chansons; Affectation collection[1].title = Riders on the storm; collection[1].artiste = The Doors;... collection[n].title = Talkin Blues;...

Type tableaux denregistrements Exercice type t_chanson = RECORD titre:string[100]; artiste:string[100]; album:string[100]; longueur:integer; date:t_date; END; type t_tableau_chansons = array[1..n] of t_chanson; var collection : t_tableau_chansons; Trouver lartiste dune chanson donnée kaya i := 1; tant que i<=n i := i + 1; fin tant que

Type tableaux denregistrements Exercice type t_chanson = RECORD titre:string[100]; artiste:string[100]; album:string[100]; longueur:integer; date:t_date; END; type t_tableau_chansons = array[1..n] of t_chanson; var collection : t_tableau_chansons; Trouver lartiste dune chanson donnée kaya i := 1; tant que i<=n si collection[i].title = kaya alors afficher collection[i].artiste; i := i + 1; fin tant que

Type tableaux denregistrements Exercice type t_chanson = RECORD titre:string[100]; artiste:string[100]; album:string[100]; longueur:integer; date:t_date; END; type t_tableau_chansons = array[1..n] of t_chanson; var collection : t_tableau_chansons; Trouver lartiste dune chanson donnée kaya trouve := FAUX; i := 1; tant que (i<=n ET trouve = FAUX) si collection[i].title = kaya alors afficher collection[i].artiste; trouve := VRAI; i := i + 1; fin tant que

NOUVEAU : Addressage mémoire

Adresse dune variable Stocké dans 4 Octets (32 bit), comme ça on peut adresser 2 32 octets = octes = 4 GO Limite bientôt atteint

Organisation de la mémoire var a : byte; ( 1 octet (byte) ) #0 #1 #2 #3 a #4 #5... # # #

Organisation de la mémoire var a : byte; a := 97; #0 #1 #2 #3 a #4 #5... # # #

Organisation de la mémoire var a : byte; a := 97; #0 #1 #2 #3 a #4 #5... # # # Comment connaître ladresse de a ? Addr(a)

Organisation de la mémoire var a : byte; a := 97; p_a := Addr(a);{ Sauvegarder ladresse } #0 #1 #2 #3 a #4 #5... # # # Comment connaître ladresse de a ? Addr(a)

var a : byte; var p_a : ^byte; {4 octets, lire : pointeur vers a} a := 97; p_a := Addr(a);{ Sauvegarder ladresse } #0 #1 #2 #3 #4 a #5... # # p_a # Comment connaître ladresse de a ? Addr(a) p_a #1.001 p_a #1.002 p_a # « p_a pointe vers a »

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) #0 #1 #2 #3 p_a^a #4 #5... # # p_a # Comment connaître ladresse de a ? Addr(a) p_a #1.001 p_a #1.002 p_a #

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 }

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 !!

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

Fonctions

type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin

type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin En-tête de la fonction

type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin Corps de la fonction

type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position :=i; fin si i := i + 1; fin tant que result := position; fin Paramètres de la fonction (arguments)

type t_tableau = array[1..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 (i<=n) faire si (quoi = tab[i]) alors position := i; fin si i := i + 1; fin tant que result := position; fin Type de retour de la fonction Valeur de retour de la fonction

La portée :

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; begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i); readln; end.

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; begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i); readln; end.... #0 i #100

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; begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i); readln; end #0 i #100 n #200 i #201 5

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; begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i); readln; end #0 i #100 n #200 i #201 5

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; begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i); readln; end #0 i #100 n #200 i #

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; begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i); readln; end.

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; begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i); readln; end.

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

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); fin 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); fin Appel par valeur #0 a #200 #201 #202 # # #203 #220 # #222 #

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); fin #0 a #200 #201 #202 # # #203 parametre #220 # #222 # Appel par valeur

#0 a #200 #201 #202 # # #203 parametre #220 # #222 # 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); fin

#0 a #200 #201 #202 # # #203 #220 # #222 # 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); fin

#0 #200 #201 #202 # # #203 #220 # #222 # 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); fin 4

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)); WriteLn('a', a); fin

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)); WriteLn('a', a); fin Appel par référence Parametre est un pointeur Appel par référence

#0 a #200 #201 #202 # # # 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)); WriteLn('a', a); fin

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)); WriteLn('a', a); fin #0 a #200 #201 #202 # # #203 parametre #240 parametre # parametre #242 parametre # Appel par référence

#0 a #200 #201 #202 # # #203 parametre #240 parametre # parametre #242 parametre # 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)); WriteLn('a', a); fin

#0 a #200 #201 #202 # # #203 #240 # #242 # 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)); WriteLn('a', a); fin

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); fin Une autre façon dappeler une fonction par référence qui est moins explicite