La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Algorithmique (Partie 2).

Présentations similaires


Présentation au sujet: "Algorithmique (Partie 2)."— Transcription de la présentation:

1 Algorithmique (Partie 2)

2 Sources http://www.atelierphp.net/intro/atelier.php
php-et-mysql "

3 Organiser son environnement
Pour exécuter un programme PHP, on a besoin d’installer sur sa machine : Un serveur Web Un interpréteur PHP (Un serveur de base de données : pas utile pour l’instant, mais pourra servir par la suite et souvent livré avec le serveur Web) Il est nécessaire d’utiliser un serveur Web et un interpréteur PHP Voir le cours Openclassrrom N°2 « préparer son environnement de travail » mysql/preparer-son-environnement-de-travail Mais pour s ’exercer simplement sur des programmes simples, on peut utiliser

4 Contenu Sous-programmes Structures, enregistrement, table Fichiers

5 Les sous-programmes

6 Les sous-programmes Algorithmique : Diviser pour régner
Décomposer un problème en sous problème Mettre chaque solution à un sous problème dans un morceau de programme, un sous-programme Composer les morceaux On distingue les fonctions ou les procédures

7 Une fonction est un (sous-)programme
Qui porte un nom A des paramètres en entrées Retourne une valeur

8 Définition d’une fonction en langage algorithmique
Fonction nom_de_fonction (paramètre1 : type 1, … paramètre i : type i, …) : type Var /* Variables locales */ Début /*bloc d’instruction*/ Retourne variable FinFonc Les paramètres formels d’une fonction définissent les types des valeurs à entrer pour calculer la valeur retournée (Retourne ) de type type. Les variables déclarées dans une fonction sont des variables locales à la fonction. Fonction somme (a : réél, b : réél) : réel Var c : réél Début c  a + b Retourne c FinFonc a et b sont les paramètres formels de la fonction somme. La variable c est une variable locale à la fonction ‘’somme’’, elle n’est pas connue (vue) à l’extérieur de cette fonction.

9 Définition d’une fonction en PHP
Fonction nom_de_fonction (paramètre1 : type 1, … paramètre i : type i, …) : type Var /* Variables locales */ Début /*bloc d’instruction*/ Retourne variable FinFonc Les paramètres formels d’une fonction définissent les types des valeurs à entrer pour calculer la valeur retournée (Retourne ) de type type. Les variables déclarées dans une fonction sont des variables locales à la fonction. <?php function nom_de_fonction ($parametre_1, $parametre_2, ..., $ parametre_n) { echo "Exemple de fonction.\n"; return $return_value; } ?>

10 Définition d’une fonction en PHP
Fonction somme (a : réél, b : réél) : réel Var c : réél Début c  a + b Retourne c FinFonc a et b sont les paramètres formels de la fonction somme. La variable c est une variable locale à la fonction ‘’somme’’, elle n’est pas connue (vue) à l’extérieur de cette fonction. <?php \\définition : function addition ($a, $b) { $c=$a+$b; return $c; } \\appel : $d = addition (2,10); ?>

11 Utilisation d’une fonction
PROGRAMME Toto VAR x,y,z : réels DEBUT z  somme(x,y) FIN a et b dans la définition de la fonction ‘’somme’’ sont les paramètres formel x,y dans le programme Toto sont les paramètres effectifs (ou réels) Les paramètres formels et effectifs peuvent porter le même nom, mais pas nécessairement A l’appel de la fonction (z  somme(x,y)), a prend la valeur de x, b prend la valeur de y Au retour, la valeur retournée par la fonction est affectée à la variable z

12 Une procédure est un (sous-)programme
Qui porte un nom A des paramètres en entrée (E) A des paramètres en sorties (S) A des paramètres en entrées sorties (ES)

13 Définition d’une procédure en langage algorithmique
Procédure nom_de_procédure (mode paramètre1 : type 1, … , mode paramètre i : type i, …) Var /* Variables locales */ Début /*bloc d’instruction*/ FinProc mode: Entrée, Sortie, EntréeSortie (les paramètres en sortie et en entrée/sortie sont déclarées dans le programme appelant) Procédure somme (E a : réél, E b : réél, S c : réel) Début c  a + b Finproc a, b, c dans la définition de la procédure somme sont les paramètres formel

14 Utilisation d’une procédure
PROGRAMME Toto VAR x,y,z : réels DEBUT somme(x,y,z) FIN a, b, c dans la définition de la procédure ‘’somme’’ sont les paramètres formel x, y, z dans le programme Toto sont les paramètres effectifs (ou réels) A l’appel de la procédure somme(x, y, z), a prend la valeur de x, b prend la valeur de y Une procédure ne retourne pas explicitement de valeur, mais comme c est déclaré en sortie, c est modifié. Une procédure ne peut pas être affectée à une variable

15 Mode de passage de paramètres
Par valeur : La valeurs du paramètre effectif est copiée dans le paramètre formel La modification du paramètre formel n’entraîne pas la modification du paramètres effectif C’est le mode de passage des paramètres en entrée Par référence : La référence du paramètre effectif est copiée dans le paramètre formel La modification du paramètre formel entraîne la modification de la variable référencée par ce paramètre C’est le mode de passage des paramètres en sortie et en entrée/sortie

16 En règle générale En théorie : En pratique :
Les paramètres d’une fonction sont passés par valeur Les paramètres en entrée d’une procédure sont passés par valeur Les paramètres en sortie et en entrée/sortie sont passés par référence En pratique : En PHP, tout est possible, mais pas conseillé

17 La visibilité des variables
On peut déclarer des variables dans les programmes appelant et dans les sous-programmes appelés ! Comment cela se passe-t-il si elle ont le même nom ? Par défaut, une variable définie dans un sous-programme n’est visible que dans ce sous programme (portée locale), sauf si elle est explicitement déclarée comme globale. Deux variables locales de même nom n’ont pas de lien entre elles

18 Les variables globales
VAR GLOBALES c: réél Procédure somme (E a: réel, E b : réel) VAR DEBUT c  a + b FIN PROGRAMME Essai x, y : réel Lire(x,y) Somme (x,y) Ecrire c

19 En PHP Function pour’’Fonction’’ et ‘’Procédure’’
<?php $myPrice="100" ; print ("1_Prix hors taxe : $myPrice <br/>") ; $myPrice="100" ; add_tva_val($myPrice); print ("2_Après passage par valeur : $myPrice<br/>") ; $myPrice="100" ; add_tva_ref($myPrice); print ("3_Après passage par référence : $myPrice<br/>"); function add_tva_val($myPrice) { $myPrice = .19*$myPrice + $myPrice ; } function add_tva_ref(&$myPrice) { $myPrice = .19*$myPrice + $myPrice ; } ?> Function pour’’Fonction’’ et ‘’Procédure’’ Passage par valeur par défaut : $var Passage par référence : &$var

20 En PHP Résultat de l’exécution :
<?php $myPrice="100" ; print ("1_Prix hors taxe : $myPrice <br/>") ; $myPrice="100" ; add_tva_val($myPrice); print ("2_Après passage par valeur : $myPrice<br/>") ; $myPrice="100" ; add_tva_ref($myPrice); print ("3_Après passage par référence : $myPrice<br/>") ; function add_tva_val($myPrice) { $myPrice = .19*$myPrice + $myPrice ; } function add_tva_ref(&$myPrice) { $myPrice = .19*$myPrice + $myPrice ; } ?> Function pour’’Fonction’’ et ‘’Procédure’’ Passage par valeur par défaut : $var Passage par référence : &$var Résultat de l’exécution : 1_Prix hors taxe : 100  2_Après passage par valeur : _Après passage par référence : 119

21 Fonctions prédéfinies en PHP
Exemple : chaînes de caractères round() : arrondi les réels count() : nombre d’éléments dans un tableau strlen(): retourne la longueur d’une chaîne strpos() : cherche la position de la première occurrence de la chaîne en paramètre substr(): découpe une portion de chaîne isempty(): teste si une variable a une valeur Des centaines: indexes.functions.php

22 Les structures Un exemple de type construit à partir des types de base.

23 Les structures - Exemple
Type Structure Etudiant no-etudiant : chaîne nom: chaîne année_inscription : chaîne adresse : chaîne FinStruct Structure des enregistrements no-etudiant nom annee_inscription adresse etudiant 1 Alfred Cite Haute Malgrange etudiant 2 n enregistrements de structure ‘’Etudiant’’ etudiant n

24 Les structures – Définition
Type Structure nom-type champ1 : type champ2 : type champ3 : type champ4 : type FinStruct Type Structure Etudiant no-etudiant : chaîne nom: chaîne année_inscription : chaîne adresse : chaîne FinStruct

25 Les enregistrements : instances de structures
Exemple: etudiant1, etudiant2: Etudiant Notion d’enregistrement Un enregistrement est une variable d’un type structuré de donnée. VAR nom-enregistrement : nom de type

26 Les structures - Utilisation
Type Structure nom-type champ1 : type champ2 : type champ3 : type champ4 : type FinStruct Accéder à un champ d’un enregistrement nom_enregistrement.nom_de_champ variable1 : nom-type variable2  variable1.champ2 etudiant1 : type_etudiant variable4  etudiant1.nom

27 Les enregistrements dans les structures
Une structure peut avoir un champ de type structure Type Structure nom-type-2 champ1 : type champ2 : nom-type champ3 : type FinStruct Type Structure nom-type champ11 : type champ22 : type champ33 : type champ44 : type FinStruct Var exemple : nom-type-2 Variable5  exemple.champ2.champ22

28 Un nouveau type construit : les tables (tableau d’enregistrements)
Une table est un tableau d’enregistrements VAR var etudiants : tableau[1..10] de type-etudiant Nom de l’étudiant i: Etudiants[i].nom

29 Structures et tables en PHP
On ne dispose pas de type « structure » On va s’appuyer sur la notion de classe d’objets Avec les notations ‘’new’’ et ‘’ ->’’ En réalité, on entrebaille la porte de la programmation objet. Aussi, n’entrez pas dans le détail de ces notations, c’est inutile et il vous manque une partie du contexte : exemple du mot clé public

30 Création des types de structure : <
Création des types de structure : <?php class tfabricant { public $ref; public $nom; public $adresse; public $tel; } class tarticle { public $libelle; public $prix; public $fab; Utilisation des enregistrements structurés : $article=new tarticle; $article->fab=new tfabricant; $article->ref="Art001_01"; $article->fab->ref="Fabl234"; echo $article->ref; echo "<br />"; echo $article->fab->ref; ?>

31 $article[0]=new tarticle; $article[1]=new tarticle; $article[0]->fab=new tfabricant; $article[1]->fab=new tfabricant; $article[0]->ref="Art001_01"; $article[1]->ref="Art002_02"; $article[0]->fab->ref="Fabl234"; $article[1]->fab->ref="Fab4321"; echo $article[0]->ref; echo "<br />"; echo $article[0]->fab->ref; echo $article[1]->ref; echo $article[1]->fab->ref; ?> Une table d’article <?php class tfabricant { public $ref; public $nom; public $adresse; public $tel; } class tarticle { public $libelle; public $prix; public $fab;

32 Une table d’article for($i=0;$i<3;$i++) {
$article[$i]=new tarticle; $article[$i]->fab=new tfabricant; } $article[0]->ref="Art001_01"; $article[0]->fab->ref="Fabl234"; $article[1]->ref="Art002_02"; $article[1]->fab->ref="Fab4321"; echo $article[0]->ref; echo "<br />"; echo $article[0]->fab->ref; echo $article[1]->ref; echo $article[1]->fab->ref; ?> <?php class tfabricant { public $ref; public $nom; public $adresse; public $tel; } class tarticle { public $libelle; public $prix; public $fab;

33 Les fichiers

34 Objectif Assurer la persistance des données :
Permettre la sauvegarde et la récupération des données entre deux sessions de travail Les données sont sauvegardées sur des supports particuliers : disque dur (ex C:), clé USB …

35 Types de fichiers Fichiers texte : lignes de texte successives
Fichiers binaires : suite de ‘’0’’ et ‘’1’’ qui ne correspondent pas (sauf accident) à du texte. Interprétation interne des fichiers : liée aux programmes qui les utilisent Formats : HTML, JPEG, .doc, .pdf, MP3 …

36 Accès aux fichiers Séquentiel Direct Séquentiel indexé

37 Principales fonctions
Ouvrir un fichier (en lecture, en écriture) Traiter un fichier : lire et écrire des lignes, des enregistrements, des caractères … Fermer un fichier

38 Forme générale d’un programme de traitement d’un fichier
Début //On récupère la référence au fichier fic  ouvrir(nom_de_fichier) Tantque non EOF (fic) faire //on lit la ligne en cours du fichier //dans la variable ‘’ligne’’ lire(fic, ligne) //traiter la ligne traiter(ligne) //passer à la ligne suivante Findetantque Fermer(fic) Fin Programme TRAITER-FICHIER Var fic: fichier nom_de_fichier : chaîne ligne : chaîne ‘’fic’’ est la référence du fichier dans le programme ‘’nom de fichier’’ est le nom du fichier sur disque EOF fonction qui teste la fin d’un fichier (End Of File)

39 Exemple PHP avec ‘’fgets’’
<?php  // on déclare le nom du fichier à ouvrir $fichier = ‘fichier.txt';  //ouverture du fichier en lecture seule $fp = fopen($fichier,'r');  //feof indiquera la fin du fichier //le fichier est parcouru jusqu'à la fin while(!feof($fp))  {     //lecture du fichier, stockage dans $ligne     $ligne = fgets($fp);      //affiche la ligne à l'écran, n'oubliez pas     print $ligne.'<br/>';   } fclose($fp); //pensez à refermer à la fin du script ?>

40 Fichiers en PHP Ouverture : int fopen(string filename, string mode)
Les associations d'ouvertures liées à fopen() 'w' ouvre le fichier pour écriture, et détruit les données si le fichier en contient 'w+' comme ci dessus mais crée le fichier si celui ci n'éxiste pas 'a' ouvre le fichier pour ajouter de nouvelles données en fin de fichier 'a+' comme ci-dessus mais crée le fichier si celui n'existe pas 'r' ouvre le fichier en lecture seulement

41 Fichiers en PHP Lecture string fgets(int fp, [int length]) Fermeture
retourne la ligne courante du fichier Si lenght est précisé, lit lenght caractères ou jusqu’à la fin de ligne Fermeture bool close(string filename) Ecriture int fwrite(int fp, string chaîne [, int length]) écrit le contenu de chaîne dans le fichier fp; si lenght (optionnel) est précisé, au plus lenght octets seront écrits Synonyme : fputs

42 Autres fonctions Autres : array file(string filename)
lit un fichier et le range dans un tableau ligne par ligne string fread(int fp, int length) idem fgets mais ignore les fins de ligne int filesize(string filename)

43 Exemple PHP avec ‘’fgets’’
<?php  // on déclare le nom du fichier à ouvrir $fichier = ‘fichier.txt';  //ouverture du fichier en lecture seule $fp = fopen($fichier,'r');  //feof indiquera la fin du fichier //le fichier est parcouru jusqu'à la fin while(!feof($fp))  {     //lecture du fichier, stockage dans $ligne     $ligne = fgets($fp);      //affiche la ligne à l'écran, n'oubliez pas     print $ligne.'<br/>';   } fclose($fp); //pensez à refermer à la fin du script ?>

44 Exemple ‘’file’’ <?php $myFileArray = file(‘fichier.txt'); for ($index=0;$index<count($myFileArray);$index++)     {         print ($myFileArray[$index]."<br/>");     } ?>

45 Les fichiers d’enregistrements en PHP
Délimiter les champs avec un caractère spécial Mettre un enregistrement par ligne 12:Alfred:2017:CiteHauteMalgrange Lecture : lire une ligne et récupérer les champs grâce aux délimiteurs (voir fonction ‘’explode’’) Ecriture : coller les champs en insérant le délimiteur entre eux (voir fonction ‘’implode’’)

46 Sujet de TP (2017 – 2018) Tri d’un fichier de données selon un champ de la structure des enregistrements. On désire réaliser un programme qui prend en entrée une liste d’étudiants initialement non triée et qui retourne la même liste d’étudiants mais triée par numéro d’étudiant croissant.   La liste d’étudiants est stockée dans un fichier texte dont chaque enregistrement contient un étudiant avec la structure suivante : no-étudiant, nom, prénom et inscription. Le fichier tient entièrement en mémoire. On propose d’organiser l’étude en trois temps de la façon suivante : - Ecrire un programme en PHP qui trie un tableau d’entiers en mémoire - Adapter le programme pour trier des entiers stockés dans un fichier Adapter le programme pour trier des étudiants (structures composées des champs no-étudiant, nom, prénom et inscription) stockés dans un fichier.  A Chaque étape, donner : L’algorithme utilisé en langage algorithmique Le programme correspondant (On pourra utiliser les fonctions implode et explode pour gérer les structures.)  Une fois le programme trié, on veut : pouvoir insérer dans le fichier un nouvel étudiant pouvoir supprimer un étudiant de numéro donné

47 TP

48 FIN

49 Algorithmique sur les tableaux

50 Algorithmique sur les tableaux
Fortement liée à la notion de boucle Recherche d’un élément Plus petit/ plus grand élément Moyenne Tris

51 Recherche d’un élément
PROGRAMME Recherche VAR nombres : tableau [1..10] d’entiers valeur_cherchée : entier trouve: booléen DEBUT i 1 trouve  faux Tant que i<=10 et trouve = faux Faire Si nombre[i] = valeur_cherchée Alors trouve  vrai Fsi i  i + 1 FinTantQue Si Trouve alors Afficher « Trouvé en position » i -1 sinon Afficher « Pas trouvé » FinSi FIN

52 Recherche d’un élément en PHP
<?php $nombres = array(3,7,59,45,12,999, 45,5,88,1); $trouve=false; $valeur-recherchee=5; $i = 0; while(($i<9) && (! $trouve) { If ($nombres[$i] == $valeur-recherchee) trouve = true; $i = $i + 1; } If ($trouve) echo ‘’trouvé en position’’.($i-1). ’’\n ’’; ?>

53 Foreach <?php $a = array (1, 2, 3, 17); $i = 0; foreach($a as $v){
print "\$a[$i] => $v.\n"; $i = $i + 1;} ?> $a[0] => 1. $a[1] => 2. $a[2] => 3. $a[3] => 17. <?php $a = array (1, 2, 3, 17); foreach ($a as $v){     print "Valeur courante de \$a: $v.\n"; } ?> Valeur courante de $a: 1. Valeur courante de $a: 2. Valeur courante de $a: 3. Valeur courante de $a: 17.

54 Foreach <?php $a = array ("un" => 1,"deux" => 2,"trois" => 3,"dix-sept" => 17 ); foreach($a as $k => $v) {     print "\$a[$k] => $v.\n"; } ?> $a[un] => 1. $a[deux] => 2. $a[trois] => 3. $a[dix-sept] => 17.

55 La récursivité Une fonction (procédure) récursive est une fonction (procédure) qui s’appelle elle-même, directement ou par l’intermédiaire d’une autre fonction ou procédure. Un problème difficile de la programmation récursive est de trouver la(les) bonne(s) condition(s) d’arrêt.

56 La récursivité Croisée Procedure recursive1 () DEBUT … Recursive2 ()
FIN Procedure recursive2 () recursive1 () Simple Procedure recursive () DEBUT recursive () FIN

57 Exemple : calcul d’une factorielle
n! = n*n-1*n-2*…*2*1 => fact(n) = n*fact(n-1) fact(5) = 5*fact(4) fact(4) = 4*fact(3) fact(3) = 3*fact(2) fact(2) = 2*fact(1) fact(1) = 1*fact(0) fact(0) = 1

58 Exemple : calcul d’une factorielle
Version 1 : Fonction factorielle (n: entier) : entier DEBUT fact  n*factorielle(n-1) Retourne fact FIN Oui, mais quand est-ce que l’on s’arrête ?

59 Factorielle Version 2 Fonction factorielle (n: entier) : entier DEBUT
Si n > 1 alors retourne n*factorielle(n-1) Sinon retourne n Fsi FIN Oui mais, et factorielle 0 ?

60 Factorielle Version 3 Fonction factorielle (n: entier) : entier DEBUT
Si n = 0 Alors retourne 1 Sinon retourne n*fact(n-1) Fsi FIN

61 La récursivité Une fonction (procédure) récursive est une fonction (procédure) qui s’appelle elle-même, directement ou par l’intermédiaire d’une autre fonction ou procédure. Un problème difficile de la programmation récursive est de trouver la(les) bonne(s) condition(s) d’arrêt.

62 La récursivité Croisée Procedure recursive1 () DEBUT … Recursive2 ()
FIN Procedure recursive2 () recursive1 () Simple Procedure recursive () DEBUT recursive () FIN

63 Exemple : calcul d’une factorielle
n! = n*n-1*n-2*…*2*1 => fact(n) = n*fact(n-1) fact(5) = 5*fact(4) fact(4) = 4*fact(3) fact(3) = 3*fact(2) fact(2) = 2*fact(1) fact(1) = 1*fact(0) fact(0) = 1

64 Exemple : calcul d’une factorielle
Version 1 : Fonction factorielle (n: entier) : entier DEBUT fact  n*factorielle(n-1) Retourne fact FIN Oui, mais quand est-ce que l’on s’arrête ?

65 Factorielle Version 2 Fonction factorielle (n: entier) : entier DEBUT
Si n > 1 alors retourne n*factorielle(n-1) Sinon retourne n Fsi FIN Oui mais, et factorielle 0 ?

66 Factorielle Version 3 Fonction factorielle (n: entier) : entier DEBUT
Si n = 0 Alors retourne 1 Sinon retourne n*fact(n-1) Fsi FIN

67 Factorielle en PHP <?php function factorielle($nbre) {
if($nbre == 0) return 1; } else return $nbre*factorielle($nbre-1); echo factorielle(5); ?>


Télécharger ppt "Algorithmique (Partie 2)."

Présentations similaires


Annonces Google