Algorithmique
(Partie 2)
Sources
http://www.atelierphp.net/intro/atelier.php
https://
openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mys
ql "
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 » https://
openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/preparer-s
on-environnement-de-travail
• Mais pour s ’exercer simplement sur des programmes simples, on peut utiliser
http://sandbox.onlinephpfunctions.com/
Contenu
• Sous-programmes
• Structures, enregistrement, table
• Fichiers
Les sous-programmes
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
Une fonction est un (sous-)programme
• Qui porte un nom
• A des paramètres en entrées
• Retourne une valeur
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.
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;
}
?>
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);
?>
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
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)
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
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
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
En règle générale
• En théorie :
• 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é
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
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
VAR
x, y : réel
DEBUT
Lire(x,y)
Somme (x,y)
Ecrire c
FIN
En PHP <?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
En PHP
<?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 :
100
3_Après passage par référence
: 119
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:
http://php.net/manual/
fr/indexes.functions.php
Les structures
Un exemple de type construit à partir des types de base.
Les structures- Exemple
Type
Structure Etudiant
no-etudiant : chaîne
nom: chaîne
année_inscription : chaîne
adresse : chaîne
FinStruct
…
etudiant 1
etudiant 2
etudiant n
no-etudiant nom annee_inscription adresse
n enregistrements
de structure ‘’Etudiant’’
Structure des enregistrements
12 Alfred 2017 Cite Haute Malgrange
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
Les enregistrements : instances de structures
• Notion d’enregistrement
Un enregistrement est une variable
d’un type structuré de donnée.
VAR
nom-enregistrement : nom de type
Exemple:
etudiant1, etudiant2: Etudiant
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
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
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
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
Création des types de structure :
<?php
class tfabricant {
public $ref;
public $nom;
public $adresse;
public $tel;
}
class tarticle {
public $ref;
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;
?>
<?php
class tfabricant {
public $ref;
public $nom;
public $adresse;
public $tel;
}
class tarticle {
public $ref;
public $libelle;
public $prix;
public $fab;
}
$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 "<br />";
echo $article[1]->ref;
echo "<br />";
echo $article[1]->fab->ref;
echo "<br />";
?>
Une table d’article
<?php
class tfabricant {
public $ref;
public $nom;
public $adresse;
public $tel;
}
class tarticle {
public $ref;
public $libelle;
public $prix;
public $fab;
}
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 "<br />";
echo $article[1]->ref;
echo "<br />";
echo $article[1]->fab->ref;
?>
Une table d’article
Les fichiers
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 …
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 …
Accès aux fichiers
• Séquentiel
• Direct
• Séquentiel indexé
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
Forme générale d’un programme de
traitement d’un fichier
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)
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
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
?>
Fichiers en PHP
• Ouverture :
int fopen(string filename, string mode)
Mode:
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
Fichiers en PHP
• Lecture
string fgets(int fp, [int length])
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
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)
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
?>
Exemple ‘’file’’
<?php
$myFileArray = file(‘fichier.txt');
for ($index=0;$index<count($myFileArray);$index++)
{
print ($myFileArray[$index]."<br/>");
}
?>
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’’)
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é
TP 2018-2019
FIN
Algorithmique sur les tableaux
Algorithmique sur les tableaux
• Fortement liée à la notion de boucle
• Recherche d’un élément
• Plus petit/ plus grand élément
• Moyenne
• Tris
• …
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
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 ’’;
?>
Foreach
<?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.
<?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.
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.
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.
La récursivité
• Simple
Procedure recursive ()
DEBUT
…
recursive ()
…
FIN
• Croisée
Procedure recursive1 ()
DEBUT
…
Recursive2 ()
…
FIN
Procedure recursive2 ()
DEBUT
…
recursive1 ()
…
FIN
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
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 ?
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 ?
Factorielle
• Version 3
Fonction factorielle (n: entier) : entier
DEBUT
Si n = 0
Alors retourne 1
Sinon
retourne n*fact(n-1)
Fsi
FIN
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.
La récursivité
• Simple
Procedure recursive ()
DEBUT
…
recursive ()
…
FIN
• Croisée
Procedure recursive1 ()
DEBUT
…
Recursive2 ()
…
FIN
Procedure recursive2 ()
DEBUT
…
recursive1 ()
…
FIN
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
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 ?
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 ?
Factorielle
• Version 3
Fonction factorielle (n: entier) : entier
DEBUT
Si n = 0
Alors retourne 1
Sinon
retourne n*fact(n-1)
Fsi
FIN
Factorielle en PHP
<?php
function factorielle($nbre)
{
if($nbre == 0)
{
return 1;
}
else
{
return $nbre*factorielle($nbre-1);
}
}
echo factorielle(5);
?>

algorithmique_PHP_2 (1).pptxalgorithmique_PHP_2 (1).pptx

  • 1.
  • 2.
  • 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 » https:// openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/preparer-s on-environnement-de-travail • Mais pour s ’exercer simplement sur des programmes simples, on peut utiliser http://sandbox.onlinephpfunctions.com/
  • 4.
    Contenu • Sous-programmes • Structures,enregistrement, table • Fichiers
  • 5.
  • 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 estun (sous-)programme • Qui porte un nom • A des paramètres en entrées • Retourne une valeur
  • 8.
    Définition d’une fonctionen 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 fonctionen 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 fonctionen 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 PROGRAMMEToto 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 estun (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édureen 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 PROGRAMMEToto 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 passagede 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 : • 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é desvariables • 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 VARGLOBALES c: réél Procédure somme (E a: réel, E b : réel) VAR DEBUT c  a + b FIN PROGRAMME Essai VAR x, y : réel DEBUT Lire(x,y) Somme (x,y) Ecrire c FIN
  • 19.
    En PHP <?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 <?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 : 100 3_Après passage par référence : 119
  • 21.
    Fonctions prédéfinies enPHP • 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: http://php.net/manual/ fr/indexes.functions.php
  • 22.
    Les structures Un exemplede type construit à partir des types de base.
  • 23.
    Les structures- Exemple Type StructureEtudiant no-etudiant : chaîne nom: chaîne année_inscription : chaîne adresse : chaîne FinStruct … etudiant 1 etudiant 2 etudiant n no-etudiant nom annee_inscription adresse n enregistrements de structure ‘’Etudiant’’ Structure des enregistrements 12 Alfred 2017 Cite Haute Malgrange
  • 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 • Notion d’enregistrement Un enregistrement est une variable d’un type structuré de donnée. VAR nom-enregistrement : nom de type Exemple: etudiant1, etudiant2: Etudiant
  • 26.
    Les structures- Utilisation Type Structurenom-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 dansles 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 typeconstruit : 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 tablesen 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 typesde structure : <?php class tfabricant { public $ref; public $nom; public $adresse; public $tel; } class tarticle { public $ref; 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.
    <?php class tfabricant { public$ref; public $nom; public $adresse; public $tel; } class tarticle { public $ref; public $libelle; public $prix; public $fab; } $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 "<br />"; echo $article[1]->ref; echo "<br />"; echo $article[1]->fab->ref; echo "<br />"; ?> Une table d’article
  • 32.
    <?php class tfabricant { public$ref; public $nom; public $adresse; public $tel; } class tarticle { public $ref; public $libelle; public $prix; public $fab; } 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 "<br />"; echo $article[1]->ref; echo "<br />"; echo $article[1]->fab->ref; ?> Une table d’article
  • 33.
  • 34.
    Objectif • Assurer lapersistance 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 • Ouvrirun 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’unprogramme de traitement d’un fichier 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) 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
  • 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) Mode: 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]) 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’enregistrementsen 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.
  • 48.
  • 49.
  • 50.
    Algorithmique sur lestableaux • 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 PROGRAMMERecherche 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émenten 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); 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. <?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.
  • 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é • Unefonction (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é • Simple Procedurerecursive () DEBUT … recursive () … FIN • Croisée Procedure recursive1 () DEBUT … Recursive2 () … FIN Procedure recursive2 () DEBUT … recursive1 () … FIN
  • 57.
    Exemple : calculd’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 : calculd’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 Fonctionfactorielle (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 Fonctionfactorielle (n: entier) : entier DEBUT Si n = 0 Alors retourne 1 Sinon retourne n*fact(n-1) Fsi FIN
  • 61.
    La récursivité • Unefonction (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é • Simple Procedurerecursive () DEBUT … recursive () … FIN • Croisée Procedure recursive1 () DEBUT … Recursive2 () … FIN Procedure recursive2 () DEBUT … recursive1 () … FIN
  • 63.
    Exemple : calculd’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 : calculd’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 Fonctionfactorielle (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 Fonctionfactorielle (n: entier) : entier DEBUT Si n = 0 Alors retourne 1 Sinon retourne n*fact(n-1) Fsi FIN
  • 67.
    Factorielle en PHP <?php functionfactorielle($nbre) { if($nbre == 0) { return 1; } else { return $nbre*factorielle($nbre-1); } } echo factorielle(5); ?>