Home

Télécharger

image

Contents

1. ENI Editions All rigths reserved Type Structure tEcran type cha ne marque cha ne mod le cha ne diagonale entier hauteur re el largeur re l profondeur reel poids reel connecteur cha ne resolution tableau 1 10 de cha nes FinStruct Proc dure changer_resolution Proc dure mise_en_veille Proc dure rallumer Proc dure regler_affichage C est correct possible vous devrez probablement jouer avec les pointeurs et r f rences pour le passage de la structure donc pourquoi pas Des milliers de programmes ont t d velopp s ainsi Posez vous cependant la question pourquoi ne pas associer les propri t s d un objet et les traitements associ s en un m me ensemble Programmation objet Quand vous programmez en objet la question se poser est Sur quoi porte le programme La r ponse est sur les crans Puisque le programme porte sur les crans pourquoi ne pas tenter de r pondre la question pos e la fin du point pr c dent La r ponse est pourquoi pas et c est le but ou l un des buts de la programmation objet En langage proc dural ou en algorithmique une structure est d j appel e un objet dans un certain nombre d ouvrages d algorithmique un peu anciens ann es 1980 dans le sens o elle contient un ensemble de donn es coh rentes sur un sujet bien pr cis La structure tarticle contenait toutes les propri t s d un article Vous acc dez une infor
2. ENI Editions All rigths reserved Le contraire de a est VRAI seulement si a est FAUX Vous avez d j rencontr le contraire avec l op rateur NON Le contraire est not comme ceci J e non a e NOT selon les langages de programmation Ainsi il suffit de retenir que 1 0 et que 0 1 Par la suite ce sont les formes ou qui seront utilis es selon le cas ex pour non non a f Les propri t s L associativit Elle est identique l alg bre classique Dans certains cas les parenth ses sont inutiles Ainsi a b c a b c a b c Et encore a b c a b c a b c La commutativit Elle indique que l ordre des variables logiques n a aucune importance a b b a Et encore a b b a La distributivit Attention cette fois il y a une diff rence importante par rapport l alg bre classique et la distribution li e aux op rateurs et C est la raison pour laquelle il a t expliqu qu il ne fallait pas les confondre avec les symboles logiques En effet si a b c a b a c est identique a b c a b a c ne l est pas du tout mais est parfaitement correct en alg bre de Boole L idempotence L idempotence signifie que si on applique la m me op ration une ou plusieurs fois alors on retrouve toujours le m me r sultat Par exemple 3 1 vaut toujours 3 m me si vous divisez n fois par 1 Cette propri t s applique aux deux op rateurs Ainsi a a a a a a
3. public function retour if echo retour lt br gt public function precedent echo Pr c dent lt br gt public function suivant echo Suivant lt br gt ol new Musique Somebody to love 10 ol gt lecture gt lt body gt lt html gt Une classe peut impl menter plusieurs interfaces Dans ce cas s parez les noms des interfaces par des virgules Une interface peut h riter d une ou plusieurs autres interfaces via le mot cl extends suivi du nom de la ou des interfaces h rit es interface lecturel public function lecture public function pause public function stop interface lecture2 public function avance public function retour public function precedent interface lecture extends lecturel lecture2 public function suivant Ces deux derniers cas sont les seuls en PHP o indirectement une sorte d h ritage multiple a t mis en place dans le sens o une classe peut h riter de plusieurs d finitions de m thodes C est simpliste dans le sens o de toute fa on ces m thodes doivent tre impl ment es obligatoirement dans la classe qui utilise les interfaces et qu ainsi PHP n a pas savoir s il doit utiliser telle ou telle m thode de l une des classes h rit es ENI Editions All rigths reserved
4. R p ter Bloc d instracti ns Jusqu bool en Le R p ter ressemble fortement au Tant que avec cependant deux importantes diff rences e Quoi qu il arrive il y aura toujours au moins un passage dans la boucle le bloc d instructions sera ex cut au moins une fois e L expression bool enne finale est invers e Un tant que a 1 devient un jusqu a 1 Le jusqu se comprend comme jusqu ce que la condition soit v rifi e Pour faire une boucle infinie il faut donc faire R p ter Bloc d instructions Jusqu FAUX Pour reprendre l algorithme de saisie du relev de notes qui avait pos quelques probl mes celui ci devient un peu plus simple PROGRAMME REPETE VAR Note entier D but R p ter Ecrire Saisissez une note Lire note Si note lt 1 OU note gt 20 Alors R p ter Ecrire Erreur 0 gt 20 1 sortie Lire note Jusqu note gt 1 ET note lt 20 Fins Si note 1 Alors FinsSI Jusqu note 1 Fin Le langage PHP propose une structure r p ter Tant Que Il suffit donc uniquement d inverser la condition de sortie du jusqu do bloc d instructions while condition Le programme PHP avec quelques facilit s pourrait tre lt php do echo Note lt l sortie note fgets STDIN if note gt 20 ENI Editions All rigths reserved echo Erreur nouvelle saisie continue if note gt 1 echo note Jwhile note
5. droite la valeur Vous trouverez aussi dans certaines repr sentations algorithmiques le issu du Pascal Les deux sont quivalents et utilisables mais vitez de les m langer pour s y retrouver Voici quelques exemples d affectations en pseudo code PROGRAMME AFFECTATION VAR atentier b c r els titre cha ne vrai bool en DEBUT a 10 b 3 1415927 c 12345 titre ma premi re affectation vrai TRUE FIN Vous avez videmment rencontr dans les programmes PHP pr c dents comment affecter une valeur une variable C est le signe qui est utilis L emploi du signe en pseudo code n a pas la m me signification ce que vous verrez un peu plus loin dans les op rateurs de comparaison Attention cependant ne pas vous tromper entre le type de la variable et la valeur que vous lui affectez C est une ENI Editions All rigths reserved cause d erreur fr quente tant en pseudo code algorithmique que dans un vrai langage Dans certains cas cela pourra marcher dans le sens o l ordinateur ne retournera pas forc ment une erreur mais le r sultat ne sera pas celui attendu Consid rez l exemple pas correct suivant PROGRAMME AFFECT2 VAR a entier b r el c cha ne DEBUT b 3 1415927 a 3 1415927 c 12345 FIN L ex cution de ce pseudo code provoque quelques surprises et des erreurs Tout d abord b re oit la valeur de PI et comme b est d clar en r el pour l exemple le type classique Num rique n a
6. lt html gt lt head gt lt meta gt lt title gt Heritage en PHP lt title gt lt head gt lt body gt lt php abstract class figure protected x y surface perimetre protected c_contour c_remp const P1 3 1415927 function figure cl c2 this gt setcolor_c cl this gt setcolor_r c2 public function setcolor_c couleur Sthis gt c_contour couleur public function setcolor_r couleur this gt c_remp couleur abstract public function getSurface abstract public function getPerimetre class disque extends figure private rayon 0 constructeur function disque c_x c_y r parent __construct noir blanc Sthis gt x c_x Sthis gt y S Sc_y Sthis gt rayon r impl mentation des m thodes abstraites public function getSurface return self PI Sthis gt rayon this gt rayon public function getPerimetre return 2 self PI this gt rayon ENI Editions All rigths reserved class rectangle extends figure private largeur hauteur constructeur function rectangle c_x c_y r_l r_h parent __construct violet marron Sthis gt x c_ x Sthis gt y c_y this gt largeur r_l this gt hauteur r_h impl mentation des m thodes abstraites public function getSurface return this gt largeur this gt hauteur public function getPerimetre return 2 this gt largeur this gt hauteur Sol n
7. 0 i p 2 i x int fgets STDIN 1 echo Cocrdonnees yTy y int fgets STDIN 1 while x lt 0 x gt 2 y lt 0 pl x y pion ligne i 0 while i lt 3 amp amp gagne if p i 0 amp amp p i 0 i 0 p i 2 gagne true Sitt colonne i 0 while i lt 3 amp 8 amp gagne y gt 2 I p x y p i 1 amp amp if p 0 i amp amp p 0 i p 1 i amp amp Sitt deux diagonales if p 1 1 amp amp Sgagne true p 0 0 p 1 1 amp amp p 0 0 p 2 2 plO 2 pl1 11 amp amp p 0 2 p 2 0 Sgagne true nbtours 1 Jwhile S Sgagne amp amp nbtours 9 plateau echo 11 27 33 n x for i 0 i lt 3 S Sit cho SIFT J 1 SpLS1 0 MMS SRTSEI CII MIT SPESLT 214 INA if gagne echo pion gagne else cho Personne ne gagne pu r ENI Editions All rigths reserved Algorithmes avanc s 1 Les algorithmes des tris a Le principe Vous avez pu voir dans les exemples pr c dents l int r t des tableaux pour le stockage de valeurs multiples Mais suivant le cas il peut tre utile d avoir besoin d obtenir une liste ordonn e de valeurs par ordre croissant ou d croissant Autrement dit vous voulez trier le contenu du tableau Prenez le cas d un professeur souhaitant trier les notes de ses l ves de la
8. clater les expressions bool ennes Application dans l algorithme En algorithmique l expression bool enne pr c dente serait traduite ainsi dans un test PROGRAMME TELEPHONE VAR a b c d bool ens DEBUT a VRAI b VRAI c FAUX Si NON a ET b OU a ET c Alors d VRAI Sinon d FAUX FinSi Si d VRAI Alors Afficher Je d croche Sinon Afficher Je ne d croche pas Finsi FIN De mani re plus simple rien n emp che de faire ceci ENI Editions All rigths reserved PROGRAMME TEL2 VAR a b c d bool ens DEBUT a VRAI b VRAI c FAUX d NON a ET b OU a ET c Si d Alors Afficher Je d croche Sinon Afficher Je ne d croche pas Pinsi FIN Le Si d quivaut Si d VRAI 5 Une derni re pr cision Avec les conditions suivantes S il fait chaud et qu il ne pleut pas alors je vais me promener vous aurez parfois la tentation de faire ceci PROGRAMME CHAUD VAR chaud pleuvoir bool ens DEBUT chaud VRAI pleuvoir FAUX Si chaud VRAI Alors Si pleuvoir FAUX Alors Afficher Je me prom ne Sinon Afficher Je rentre FinsSI Sinon Afficher Je rentre FinsSI Fin C est possible cela marche mais ce n est pas tr s beau Deux tests deux conditions et une r p tition inutile Pourquoi ne pas faire ceci PROGRAMME CHAUDMIEUX VAR chaud pleuvoir bool ens FIN chaud VRAI pleuvoir FAUX Si chaud VRAI ET pleuvoir FAUX Alors Afficher Je me prom ne Sinon Afficher Je rentre F
9. Programme ob j8 Var Appel implicite Ecran ol Ecran Appel implicite Ecran t mq mdl o2 Ecran LCD LG 2019158 D but ol affiche_mod le INCONNU o2 affiche_mod le L1915S Fin l ex cution sans avoir rien demand les deux messages au sein des constructeurs sont affich s les attributs disposent d j de valeurs plac es l par les constructeurs Avec une allocation dynamique c est pareil Programme obj9 Var p_oEcran pointeur sur Ecran D but p_oEcran nouveau Ecran LCD LG L1915S p_oEcran gt affiche mod le 119155 Fin c L h ritage Que se passe t il lorsque vous instanciez un objet d une classe d riv e e Si la classe d riv e n a pas de constructeur c est celui de la superclasse qui est appel si c est possible param tres identiques par exemple e Si la classe d riv e dispose d un constructeur c est lui qui est appel e Par d faut si le constructeur d une classe d riv e est pr sent le constructeur de la superclasse n est pas appel C est vous d y faire appel explicitement Classe A Constructeur Al D but Afficher Je suis A Fin FinClasse Classe B h rite de A Constructeur Bi D but Afficher Je suis B Fin FinClasse Programme ob j10 Var ol A o2 B D but ENI Editions All rigths reserved Fin Le programme obj10 cr e deux objets et donne l affichage suivant Je suis A Je suis B Pour appeler explicitem
10. for i 0 i lt count t i total count t i calcul nb total d elements echo count t Si lt br gt ENI Editions All rigths reserved echo total cho lt br gt seconde possibilit Stotal 0 foreach t as key total t count key calcul nb total d elements echo count key lt br gt echo total gt lt body gt lt html gt 3 Repr sentation en m moire a Repr sentation lin aire En principe les l ments d un tableau sont plac s dans des cases contigu s en m moire Si vous prenez un tableau de dix nombres il pourrait tre repr sent ainsi 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 C a e a a Ru E W a La case est le num ro de la case m moire l indice le num ro dans le tableau et la valeur la note associ e l indice Une constatation s impose d elle m me les num ros des cases m moire les adresses n ont pas de rapport avec l indice mis part le fait qu ils sont contigus Autant se repr senter un tableau de scalaires une dimension un seul indice en m moire est simple autant se repr senter deux ou n dimensions devient un peu moins vident d autant plus que cette repr sentation peut varier d un langage un autre Comme le nombre maximal d indices est connu l avance dans le cas du pseudo code algorithmique un tableau deux dimensions peut tre facilement transpos en tableau une se
11. lt php cpt 1 while cpt lt 10 echo cpt lt br gt Scpt 2 gt lt body gt lt html gt 2 Boucles infinies et break Faites toujours bien attention ce que votre boucle dispose d une condition de sortie En effet rien ne vous emp che de faire des boucles infinies Dans le cas d une structure it rative Tant Que il suffit que la condition soit toujours VRAIE par exemple ENI Editions All rigths reserved Tant que VRAI Faire FinTantQue Ou encore Tant que a a FinTantQue En PHP cela se traduit par while true Dans les deux cas l expression bool enne est toujours vraie donc le programme ne sort jamais de la boucle La plupart des langages C C Java PHP etc proposent des instructions sp ciales qui permettent de sortir d une boucle depuis n importe quel endroit du bloc d instructions instruction break ou m me de relancer la boucle remonter directement au Tant Que sans ex cuter le reste des instructions instruction continue L une des premi res choses que vous devez apprendre en algorithmique avec les boucles c est que sans vouloir para tre excessif l utilisation de break et de l instruction continue est tr s d conseill e de nombreux programmeurs et pas forc ment en herbe pars ment l int rieur de leurs boucles de conditions de sorties suppl mentaires qu ils nomment souvent des cas sp ciaux je n ai pas pr vu de g rer cela dans un cas g n ral alors je
12. printf Longueur d n n La boucle est extr mement d taill e mais il est possible de faire bien plus court for n 0 p_c 0 p_ c n 2 En C chaque l ment d un tableau est en fait un pointeur sur l adresse m moire contenant cet l ment Ce qui veut dire que chaine contient l adresse du premier l ment et que chaine contient le premier l ment chaine 1 l adresse du second l ment et chaine 1 son contenu etc Aussi p_c amp chaine 0 aurait pu s crire p_c chaine Voyez vous maintenant l int r t des pointeurs Bien que cette notion soit assez complexe elle permet de simplifier fortement les traitements sur les tableaux les passages et la r cup ration de valeurs et structures complexes 3 Notation algorithmique a D clarer et utiliser les pointeurs L algorithmique autorise bien entendu l utilisation des pointeurs Vous d clarez un pointeur comme n importe quelle variable et au m me endroit sous le mot cl VAR nom pointeur sur type point Par convention les pointeurs commencent par la lettre p Ce n est pas une obligation mais vous vous y retrouverez beaucoup mieux si vous suivez cette recommandation Comme vu pr c demment le type point doit tre du m me type que la variable point e Si vous cr ez un pointeur sur un entier le pointeur sera de type entier il pointe sur un entier Var txt cha ne ptxt pointeur sur cha ne cpt entier pint pointeur sur entier Le pointeu
13. Classe cheval h rite de herbivore FinClasse Classe vache h rite de herbivore FinClasse ENI Editions All rigths reserved 10 Vous pouvez faire de m me avec les carnivores lion chien et les omnivores l homme le singe Vous constituez donc un ensemble de classes d riv es de plus en plus sp cialis es Dans une classe d riv e vous avez un acc s direct aux membres tant les attributs que les m thodes de toutes les superclasses d origine en cascade Donc ceci est correct partant du principe que omnivore d rive de animal vous pouvez appeler la m thode modifie_ordre de la superclasse animal Programme obj4 Var 0o3 herbivore D but 03 modifie ordre mammif re Fin Rappelez vous cependant que l acc s aux attributs d pend de leur protection Si les attributs de la superclasse sont priv s une classe d riv e ne peut pas y acc der directement Si elle est prot g e ou publique c est possible b Commerce L avantage est de taille tel point qu il existe pour des langages comme C PHP ou Java des diteurs de logiciels sp cialis s dans la vente de classes regroup es sous forme de biblioth ques Il existe donc un commerce d objets et comme les classes sont des moules r utilisables volont tout le monde y trouve son compte Vous trouverez ces produits sous le nom d API Application Programming Interface Il existe des API pour peu pr s tous les domaines de l informatique telle API p
14. ENI Editions All rigths reserved nbl1 x 100 y 10 z nb2 pow x 3 pow y 3 pow z 3 if nbl nb2 echo nbl nb2 x y z lt br gt gt lt body gt lt html gt b La factorielle Encore un classique avec une factorielle de n vous savez l avance le nombre d it rations n cessaire n C est donc une application de choix pour la structure Pour Fin Pour Variables cpt i resultat en Num rique D but Ecrire Quelle factorielle Lire cpt resultatel Pour i de 2 cpt resultat i resultat Fin Pour Ecrire resultat Fin En PHP lt html gt lt head gt lt meta gt lt title gt Factorielle 3 lt title gt lt head gt lt body gt lt php if lisset _GET cpt S lt form method GET gt Factorielle de lt input type text size 4 name cpt gt lt input type submit name 0K gt lt form gt lt php else cpt _GET cpt resultat 1 for i 2 i lt cpt i resultat resultat i echo resultat 2 gt lt body gt lt html gt c Racine carr e avec pr cision Voici une innovation le calcul d une racine carr e Savez vous extraire une racine carr e la main Avant l apparition des calculatrices les lyc ens et tudiants utilisaient soit des tables ou des r gles calcul soit les calculaient eux m mes Il serait possible de d crire la m thode utilis e mais il manque encore quelques notions Une m th
15. FinPour Pour i de 1 10 Faire Ecrire noteli FinPour FIN f Les tableaux dynamiques Si vous ne connaissez pas par avance le nombre d l ments de votre tableau vous avez deux possibilit s e Fixer un nombre d l ments suffisamment grand l avance pour tre s r d en avoir assez e Ou alors meilleure solution redimensionner votre tableau la bonne taille d s que le nombre d l ments vous est connu Il existe en pseudo code algorithmique une instruction appel e Redim qui permet de redimensionner un tableau dont le nombre d l ments n est pas connu l avance Cependant il est souvent conseill d viter de l utiliser Cette instruction trouve son utilit dans le fait qu en pseudo code les variables et les tableaux sont d clar s avant le programme ce qui induit l impossibilit d initialiser le nombre d l ments d un tableau suivant la valeur d une variable Cependant les langages comme Java disposent de m canismes permettant de d clarer des tableaux sans forc ment conna tre leur taille l avance Si vous devez utiliser des tableaux dynamiques alors vous ne devez pas indiquer de nombres d l ments dans la d claration Cela sera fait dans l instruction de redimensionnement PROGRAMME REDIM VAR Elements tableaul d entiers Nb entier DEBUT Ecrire Combien d l ments 7 Lire nb Redim elements 1l nb 1 FIN ENI Editions All rigths reserved Vous ne pouvez pas redimensionner un tab
16. Jusqu pr sent le seul moyen dont vous disposiez tait de faire une boucle de saisie de notes et dedans de tenter de faire les calculs au fur et mesure L autre possibilit tait de poser n fois la m me question et de placer les r sultats dans n variables diff rentes Imaginez ceci Lire N1 Lire N2 Lire N20 OY NI N2 N20 20 Ridicule n est ce pas Maintenant si vous savez qu il y a vingt l ves dans une classe et donc vingt notes saisir ne serait il pas plus simple de remplacer toutes les variables par une seule mais qui pourrait contenir toutes les notes L id e serait donc d avoir un nom de variable mais qui pourrait associer une note un num ro Prenez la variable note Il suffirait alors de dire que note 1 vaut 15 note 2 vaut 17 note 3 vaut 8 etc Un ensemble de valeurs repr sent par le m me nom de variable et o chaque valeur est identifi e par un num ro s appelle un tableau Le num ro qui sert identifier un l ment une valeur du tableau s appelle un indice En repr sentation algorithmique un l ment du tableau est repr sent par le nom de la variable auquel on accole l indice entre crochets Notel 1 15 Un tableau n est pas un type de donn es mais une liste d l ments d un type donn On parlera d un tableau de n l ments de type num rique ou alphanum rique etc b Les dimensions Faites courir un peu plus votre imagination maintenant vous avez trois clas
17. couleur remplissage surface r el p rim tre r el m thodes publiques Proc dure setcolor_c E couleur cha ne D but this c_contour couleur Fin Fonction abstraite getSurface reel Fonction abstraite getPerim tre reel FinClasse ENI Editions All rigths reserved partir du moment o une classe contient une m thode abstraite elle est elle m me abstraite La classe figure est abstraite elle contient des m thodes abstraites sans impl mentation Elle contient aussi des m thodes qui ne sont pas abstraites comme setcolor_c qui n aura pas forc ment tre r i mpl ment e dans les classes d riv es Il est de ce fait impossible de cr er un objet de type figure Vous devez maintenant cr er les classes qui en h ritent Voici deux exemples simplifi s de classes disque et rectangle Vous devez impl menter dedans les m thodes abstraites de la superclasse O Note importante vous tes oblig d impl menter dans la classe d riv e les m thodes abstraites de la superclasse Si vous ne souhaitez pas le faire vous devez de nouveau d clarer la m thode comme abstraite et la classe d riv e sera elle m me abstraite Classe disque h rite de figure attributs priv s rayon r el m thodes publiques Constructeur disque c_x c_y r D but this x c_x this y c_y this rayon r Fin Fonction getSurface r el D but Retourne PI this rayon this rayon FinFonc Fonction getPerim tre r el D but
18. dans un fichier Oo Attention si la notation algorithmique permet la lecture et l criture d enregistrements de types structur s dans un fichier ce n est pas le cas de tous les langages Si le COBOL le fait tr s bien ce n est pas le cas de tous les autres comme le C ou Java tout au moins tel que pr sent ici Ne serait ce parce que dans ces langages les longueurs des cha nes sont variables et les nombres repr sent s sous forme binaire vous devriez soit utiliser un fichier binaire soit tout transformer en cha ne et justifier ces derni res la longueur voulue Pour utiliser des enregistrements structur s vous devez pr ciser la taille exacte de chaque champ composant le type structur Type Structure enrpwd login cha ne de 8 caract res pwd cha ne de 1 caract re uid cha ne de 5 caract res gid cha ne de 5 caract res cmt cha ne de 15 caract res home cha ne de 15 caract res shell cha ne de 15 caract res FinStruct La d claration d un enregistrement ou d un tableau d enregistrements et l affectation de valeurs aux champs sont expliqu es dans la partie du chapitre Les tableaux et structures qui leur est consacr e Pour le reste la lecture et l criture d un enregistrement fonctionnent l identique des enregistrements simples compos s la main Les m mes fonctions sont utilis es La nuance importante est que tous les champs sont crits d un coup et lus d un coup e Ecrire va ajouter u
19. gt lt br gt mois lt input type text size 4 name mois gt lt br gt annee lt input type text size 4 name annee gt lt br gt lt input type submit name OK gt lt br gt lt form gt lt php else jour _GET jour mois _GET mois l l Sannee _GET annee l switch mois case l case 3 case 5 case 7 case 8 case 10 if jour 31 jour 1 ENI Editions All rigths reserved mois else jour break case 4 case 6 case J case 11 if jour 30 Sjour 1 mois else jour break case 2 if annee 4 0 amp amp annee 400 0 annee 100 gt 0 if jour 29 jour 1 Smois else jour ri else if jour 28 jour 1 mois else jour break case 12 if jour 31 jour 1 Smois 1 Sannee else jour echo Demain est le jour mois S Sannee gt lt body gt lt html gt b La validit d une date Les calculs de dates sont une source in puisable d algorithmes Sauriez vous par exemple vous inspirer de l algorithme ci dessus pour tester la validit d une date rentr e au clavier Il suffit pour chaque mois de v rifier si le jour entr est correct le pi ge tant comme ci dessus pour les ann es bissextiles et le mois de f vrier L algorithme ci dessous introduit une nouveaut la pr sence d un drapeau qu on appelle flag en anglais ou
20. l ment existe dans la liste et retourne un bool en vrai ou faux selon que l l ment est trouv ou non C est donc une fonction Le second retourne l adresse de l l ment trouv et l adresse de l l ment pr c dent vous verrez pourquoi ensuite C est donc une proc dure car une fonction ne peut retourner deux valeurs Mais pourquoi ne pas faire d une pierre deux coups c est dire un sous programme qui va la fois retourner vrai ou faux mais aussi des pointeurs sur l l ment courant et pr c dent C est possible car vous pouvez passer des pointeurs comme arguments de fonctions modifier l adresse sur laquelle ils pointent et retourner tout de m me un bool en En fait il est quasiment inutile de retourner un bool en car de toute fa on si l l ment n est pas trouv pEncours vaudra NIL en sortie de fonction La proc dure recherche_liste prend quatre param tres e La valeur v recherch e e Un pointeur pTete sur la t te de la liste e Un pointeur pPrec sur l l ment pr c dent celui trouv e Un pointeur pEncours sur l l ment trouv e Un bool en vrai ou faux e Sil l ment est trouv pPrec pointe sur celui d avant pEncours sur l l ment trouv e Sil l ment est absent pEncours vaut NIL et pPrec pointe sur le dernier l ment de la liste e Si pPrec vaut NIL l l ment recherch est le premier de la liste Proc dure recherche _ liste E v entier E pTete ES pPrec pEncours point
21. t array 2 7 9 10 11 14 17 18 20 22 ENI Editions All rigths reserved rech 14 d 0 Sf dountt t 1 do m int d f 2 echo d d f f m m t m t m lt br gt if rech gt t m d m 1 else f m 1 while d lt f amp amp rech t m if rech t m echo rech trouv la position m else echo rech n a pas t trouv gt lt body gt lt html gt ENI Editions All rigths reserved Structures et enregistrements 1 Principe Les tableaux sont certes tr s pratiques mais ils ne permettent pas toujours de r pondre efficacement tous les besoins de stockage Un tableau est une structure de donn es dont tous les l ments sont de m me type Que faire quand vous avez besoin de placer dans une structure de type tableau des enregistrements de types diff rents Comme exemple concret prenez un catalogue de produits dans un magasin sp cialis Un article est d crit l aide d une r f rence un nom libell et un prix Les deux premiers sont des cha nes de caract res le dernier un nombre r el Comment se repr senter cela avec des tableaux Il faudrait trois tableaux un pour les r f rences un autre pour les libell s et un troisi me pour les prix L indice de l article devrait tre identique pour les trois tableaux C est possible faisable mais en pratique totalement ing rable d s qu il s agit d aller un peu plus loin que de simples traitem
22. 60 secondes secondes 60 heures heures minutes 60 minuteseminutes 60 jours heures 24 o heures heures 24 Afficher jours heures minutes secondes FIN Alors Dans un premier temps additionnez les secondes 147 12 159 12 ENI Editions All rigths reserved L impl mentation en PHP ne n cessite pas de commentaires particuliers L affichage final est juste un peu plus agr able lt html gt lt head gt lt meta gt lt title gt calcul d heures lt title gt lt head gt lt body gt lt php if lisset _GET nbsec 2 gt lt form method GET gt nb de secondes ajouter lt input type text size 4 name nbsec gt lt br gt lt input type submit name OK gt lt form gt lt php else heures 17 minutes 55 secondes 48 nbsec GET nbsec l secondes nbsec Sminutes int Ssecondes 60 secondes secondess 60 heures int minutes 60 minutes minutes 60 jours int heures 24 heures heures 24 echo jours heures minutes secondes gt lt body gt lt html gt Les tests pour optimiser tes vous surpris par la forme que rev t cet algorithme Probablement car il n y a aucun test d effectu La question se pose sont ils dans ce cas vraiment n cessaires La r ponse ne coule pas de source Rappelez vous qu il ne suffit pas qu un algorithme fonctionne mais qu il fonctionne vite bien et qu il
23. All rigths reserved Introduction Pourquoi apprendre programmer Avez vous comme l auteur dispos au d but de la micro informatique d un ordinateur o il fallait programmer soi m me des jeux ou outils ou saisir des dizaines de pages de lignes de programmation Avez vous besoin durant vos tudes de ma triser les techniques fondamentales de programmation pour passer votre dipl me Etes vous un professionnel ou un autodidacte passionn qui veut encore en savoir davantage Est ce une nouvelle tape de votre carri re professionnelle o n tant pas informaticien vous tes amen programmer des macros ou des scripts complexes Quelle raison encore trouver Si vous r pondez oui l une des ces questions mais aussi aux dizaines d autres qu il serait possible de poser alors oui vous devez apprendre programmer Apprendre programmer c est enfin savoir comment font les autres pour cr er de superbes logiciels c est savoir terme comment les cr er soi m me et les d velopper Comment apprendre programmer On ne s improvise pas programmeur C est un m tier et comme tout m tier cela s apprend Dans les coles des professeurs enseignants pour des classes de BTS DUT DEUG classes pr paratoires etc sont sp cialis s dans l apprentissage des notions fondamentales de programmation Les autodidactes se plongent dans des livres des sites Internet dans la documentation en ligne des langages pour apprendre ces
24. Classe animal attributs priv s forme cha ne ordre cha ne m thodes publiques Proc dure modifie ordre E ordre cha ne FinClasse Le r gne animal est complexe et pourra t tre divis en norm ment de choses vert br s invert br s mammif res insectes ou encore herbivores carnivores ou omnivores Ces trois derniers sont la base tous des animaux des classes de ce genre d rivent de la classe animal Pour d clarer une classe qui d rive d une autre respectez la syntaxe suivante Classe maClasse h rite de Superclasse attributs m thodes FinClasse Pour d finir les classes herbivores carnivores ou omnivores vous h ritez des propri t s de base du sous r gne animal associ Classe herbivore h rite de animal FinClasse Classe carnivore h rite de animal FinClasse Classe omnivore h rite de animal FinClasse Avec l h ritage vous pouvez concevoir des classes de plus en plus sp cialis es De m me si vous devez concevoir des classes dont les propri t s sont tr s proches plut t que de tout reprogrammer depuis z ro vous pouvez concevoir une classe de base la superclasse et cr er deux classes qui h ritent de celle ci Donnez un ou deux noms d animaux dans chaque cat gorie La vache est herbivore le cheval aussi Les deux n ont pas le m me r gime et pas le m me nombre d estomacs Vous pouvez les diff rencier dans deux classes diff rentes qui d rivent de la classe herbivore
25. Contenu s 111 110 106 111 117 114 CS Cette br ve tude met en vidence deux probl mes e Dans un tableau une seule dimension il n est pas vident de repr senter les indices des cha nes de caract res Une astuce pourrait consister rechercher les caract res nuls 0 pour retrouver les indices suivants le caract re suivant est le premier de la cha ne d indice 1 Mais e La longueur d une cha ne de caract res n tant pas fixe comment r server l avance l espace contigu n cessaire au stockage de n cha nes dans un tableau de n l ments Vous pourriez videmment contourner ce probl me en d cr tant de mani re totalement arbitraire que les cha nes de caract res stock es dans votre tableau ont une longueur fixe Mais quelle perte de place si votre cha ne ne fait que deux caract res pour deux cents r serv s Ce n est pas une solution retenir Pour cr er des tableaux n dimensions quelques langages et non des moindres utilisent une autre m thode Pour plus de clart le mieux est de comprendre le principe tout d abord avec un tableau une dimension puis deux Une cha ne d une longueur de n caract res est en fait bien souvent un tableau une dimension comportant n 1 indices sachant que le dernier indice contiendra un caract re nul Chaque l ment du tableau est le code ASCII ou unicode correspondant au caract re de la position indice donn e Ainsi les variables de type Alphanum riqu
26. D but Attributs priv s acc s depuis l ext rieur interdit ol type LCD INTERDIT xxx Acc s direct aux attributs Afficher ol type INTERDIT xxx M thodes publiques acc s autoris ol saisie mod le Multisync FE1250 ol affiche mod le Fin Il existe un troisi me type d acc s l acc s prot g Il est particulier et vous le reverrez plus loin lorsque la notion d h ritage sera abord e Un membre prot g est consid r comme priv pour les autres objets ind pendants car il n est pas accessible depuis ceux ci mais comme public au sein de l objet et des objets qui en d rivent ENI Editions All rigths reserved 8 Encapsulation des donn es Les membres peuvent tre publics ou priv s La structure interne d un objet comporte un certain nombre d attributs et de m thodes qui lui sont propres qui refl tent sa structure interne Des attributs et m thodes de l objet ne sont utiles que pour d autres m thodes et donc ne doivent pas tre accessibles depuis l ext rieur de l objet De m me afin de laisser un seul point d entr e aux divers attributs vous ne devriez pas permettre l acc s ceux ci la fois directement et par des m thodes Une bonne pratique consiste interdire l acc s public aux attributs Seules les m thodes y acc dent et si vous voulez les manipuler vous d finissez des m thodes publiques pour cela Vous vitez ainsi que le programmeur manipule directement l
27. Un syst me Linux un serveur Web Apache un serveur de bases de donn es MySQL et un interpr teur PHP La version 5 de PHP permet de fonctionner avec IIS et MySQL existe aussi pour Windows On peut donc utiliser une architecture WIMP Windows IIS MySQL PHP ou WAMP Windows Apache MySQL PHP Les distributions Linux disposent d j du n cessaire pour l architecture LAMP et le param trage est assez simple De plus le mode user_mod de Apache permet chaque utilisateur de cr er son site web dans un r pertoire sp cifique de son r pertoire personnel Vous vous reporterez la documentation sp cifique de votre installation pour savoir o placer vos scripts PHP afin de les tester Sous Linux c est g n ralement dans var www htdocs ou srv www htdocs ou encore dans le r pertoire public_html de votre r pertoire personnel Sous Windows c est un peu plus complexe mettre en uvre manuellement On emploie donc des distributions toutes faites les meilleures se nomment EasyPHP et XAMPP Elles proposent une interface graphique permettant de contr ler le d marrage des composants PHP Apache etc On peut ainsi d velopper son site sous Windows et le porter tel quel sur un serveur Unix Notez que XAMPP existe pour Windows Linux MacOS et Solaris Vous trouverez ces produits aux adresses suivantes e XAMPP http www apachefriends org fr xampp html e EasyPHP http www easyphp org Pour d velopper il suffit d un simp
28. d finis de chaque langage pour d couper une sous cha ne de caract res quivalent la fonction milieu du chapitre pr c dent 3 Principes d acc s a tapes de base Pour travailler avec des fichiers vous devrez respecter un certain ordre Il vous faudra e Ouvrir le fichier c est dire indiquer quel fichier vous voulez acc der et comment e Traiter le contenu du fichier le lire y crire bref toutes les op rations souhait es pour acc der et manipuler son contenu e Fermer le fichier quand tous les traitements sont termin s L tape la plus importante est la premi re Comment ouvrir un fichier Si vous aviez le droit d ouvrir seulement un seul fichier ce serait assez simple mais qu est ce qui vous emp cherait d en ouvrir trois ou quatre en m me temps b Identificateurs de fichiers et canaux Le programme doit pouvoir savoir dans quel fichier il travaille lorsqu il s agit d y lire ou d y crire des donn es Ceci passe par l utilisation d un identifiant unique pour chaque fichier ouvert Dans la pratique tous les langages ou presque en interne utilisent la m me m thode L acc s un fichier passe par l utilisation d un canal Dans la r alit la vraie vie sous entendez par l que l informatique n est pas la vraie vie ou plut t un moyen mais pas une fin un canal relie entre eux deux cours d eau ou la mer un lac etc Dans ce canal transite outre de l eau des bateaux p niches dan
29. gt note 1 sortie lt input type text size 4 name note gt lt input type hidden name cpt value lt cpt gt gt lt input type hidden name sum value lt sum gt gt lt input type hidden name min value lt min gt gt lt input type hidden name max value lt max gt gt lt input type submit name 0K gt lt form gt lt body gt lt html gt f Rendez la monnaie Le but de cet algorithme est de calculer un rendu de monnaie en fonction de la valeur des pi ces et des billets en d terminant combien de billets de telle valeur ou de pi ces de telle valeur il faut rendre Il s agit donc de transformer une somme en coupures correspondantes Par exemple 1898 67 euros peuvent se d composer en e 3 billets de 500 euros e 1 billet de 200 euros e 1 billet de 100 euros e 1 billet de 50 euros e 2 billets de 20 euros e 1 billet de 5 euros e 1 pi ce de 2 euros e 1 pi ce de 1 euro e 1 pi ce de 50 centimes e 1 pi ce de 10 centimes e 1 pi ce de 5 centimes e 1 pi ce de 2 centimes ENI Editions All rigths reserved Autant le dire tout de suite cet algorithme est le paradis des boucles Il en faudra une par valeur faciale de billet ou de pi ce Le principe est en effet tr s simple Il s agit de soustraire au sein d une boucle la valeur faciale du billet par exemple 500 euros au montant total tant que ce montant est sup rieur o gal la valeur du
30. justement des fameux crit res de sortie Si les tests ex cutent une action donn e structure SI en cas de r ussite ou non une erreur dans une condition de sortie peut amener au mauvais nombre de boucles ne jamais y rentrer ou m me pire ne jamais en sortir La boucle est d autant moins simple assimiler qu il est probable que vous n ayez jamais rencontr une structure de ce genre hors de l algorithmique et des langages de programmation Dans le langage courant on ne parle pas de boucle quand il s agit de r citer une table de multiplication En algorithmique vous devrez pourtant en utiliser une pour calculer cette table De m me dans l utilisation quotidienne de l ordinateur vous n utilisez pas cette structure pourtant tous les programmes le font Comment lire l int gralit d un fichier de traitement de texte Comment jouer un mp3 ou une vid o l aide des boucles bien entendu 2 Quelques usages simples Un exemple simple le cas o un utilisateur doit r pondre une question parmi une liste de r ponses impos es comme o oui ou n non Si l utilisateur r pond autre chose n importe quoi il faut lui reposer la question jusqu ce qu il r ponde vraiment o ou n Pour cr er une table de multiplication de 3 par exemple vous allez proc der comme si vous la r citiez e 3 1 3 e 3 2 6 e 3 3 9 e 3 9 27 e 3 10 30 Vous allez donc multiplier 3 successivement par les nombres de 1 10 En algorithmique vo
31. les bases de la formalisation de la logique en proposant une analyse math matique de celle ci En 1847 il publie un livre intitul Mathematical Analysis of Logic Analyse math matique de la logique puis en 1854 An Investigation Into the Laws of Thought on Which are Founded the Mathematical Theories of Logic and Probabilities une recherche sur les lois de la pens e sur lesquelles sont fond es les th ories math matiques de logique et de probabilit s Dans ces ouvrages George Boole d veloppe une nouvelle forme de logique Le formalisme rassemble une logique symbolique et une logique math matique Les id es doivent tre traduites math matiquement sous forme d quations Celles ci peuvent ensuite tre transform es via des lois et leurs r sultats traduits en termes logiques Boole cr e alors un alg bre bas sur deux valeurs num riques le 0 et le 1 autrement dit le binaire qui sera officialis et mis en pratique dans le traitement de l information le si cle suivant avec Claude Shannon Durant sa vie les travaux de Boole rest rent au stade th orique Cependant son alg bre est la base de nombreuses applications quotidiennes telles que l lectronique les circuits logiques l informatique processeurs programmes les probabilit s l lectricit les relais la t l phonie les commutateurs diverses recherches scientifiques etc N tr s pauvre et autodidacte George Boole finira membre de l illustre Royal Socie
32. lt php table 1 while table lt 10 echo table des table lt br gt cpt 1 while cpt lt 10 resultat table cpt echo table x S cpt resultat lt br gt cpt Stable gt lt body gt lt html gt e Saisie de notes et calcul de moyennes Le but de l algorithme suivant est d inviter l utilisateur saisir des notes d tudiants entre 0 et 20 de d terminer la note la plus basse la note la plus haute et de calculer une moyenne Tant que l utilisateur n a pas saisi la note n gative 1 la saisie ne s arr te pas Les r sultats sont ensuite affich s Cet algorithme pr sente un int r t certain il faut contr ler la saisie des notes si l utilisateur saisit autre chose qu une note allant de 1 20 la question lui est repos e sachant que 1 correspond une fin de saisie Proc dez par tapes Commencez tout d abord par cette partie de l algorithme la saisie des notes Il faut pour cela utiliser une boucle dont l unique condition de sortie est une note de 1 PROGRAMME NOTE VAR ENI Editions All rigths reserved note entier D but Afficher Entrez une note Saisir note Tant que note gt 1 Faire Si note gt 20 Alors Tant que note lt 1 ou note gt 20 Faire Afficher Erreur 0 gt 20 1 sortie Saisir note FinTantQue Finsi Si note lt gt 1 Alors Afficher Entrez une note Saisir note Finsi FinTantQue Fin Ce qui donne en PHP depuis une console lt php ec
33. lt html gt ENI Editions All rigths reserved lt head gt lt meta gt lt title gt Objets Ecran lt title gt lt head gt lt body gt lt php class Ecran private type marque modele connecteur private resolution private diagonale private hauteur largeur profondeur poids public static nb_ecrans 0 constructeur par d faut constructeur avec 3 arguments function Ecran t null mq null mdl null echo Constructeur avec trois arguments lt br gt if t null Sthis gt type Inconnu this gt marque Inconnu Sthis gt modele Inconnu Sthis gt nb_ecrans t else this gt modif_type t this gt marque mq Sthis gt modele mdl self nb_ecrans public function modif _type mod Stmod array CRT LCD PLASMA ok array_search mod tmod if Sok this gt type mod return ok public function affiche _ type echo this gt type lt br gt fonction statique public static function nbEcrans echo self nb_ecrans lt br gt allocation dynamique avec construction Sol new Ecran LCD LG L1915S appel d une m thode ol gt affiche type Les deux lignes font la m me chose Ecran nbEcrans echo ol gt nbEcrans lt br gt gt lt body gt lt html gt Contrairement l algorithmique les attributs et m thodes ne sont pas regroup s par blocs publics priv s ou prot g
34. mais cela risque de devenir difficilement lisible Voici un exemple deux niveaux Il s agit tout simplement de calculer et d afficher toutes les tables de multiplication de 1 10 Pour cela deux boucles doivent tre utilis es La premi re va repr senter la table calculer de 1 10 La seconde l int rieur de la premi re va multiplier la table donn e de 1 10 Vous avez donc deux boucles de 1 10 Simulez ce qu il se passe e Premi re boucle table des 1 Seconde boucle ex cution de 1 1 1 2 1 3 1 10 ENI Editions All rigths reserved e Premi re boucle table des 2 Seconde boucle ex cution de 2 1 2 2 2 3 2 10 e Premi re boucle table des 3 Seconde boucle ex cution de 3 1 3 2 3 3 3 10 e Premi re boucle table des 10 Seconde boucle ex cution de 10 1 10 2 10 3 Voici l algorithme correspondant chaque passage dans la premi re boucle le compteur de la seconde boucle repasse un C est dans la seconde boucle qu a lieu le calcul et l affichage de la table de multiplication PROGRAMME MULTI2 VAR table cpt resultat entiers DEBUT table 1 Tant Que table lt 10 Faire Afficher Table des table cpt 1l Tant que cpt lt 10 Faire resultat cpt table Afficher table x cpt resultat cpt cpt 1 FinTantQue Table table 1 FinTantQue Fin La m me chose en PHP lt html gt lt head gt lt meta gt lt title gt Factorielle lt title gt lt head gt lt body gt
35. pTete gt valeur int fgets STDIN SpPrec pTlete elements suivants do echo Element suivant v int fgets STDIN if v 0 ENI Editions All rigths reserved 9 SpEncours new element SpEncours gt valeur v cha nage SpPrec gt pSuiv pEncours pPrec pEncours while v 0 Fin de liste pPrec gt pSuiv null return pTete parcours it ratif function parcours _liste pTete pEncours pTete while S SpEncours null echo pEncours gt valeur SpEncours pEncours gt pSuiv echo n adapt pour PHP function recherche _liste v S SpTete pPrec null SpEncours pTete while S SpEncours null amp amp S SpEncours gt valeur S Sv SpPrec pEncours SpEncours pEncours gt pSuiv return pPrec Rajout pour PHP function existe _liste v plete pPrec null Strouve false pPrec recherche _liste v pTete if pPrec null if pTete null amp amp S SpTete gt valeur v Strouve true else if pPrec gt pSuiv snull trouves true return trouve Fonctions d ajout function ajout_debut pNouveau pTete SpNouveau gt psSuiv pTete pTete pNouveau return pTete function ajout _milieu SpNouveau pPrec SpEncours SpPrec gt pSuiv S SpNouveau SpNouveau gt pSuiv pEncours function ajout_element vrech vnouveau pTete pPrec null EN
36. par le sch ma suivant Chaque enregistrement est repr sent par un cadre et contient une valeur et un pointeur appel psuiv qui pointe sur l enregistrement suivant de la liste ENI Editions All rigths reserved D part valeur valeur valeur valeur psuiv psuiv psuiv psuiv Repr sentation logique d une liste cha n e Pour acc der un l ment donn de la liste vous partez toujours du premier l ment De l connaissant l adresse du suivant par le pointeur psuiv vous passez successivement aux n suivants Quand le pointeur ne pointe sur plus rien null c est que l enregistrement est le dernier Une liste cha n e de ce type est dite unilat re l acc s aux l ments composant la liste est s quentiel vous devez lire les n l ments pr c dents pour acc der celui voulu et unidirectionnel Chaque l ment de la liste est un enregistrement Cet enregistrement peut contenir autant de champs que vous le souhaitez mais l un d eux sera un pointeur sur un enregistrement de m me type Quand vous ajouterez un deuxi me l ment vous placerez son adresse dans le pointeur du premier et ainsi de suite Chaque enregistrement final pointera sur la valeur NIL Pour commencer voici un type structur simple qui pourrait convenir En fait la valeur pourrait tre n importe quoi et le type prendra juste un entier quelconque TYPES Un l ment de liste cha n e Structure element valeur entier pSuiveNIL pointeur
37. puis de nouveau des nombres Ces langages sont dits non typ s Certains poussent le raisonnement assez loin une variable peut contenir le chiffre 3 et l autre le texte 3 petits cochons il pourra les additionner ce qui devrait donner 6 C est le cas du PHP par exemple le type de la variable d pend alors de son contexte d utilisation le langage tentant de convertir son contenu quand c est possible l inverse d autres langages sont de typage fort o toutes les variables doivent tre d clar es de mani re extr mement pr cise type signe longueur et les ventuelles conversions doivent tre explicites En algorithmique vous vous contenterez de donner le nom le type et ventuellement la taille de la variable qui gardera ses propri t s tout au long de l algorithme sa valeur pouvant bien entendu voluer 2 La gestion de la m moire La gestion de la m moire est le calvaire des programmeurs en langages de bas niveau ou m me de haut niveau quand ceux ci laissent au programmeur la t che de g rer la m moire lui m me C est le cas de langages comme le C ou le C Imaginez une cha ne de caract res Hello World Celle ci est compos e de 12 caract res en comptant la ponctuation et l espace Comme une cha ne se termine par un caract re nul il faut selon le principe qu un caract re est cod en ASCII 13 octets pour stocker cette cha ne en m moire En algorithmique vous n avez pas vous soucier de l occupa
38. variables Voici un exemple d op rations dans un simple algorithme qui calcule la surface et le p rim tre d un cercle PROGRAMME CERCLE VAR r PI surface perimetre r els DEBUT PI 3 1415927 r 5 2 surface PI r r perimetre 2 PI r Afficher surface perimetre FIN Ici il n y a que des multiplications Vous pouvez d j remarquer que vous avez parfaitement le droit de cha ner vos calculs et de m langer les donn es et les variables Simulez les deux calculs surfacePI r r surface 3 1415927 5 2 5 2 surface 84 948666608 perimetres2 PI r perimetres2 3 1415927 5 2 perimetre 32 67256408 En PHP lt html gt lt head gt lt meta gt ENI Editions All rigths reserved lt title gt Cercle lt title gt lt head gt lt body gt lt php pi 3 1415927 Sr 5 2 surface pi r r perimetre 2 S pi Sr echo surface Sperimetre gt lt body gt lt html gt Il est possible de grouper les calculs avec des parenth ses Celles ci influent sur la priorit des calculs Vous vous rendrez compte en effet que les op rateurs ont des degr s de priorit diff rents Par exemple une multiplication est plus forte qu une addition Prenez l exemple suivant PROGRAMME PRIORITE VAR X YrZrtotal entiers DEBUT xe3 y 4 Z5 total x y z Afficher total FIN Que vaudra total Si vous effectuez le calcul de gauche droite vous obtenez 3 4 7 7 5 35 Si vous faites ceci a
39. vous en avez besoin d autres vous les ajouterez au d but VAR montant r el somme moyenne r els qte entier Pour les variables contenant des nombres r els ces derniers s crivent avec une vraie virgule comme en fran ais 3 14 ou avec le point d cimal cependant dans les langages de programmation ce sera bien souvent le point qui sera utilis 3 14 En PHP comme les variables ne sont pas explicitement typ es il faut pouvoir d terminer autrement leur contenu Dans l exemple suivant diverses valeurs sont affect es des variables PHP dispose de m thodes des fonctions expliqu es dans le chapitre sur les sous programmes permettant de conna tre le type actuel ou possible du contenu de la variable Si le programme affiche 1 alors la variable est du type test sinon elle ne l est pas Les variables ENI Editions All rigths reserved commencent toujours par le caract re ce qui permet tr s facilement de les distinguer lt html gt lt head gt lt meta gt lt title gt Types lt title gt lt head gt lt body gt lt php entier8bits 127 entierl6bits 32767 entier32bits 2147483647 entier64bits 9223372036854775807 reel32bits 3 1415927 reel64bits 3 1415926535897932384626433832795028841971 echo is_int entier8bits lt br gt echo is_int entier16bits lt br gt echo is_float entierl6bits lt br gt echo is_long entier32bits lt br gt echo is_long entier3
40. 34 on permute 34 et 48 Le tableau est tri 9 17 25 34 48 Si le principe est simple l algorithme r sultant n cessite malheureusement la recherche dans tout ou partie du tableau de la plus petite valeur possible et ce sans grande optimisation possible On peut par contre viter de permuter des valeurs si aucune valeur inf rieure n a t trouv e Voici l algorithme PROGRAMME SELECTION VAR temp i j min Cpt entiers t tableaul1 5 d entiers DEBUT Cpt s Pour i de 1 Cpt 1 Faire minei Pour j de i 1 Cpt Si t j l lt t min alors mine Finsi FinPour Si min lt gt j alors temp t min t min lt tli t i temp Finsi FinPour FIN chaque passage dans la boucle on effectue une comparaison de moins que lors du passage pr c dent Le nombre total de passages est donc de n 1 n 2 n 3 et ainsi de suite soit une complexit de l algorithme de n n 1 2 ce qui d velopp donne une complexit d ordre O n2 Voici le code PHP correspondant lt html gt lt head gt lt meta gt lt title gt tri par selection lt title gt lt head gt lt body gt lt php t array 27 44 12 18 23 19 101 54 29 77 52 88 10 32 Scpt count t for i 0 i lt cpt 1 Si min i for j i 1 j lt cpt j 4 if t j lt t min min j if min i temp t min St min t i t i temp for j 0 j lt cpt j echo t S i ENI Editions All rigths reserved ec
41. 48 i 34 la nouvelle position L algorithme r sultant est assez simple Seule la boucle de d calage peut tre un peu plus ardue comprendre Chaque l ment est d cal vers la droite ou le bas selon la repr sentation qu on s en fait du tableau tant qu il est sup rieur l l ment recherch PROGRAMME TRINSERTION VAR i mem pos entiers t tableaul1 5 d entiers DEBUT Cpt s Pour i de 1 Cpt faire memet i pos i 1 tant que pos gt 0 ET t pos gt mem Faire t pos 1 e t pos pos pos 1 FinTantQue t pos 1 mem FinPour FIN Comme souvent la complexit varie selon l ordre initial des l ments dans le tableau trier Cependant dans le pire des cas on effectue n 1 boucles dans lesquelles on effectue une moyenne de n 2 2 changes et donc un total de n 1 n 2 2 On obtient une complexit d ordre O n2 Cependant on effectue en moyenne seulement la moiti des comparaisons dans l exemple ci dessus six comparaisons sont effectu es alors que dix auraient pu tre effectu es La complexit est alors bien moindre Dans la pratique un tri par insertion est g n ralement plus rapide que les tris bulles et par s lection Une petite remarque concernant le code PHP Si vous faites while t pos gt mem amp amp pos gt 0 L expression est valu e de gauche droite Vous allez avoir une erreur un moment donn quand pos vaut 0 la boucle suivante il vaut 1 Or si un langage comme le C permet
42. 5 fact 4 120 retourne 120 au programme appelant Si vous suivez l ordre des appels lt gt retours vous obtenez le sch ma suivant Les allers et retours d un appel r cursif Un algorithme un peu plus correct de fact est donc Fonction fact n entier entier D but Si n gt 1 Alors n n fact n 1 Finsi Retourne n Fin ENI Editions All rigths reserved Il manque encore le cas de la factorielle de z ro qui vaut un Au final la fonction r cursive fact pourrait ressembler ceci car une factorielle n est possible qu avec des entiers positifs Font fact n entier entier D but Si n 0 Alors Retourne 1 Sinon Retourne n fact n 1 Finsi Fin La m me fonction en PHP avec son programme d accompagnement lt html gt lt head gt lt meta gt lt title gt Factorielle lt title gt lt head gt lt body gt lt php function fact n if n 0 return 1 else return n fact n 1 n fact 10 echo n gt lt body gt lt html gt 3 Un exemple pratique les tours de Hanoi Les tours de Hanoi sont un jeu de r flexion qui a t invent en 1883 par N Claus de Siam professeur au coll ge de Li Sou Stian Si la curiosit vous a pouss rechercher ces noms et villes peut tre avez vous eu une surprise aucun des deux n existe Ce sont en fait des anagrammes faisant croire que ce jeu a t invent par un asiatique Tout faux N Claus de Siam est l anagramme de Luc
43. A E Ressources In for LR iques Algorithmique Techniques fondamentales de programmation avec des exemples en PHP UE DUT Informatique S bastien ROHAUT cause D INFORMATIQUE TECHNIQUE en D ditions Algorithmique Techniques fondamentales de programmation exemples en PHP Algorithmique Techniques fondamentales r de programmation S bastien ROHAUT avec des exemples en PHP Ce livre sur l algorithmique s adresse toute personne d sireuse de ma triser les bases essentielles de la programmation Pour apprendre programmer il faut d abord comprendre ce qu est vraiment un ordinateur comment il fonctionne et surtout comment il peut faire fonctionner des programmes comment il manipule et stocke les donn es et les instructions quelle est sa logique Alors au fur et mesure le reste devient vidence variables tests conditions boucles tableaux fonctions fichiers jusqu aux notions avanc es comme les pointeurs et les objets Dans ce livre le langage algorithmique ou la syntaxe du pseudo code des algorithmes reprend celui couramment utilis dans les coles d informatique et dans les formations comme les BTS DUT classes pr paratoires premi res ann es d ing nierie qui ce livre est en partie destin et conseill Une fois les notions de base acquises le lecteur trouvera dans ce livre de quoi voluer vers des notions plus avanc es deux chapitres l un sur les pointeurs et
44. COBOL ont volu vers l objet Delphi Visual Basic Cobol Objet etc M me les langages macros propres des suites bureautiques MS Office OpenOffice org ou de base de donn es Access Paradox se targuent d tre des langages objet Si la d finition de l objet correspond peu pr s ce qui vous a t pr sent depuis le d but de ce chapitre les puristes doivent dans certains cas bien rire L arriv e de Java comme vrai langage objet de haut niveau a chang beaucoup de choses reprenant les bonnes id es du C il l adapte en un tout plus simple et plus pratique adapt aux besoins modernes des d veloppeurs et surtout des applications La force de SUN a t de proposer un langage adapt une large gamme de besoins des applets Java l apprentissage de l objet les applications d port es les serveurs d applications etc Un gros concurrent de la plate forme Java Java ses outils ses API etc se nomme NET avec le langage C prononcez C sharp et est videmment objet Les exemples de ce livre auraient parfaitement pu tre d velopp s en C sachant que le langage est maintenant disponible ailleurs que sous Windows Un autre concurrent de Java et de NET est le PHP L objet est apparu dans la version 4 de PHP la suite de nombreuses demandes en ce sens Il tait cependant tr s simple et plut t limit Le PHP est devenu un vrai langage objet avec la version 5 Son mod le est Java Il est dans les faits assez
45. CS La structure globale de l algorithme est donc PROGRAMME TRIBULLE VAR ENI Editions All rigths reserved Permut bool en temp Cpt i entiers t tableaul1 5 d entiers DEBUT Cpt s Permut vrai TantQue Permut Faire Permut Faux Pour i de 1 Cpt 1 Faire Si t i gt t i 1 alors tempet i tLiJet CET t i i etli Permut Vrai Finsi FinPour FinTantQue FIN Cependant si vous impl mentez cet algorithme dans un quelconque langage vous allez vous apercevoir que celui ci dans notre cas pr cis effectue une passe de trop En effet d s le troisi me passage le tableau est tri et pourtant le programme continue C est que lors de ce passage l algorithme a effectu une permutation des deux premi res valeurs 17 et 9 Partant de ce fait l indicateur de permutation est pass Vrai et donc une nouvelle boucle est relanc e Comme il n est pas possible de pr voir l avance le nombre de permutations restantes l algorithme montre ses limites dans ce cas pr cis Si n est le nombre d l ments du tableau l algorithme effectue n 1 boucles TantQue et n 1 boucles Pour soit n 1 2 boucles ce qui se d veloppe en n2 2n 1 La complexit est d ordre O n2 Autrement dit la complexit de cet algorithme est lev e Remarquez aussi que cet algorithme balaie quoi qu il arrive toutes les valeurs du tableau alors qu on sait d j qu la premi re passe la derni re valeur est la plus lev e qu la seconde passe les deux derni re
46. FinsSI Si note gt max Alors max note FinsSI Ecrire Entrez une note Lire note Finsi FinTantQue Si cpt gt 0 Alors moy sum cpt Ecrire Nombre de notes cpt Ecrire Note la plus basse min Ecrire Note la plus haute max Ecrire Moyenne moy Sinon Ecrire Aucune note n a t saisie FinsSI Fin Le programme suivant en PHP est une adaptation du programme pr c dent Vous n y voyez pas de boucle ou plut t elle n est pas explicite vous bouclez en validant la saisie d une note par le bouton OK La difficult en PHP et HTML est de conserver les valeurs d une page l autre Il existe diverses m thodes Celle pr sent e dans cet exemple consiste conserver les valeurs dans des champs cach s du formulaire lt html gt lt head gt lt meta gt lt title gt moyenne max 3 lt title gt lt head gt lt body gt lt php Smin 20 Smax 0 Scpt 0 sum 0 Snote 0 if isset _GET note note GET note l Scpt _GET cpt l min _GET min l max _GET max l sum _GET sum Scpt r if note gt 20 ENI Editions All rigths reserved echo Erreur nouvelle saisie S pt else if note 1 Ssum sum note if note lt min min note if note gt max max note echo S note if cpt 0 moy sum cpt echo cpt Scpt echo min min echo max max echo moy moy gt lt form method GET
47. Le fait de disposer de plusieurs giga octets n est pas un crit re suffisant pour programmer n importe comment Une liste de mille valeurs comprises entre 0 et 100 co tera 1000 octets soit pas loin de 1 ko dans un type byte mais 8000 octets pas loin de 8 ko soit 8 fois plus dans une type r el double pr cision Cela peut sembler faible mais non seulement l ordinateur doit manipuler 8 cases m moire au lieu d une mais en plus il doit en permanence convertir une valeur qu il pense tre un nombre r el avec des chiffres apr s la virgule en entier alors que c est d j le cas Quand vous verrez plus bas la formule math matique n cessaire vous vous rendrez compte du g chis Utilisez les types qui vont bien avec les valeurs qui vont bien En algorithmique c est bien plus simple Rien ne vous emp che de pr ciser que vous manipulez des entiers ou des r els mais vous pouvez aussi indiquer tout simplement que vous utilisez des variables contenant des valeurs num riques avec le pseudo type num rique Vous devrez cependant tre plus circonspect quand vous convertirez votre algorithme en vrai langage de programmation D une mani re g n rale deux types num riques sont utilis s en algorithmique e Les entiers nombres sans virgule n gatifs ou positifs e Les r els nombres virgule positifs ou n gatifs Les variables se d clarent toutes au d but de l algorithme Si durant la r daction de celui ci vous remarquez que
48. VRAI mais qu il ne d croche pas FAUX ou encore que vous d crochez VRAI sans appel mis FAUX ou que personne n appelle ni ne d croche FAUX dans les deux cas il n y a aucune ENI Editions All rigths reserved communication d tablie On peut en d duire la table suivante FAUX n appelle pas FAUX ne d croche pas FAUX pas de comm FAUX n appelle pas VRAI d croche FAUX pas de comm VRAI appelle FAUX ne d croche pas FAUX pas de comm VRAI appelle VRAI d croche VRAI communication Ne trouvez vous pas que cette table ressemble beaucoup l op rateur logique ET Oui c est un exemple concret d application de l alg bre de Boole Cette table o toutes les variables logiques sont pos es avec leur r sultat s appelle une table de v rit Chaque case prend une valeur VRAI ou FAUX et la colonne finale le r sultat attendu lui m me VRAI ou FAUX Remplacez VRAI et FAUX par les valeurs binaires respectives 1 et 0 Il y a des fois o il y a videmment plus de deux variables logiques Prenez l exemple suivant Quand d crochez vous votre t l phone Quand il sonne Quand vous voulez appeler quelqu un S il sonne voulez vous vraiment r pondre si vous avez l affichage du nom ou du num ro de l appelant vous voudrez peut tre filtrer vos appels Quels postulats posez vous Vous d crochez si e Le t l phone sonne ET vous voulez r pondre e Vous voulez appeler quelqu un Autreme
49. Var ligne result cha ne pos entier D but pos 1l ligne root x 0 0 root root bin bash result toto Tant que result Faire result decoupe ligne pos Si result Alors Afficher result pos pos longueur result 1 apr s le d limiteur Finsi FinTantQue Fin Vous constatez que le traitement n est pas anodin et sur des milliers d enregistrements cela peut compter 2 Largeur fixe Dans des enregistrements largeur fixe il n y a pas de d limiteurs Chaque champ a une longueur pr d finie et occupe toute cette longueur quitte tre compl t par des espaces Les champs sont ainsi coll s les uns aux autres en un seul gros bloc S il fallait convertir une ligne ci dessus en enregistrement fixe il faudrait savoir que e Un login fait en principe 8 caract res e Un mot de passe 1 seul stock ailleurs e Les UID et GID utilisent au maximum 5 chiffres e Le commentaire sera arbitrairement pour l exemple de 15 caract res e Les chemins et shells arbitrairement aussi 15 caract res ENI Editions All rigths reserved root x 0 0 Commentaire root bin bash bin x1 1 Commentaire bin bin bash daemon x2 4 Commentaire sbin bin bash rohaut x123 123 Compte Seb home seb bin ksh l 891 11 22 33 45 6 0 45 01 56 90 4 Deux choses sautent aux yeux e Contrairement au format d limit le format largeur fixe consomme bien plus de m moire Dans cet exemple 64 octets sont utilis s
50. a d j t pr sent dans les chapitres pr c dents mais un petit rappel s impose e 10 10 9 8 7 6 5 4 3 2 1 e Donc 10 10 9 8 7 6 5 4 3 2 1 e Donc 10 10 9 e Donc n n n 1 Si vous cr ez une fonction appropri e dans ce cas appel e fact et charg e de calculer la factorielle de n vous auriez un raccourci de ce genre ENI Editions All rigths reserved fact n n fact n 1 De l il vous devient tr s facile d crire une fonction fact r cursive Fonction fact n entier entier D but n fact n 1 Retourne n Fin Cette fonction n est pas compl te car elle va s ex cuter l infini Il n y a pas de condition d arr t Or le calcul doit continuer tant que n est sup rieur 1 Voici les passes successives pour une factorielle de 5 e 127 tape 5 gt 1 Oui fact 5 appelle 5 fact 4 e 2 ME tape 4 gt 1 Oui fact 4 appelle 4 fact 3 3 me tape 3 gt 1 Oui fact 3 appelle 3 fact 2 4 me tape 2 gt 1 Oui fact 2 appelle 2 fact 1 e 5 me tape 1 gt 1 Non fact 1 sort en retournant la valeur 1 fact 2 Est ce fini Non Chaque fonction appel e se terminant retourne sa valeur au programme ou sous programme l ayant appel Donc cela continue e 6 ME tape fact 2 2 fact 1 2 retourne 2 fact 3 e 7 ME tape fact 3 3 fact 2 6 retourne 6 fact 4 e 8 ME tape fact 4 4 fact 3 24 retourne 24 fact 5 e 9 ME tape fact 5
51. affaire Vous pouvez reconstruire votre enregistrement puis l crire Programme ECRIT Var fic fichier s quentiel nom ligne cha nes tlogin tuid tpwd tgid tcmt thome tshell cha nes uid gid entiers D but nom passwd Ouvrir nom dans fic en Ajout login toto uid 500 gid 501 reconstitution tlogin Formate tlogin 8 tuid Formate numch uid 5 tgid Formate numch gid 5 tpwd Formate tpwd 1 tcmt Formate tcmt 15 ENI Editions All rigths reserved thome Formate thome 15 tshell Formate tshell 15 ligne tlogin tpwdsetuidetgid etcmt thomestshell Ecriture Ecrire fic ligne Fermer fic Fin L instruction Ecrire ajoute l enregistrement dans le fichier puis se place la suite de l enregistrement cr Aussi si vous ex cutez une nouvelle instruction Ecrire le nouvel enregistrement se placera la suite du pr c dent Attention cependant au mode d ouverture du fichier En mode lecture criture l enregistrement ne sera pas ajout la fin du fichier contrairement au mode ajout mais la position courante vous crasez les enregistrements existants les uns apr s les autres Un programme assez simple consiste recopier les enregistrements d un fichier dans un autre Pour ajouter un tout petit peu de piment pourquoi ne pas dire que si le champ mot de passe contient un d l enregistrement doit tre d truit Il suffit de ne pas le recopier dans le nouveau fichier Programme COPIE Var
52. allez acqu rir au fur et mesure des m canismes de pens e qui vous permettront d optimiser les traitements que vous devez programmer tant en vitesse qu en occupation m moire ou m me en quantit de lignes de programmation Sur ce dernier point il existe de nombreux cas o des algorithmes longs et complexes sont plus performants que d autres semblant plus pratiques au premier abord Apprendre l algorithmique ou l algorithmie les deux sont autoris s c est donc apprendre programmer dans les r gles de l art Tout au long de cet ouvrage vous allez d couvrir les notions l mentaires qui vous permettront tant de comprendre le fonctionnement interne d un programme que de le concevoir l aide d une progression simple et constante et d exemples pratiques et compr hensibles 4 Le formalisme Le but d un algorithme tant de d crire un traitement informatique dans quelque chose de compr hensible par l humain et facilement transposable vers la machine pour qu un algorithme soit compr hensible il faut qu il soit clair et lisible Dans ce cas il existe deux moyens efficaces e soit d crire l algorithme sous forme de texte simple et vident faire ceci faire cela e soit de faire un sch ma explicatif avec des symboles Dans la pratique les deux formes sont possibles Mais un dessin ne vaut il pas un long discours Il est d ailleurs courant de commencer par un sch ma puis quand celui ci devient trop complexe de pas
53. alors gagne VRAI FinSi i i 1 FinTantQue FinSi v rification des deux diagonales Si NON gagne Alors Si pli fi ET pl1i1l11 pl21121 ET pl1 l1 pl31131 O pl1 13 p 2 2 ET p 1 3 p 3 1 Alors Gagne VRAI Finsi Finsi nbtourse nbtours 1i Jusqu gagne VRAI OU nbtour 9 Si gagne Alors Afficher pion a gagn Sinon Afficher Personne ne gagne Finsi FIN Comme indiqu ce programme n est pas optimis Ainsi les boucles et tests qui d terminent si les lignes et les colonnes sont gagnantes font appel des indices statiques Or si vous souhaitiez par exemple tendre cet algorithme un Puissance 4 qui est fondamentalement la m me chose vous auriez des tests rallonge Voici le r sultat en PHP l affichage ayant t l g rement am lior et les coordonn es adapt es en fonction des indices des tableaux d marrant 0 lt php Sx 0 y 0 S nbtours 0 pion ts Stx Sty initialisation du tableau for i 0 i lt 3 i for j 0 j lt 3 j p i j gagne false boucle principale do if S Spion 0o pi n 01 else S pion x saisie des coordonnees d plateau echo L 2 Sn for i 0 i lt 3 i echo i 1 S p i 0 S Sp i 1 pISi 2 1 I n echo Au tour de pion n echo Coordonnees x ENI Editions All rigths reserved pI p gt
54. couteau un stylo une voiture votre cran d ordinateur un t l phone etc Par abstrait comprenez une entreprise un service une organisation quelconque etc Ces objets ont des propri t s intrins ques Prenez un cran parmi ses propri t s physiques et d usage vous trouvez ENI Editions All rigths reserved e ses dimensions e son type crt Icd etc e ses connecteurs vga dvi e son poids c est lourd un cran tube e la diagonale d affichage en pouces e les r solutions d affichage support es avec les fr quences associ es e etc Ce m me cran a probablement un mode d emploi d crivant les manipulations tant mat rielles que logicielles pour le param trer par exemple e r gler les couleurs et associ contraste etc e r gler la zone d affichage changer de r solution e etc Un objet comme un cran dispose donc de propri t s c est la description de ce qu il est de son tat Il dispose aussi de m thodes quelles sont les actions possibles pour modifier son tat son comportement pour l utiliser C est ce qu il sait faire Tous les objets de la vie courante ont des propri t s et des m thodes M me une sali re dimensions couleur nombre de trous contenu m thodes pour faire couler le sel plus ou moins vite l ouvrir la remplir la fermer etc Imaginez le nombre de propri t s et de m thodes pour un tre humain La d finition des propri t s et
55. dans des balises particuli res lt php et gt On crit donc une page HTML dans laquelle on int gre du code PHP Le code PHP est encapsul dans le HTML c est l encapsulation lt html gt lt head gt lt title gt Titre lt title gt lt head gt lt body gt lt php echo Hello World gt lt body gt lt html gt ENI Editions All rigths reserved Vous pourrez selon votre configuration acc der la page Web via l URL suivante http localhost HelloWorld php Le code HTML g n r sera le suivant lt html gt lt head gt lt title gt Titre lt title gt lt head gt lt body gt Hello World lt body gt lt html gt Pour la suite de cet ouvrage quand ce sera possible les exemples en PHP seront adapt s une utilisation via un navigateur Web Autrement et ceci sera pr cis les programmes seront ex cut s via la ligne de commande ENI Editions All rigths reserved La variable 1 Principe Vous savez gr ce au chapitre pr c dent comment l ordinateur se repr sente les chiffres et les nombres sous forme de binaire De m me la m moire de l ordinateur compos e de cases peut contenir des informations notamment ces fameux nombres En programmation il faut quelque chose de simple pratique et souple manipuler pour repr senter ces nombres Chaque case de la m moire est num rot e Si la m moire fait 256 octets et que chaque case peut contenir un octet alors il y
56. de d border les indices aucune v rification n est effectu e Java et PHP ne le permettent pas et causent une exception qui stoppe le programme avec une erreur Aussi il faut d abord tester la valeur de pos AVANT de v rifier le contenu du tableau cet indice while pos gt 0 amp amp t pos gt mem Le code correspondant en PHP est le suivant lt html gt lt head gt lt meta gt lt title gt tri par insertion lt title gt lt head gt lt body gt lt php t array 48 17 25 9 34 Scpt 5 for i 1 i lt cpt i mem t i pos i 1 while pos gt 0 amp amp t pos gt mem t pos 1 t pos pos t pos 1 mem for j 0 S j lt cpt j echo St j echo lt br gt 2 gt lt body gt ENI Editions All rigths reserved lt html gt f Le tri Shell Le tri Shell est une variante du tri pr c dent qui a t propos par Donald L Shell en 1959 il n y a donc aucun rapport avec le shell Unix ou Windows Dans ce type de tri les l ments ne sont plus d cal s de un un mais par pas plus important La permutation s effectue en fonction de ce pas Une fois les permutations de ce pas effectu es le pas est r duit Quand le pas atteint 1 le tri Shell devient un b te tri par insertion Au final le tri Shell consiste d grossir un maximum le tableau trier en pla ant d s les premiers passages le plus d l ments possibles dans les bonnes part
57. disposant de dix classes chacune de vingt l ves Nous voulons placer les notes dans un tableau Voici donc un tableau de trois dimensions Note l 10 1 101 1 20 Combien de notes pourra obtenir le tableau 10x10x20 2000 notes Si l l ment fait un octet vous approchez les 2 Ko Mais si l l ment du tableau contient un r el sur 64 bits c est 16 Ko qui sont utilis s Pourtant les indices semblaient si peu lev s c Les types Un tableau n est pas un type de donn es mais un ensemble de valeurs elles m mes typ es regroup es et indic es sous un nom de variable unique Pouvez vous cr er un tableau contenant n importe quel type de valeurs Attention l interpr tation de cette question Un tableau contient il n valeurs du m me type ou au contraire n valeurs de types diff rents En algorithmique le principe est simple un tableau contient n l ments de m me type Autrement dit vous allez d clarer un tableau de vingt notes en num rique dix r els cinq cha nes de caract res etc Cependant en dehors du pseudo code algorithmique la d finition la d claration et l utilisation des tableaux d pendent fortement du langage Les tableaux simples en Java ou en C par exemple ne contiennent qu un seul type possible de valeurs Tandis qu en PHP vous pouvez m langer tout ce que voulez l indice 1 contenant un entier l indice 2 du texte etc Cela peut tre un peu d routant l usage mais ces langages sou
58. du changement de jour d heure de minute sans oublier qu il y a 60 minutes dans une heure et 60 secondes dans une minute Par exemple en additionnant 147 secondes 23 heures 58 minutes et 12 secondes quelle heure sera t il Il sera minuit O minute et 39 secondes le lendemain Dans l algorithme vous utiliserez des valeurs enti res Ainsi le r sultat des divisions sera un entier et non un r el par exemple 159 60 2 65 mais avec un entier vous r cup rerez seulement 2 e Ensuite convertissez ces secondes en minutes Pour cela il suffit de diviser par 60 pour r cup rer les minutes puis de r cup rer le reste de la division enti re le modulo pour les secondes en trop 159 60 donne 2 minutes avec un reste de 39 secondes Vous savez maintenant que la fin est de 39 secondes e Additionnez les minutes 58 2 60 Si le chiffre est sup rieur ou gal 60 proc dez comme pour les secondes 60 60 1 soit une heure suppl mentaire et un reste de 0 donc 0 minute Vous savez maintenant que la valeur du milieu est 0 minute e Additionnez les heures 23 1 24 soit minuit L encore l id al est de compter les jours Ainsi 24 24 1 soit 1 jour sans reste donc 0 heure minuit Il sera donc minuit et 39 secondes PROGRAMME heure VAR jours heures minutes secondes nbsec entiers DEBUT heures 17 minutes 55 secondes 48 Afficher Combien de secondes en plus Saisir nbsec secondes secondes tnbsec minutes minutes secondes
59. en hexad cimal On dit donc que 183 10 B7416 183 16 7 1 B f du d cimal l hexad cimal Si vous prenez la valeur maximale en 64 bits cela donne FFFFFFFFFFFFFFFF soit 16 caract res Un informaticien exerc est quasiment capable de convertir la vol e de l hexad cimal en d cimal Prenez la valeur 8C soit 10001100 en binaire Le C vaut 12 8 16 12 140 Sans aller plus loin sachez que les bases 2 10 et 16 ne sont pas les seules Sur certaines machines et certains syst mes d exploitation il est courant d utiliser une base 8 pour des valeurs ne n cessitant que trois bits pour tre repr sent e Somme toute tant qu il reste assez de symboles rien n emp cherait d avoir une base 30 ENI Editions All rigths reserved L algorithmique 1 Programmer c est un art Pour obtenir un r sultat donn il faut g n ralement suivre une m thode une certaine logique Sauf tre un grand p tissier dont la science des m langes des ingr dients est inn e ou le fruit d une longue pratique vous n obtiendrez jamais un d licieux g teau au chocolat m me si vous disposez des meilleurs ingr dients et accessoires de cuisson si vous ne connaissez pas les bonnes proportions l ordre dans lesquels ajouter les ingr dients le temps de cuisson la temp rature bref la recette De m me sans formation de m canicien ou sans la documentation technique du moteur de votre v hicule inutile de vous lancer dans un c
60. est vous de tester si un pointeur est positionn sur NIL avant de l utiliser Un acc s un pointeur contenant NIL provoquera une erreur Dernier point mais ceci devrait vous sembler vident vous avez le droit de cr er des pointeurs sur n importe quel type de variable y compris des enregistrements C est m me l un des piliers de l utilisation des pointeurs La suite du chapitre y fera fortement appel Type Structure tarticle ref cha ne libelle cha ine prix r el FinsStruct Var art tarticle pArt pointeur sur tarticle D but art ref ref01001 pArt adresse de art Afficher pArt ref on trouve aussi la notation pArt ref Fin En commentaire il est indiqu que la notation pArt ref est aussi utilis e avec une fl che indiquant qu on pointe sur l enregistrement ref de la structure point e Cette notation est issue des langages C et C qui font la diff rence entre une variable structur e utilisation du point pour l acc s aux champs et un pointeur sur une variable structur e utilisation de la fl che Dans le doute vous pouvez aussi proc der ainsi Afficher pArt ref Afficher pArt ref Les deux syntaxes sont quivalentes car rappelez vous que l toile d r ference le pointeur on r cup re la valeur de la variable point e et donc ici l quivalent de la variable art originale ENI Editions All rigths reserved b Allocation dynamique Jusqu pr sent les pointeurs recevaient l adresse d u
61. gt 1 gt Notez bien attentivement la condition de sortie centrale la note doit tre sup rieure ou gale 1 ET inf rieure ou gale 20 pour sortir de la saisie Avec le Tant que la boucle continuait tant que la note tait inf rieure 1 OU sup rieure 20 Une nuance mais de taille Ces nuances sont l une des raisons qui font que des tudiants et des programmeurs pourtant parfois chevronn s s y perdent C est aussi l une des raisons qui fait que la boucle R p ter jusqu n est pas pr sente dans certains langages comme le C ou Java En Java ou en PHP cependant vous trouvez une boucle quivalente au R p ter Tant Que le do while qui reprend le fait d une it ration obligatoire mais avec les m mes expressions bool ennes que le Tant Que initial 2 Quelques exemples adapt s a La factorielle Inutile de d crire nouveau le principe La boucle doit tre quitt e quand le compteur vaut 2 Variables cpt resultat en Num rique D but Ecrire Quelle factorielle Lire cpt resultatecpt R p ter cpt cpt 1 resultat cpt resultat Jusqu cpt 2 Ecrire resultat Fin b Les trois boucles L encore m me programme mais style diff rent Notez que ici les compteurs partent de 0 afin d tre incr ment s en d but de boucle dans le but de rendre la condition de sortie plus lisible gale 10 Variables a b c nbl nb2 en Num rique D but a 0 b 0 c0 R p ter a a l R
62. indicateur Le drapeau est une variable initialis e une valeur pr d finie au d but du programme et dont la valeur est modifi e selon le r sultat des tests Apr s tous les tests on v rifie la valeur du drapeau A t elle chang Alors il y a eu un probl me Le drapeau est repr sent par la variable erreur En fin de script si elle contient autre chose que 0 alors la date est invalide Sa valeur est modifi e 1 lorsqu un test n est pas concluant Variables erreur annee mois jour en Num rique D but erreur 0 Ecrire Date initiale Lire jour mois annee Si jour lt 0 OU mois lt 0 OU mois gt 12 Alors erreur 1l Sinon Si Mois 1 OU mois 3 OU mois 5 OU mois 7 OU mois 8 OU mois 10 ou mois 12 Alors Si jour gt 31 Alors erreur 1l Finsi Sinon Si mois 4 OU mois 6 OU mois 9 OU mois 11 Alors Si jour gt 30 Alors erreur 1l FinSi ENI Editions All rigths reserved ff Sinon SI mois 2 Alors Si annee 4 0 ET annee 400 0 OU annee 100 gt 0 Si jour gt 29 Alors erreur 1 Finsi Sinon Si jour gt 28 Alors erreur 1 Finsi Finsi Finsi Si erreur 1 Alors Ecrire Date incorrecte Sinon Ecrire Date correcte FinsSI Fin c L heure dans n secondes Le simple est il meilleur Le but de l algorithme est cette fois de d terminer l heure qu il sera dans n secondes Pour cela l utilisateur doit saisir l heure actuelle d compos e en heures sur 24 heures minutes et secondes Bien entendu il faut tenir compte
63. issue de ce programme les deux messages sont affich s d abord celui pour Pi ce puis celui pour Tour Classe Tour h rite de Pi ce m thodes publiques Proc dure mouvement D but Appel de mouvement de Pi ce super mouvement Afficher Mouvement de Tour FinProc FinClasse Programme obj6 var matourl Tour D but Appel de mouvement de l objet matourl matourl mouvement Fin En cas d h ritage en cascade le mot cl super se rapporte la classe m re c est dire celle dont d rive directement la classe fille Pour remonter toute la hi rarchie des classes vous devez utiliser le mot cl super dans toutes les m thodes de toutes les classes pr c dentes en cascade d Le polymorphisme param trique Chaque m thode au sein d une classe dispose d une signature particuli re Cette signature est constitu e du nom de la m thode des param tres qu elle prend et de la valeur qu elle retourne Le langage objet se base sur cette signature pour appeler la bonne m thode Le principe de l objet indique qu il suffit qu un seul de ces trois constituants de la signature varie pour que la m thode soit consid r e comme diff rente Vous pouvez faire par exemple varier le type de variable retourn e par la m thode et aussi les param tres mais pas le nom de celle ci Voyez vous les implications directes Vous avez le droit de donner le m me nom plusieurs m thodes condition que le nombre ou les type
64. l cran Voici ce que pourrait tre la classe de l objet de type Ecran Type Classe Ecran attributs type Cha ne marque cha ne mod le cha ne diagonale entier hauteur reel largeur reel profondeur reel poids reel connecteur cha ne resolution tableau 1 10 de cha nes m thodes Proc dure changer_resolution Proc dure mise_en_veille Proc dure rallumer Proc dure regler_affichage Proc dure affiche mod le Proc dure saisie mod le FinClasse 5 D claration et acc s Un objet se d clare comme une variable ou un enregistrement sauf que le nom du type est le nom de la classe Var ecranl Ecran ecran Ecran Vous pouvez aussi cr er des tableaux d objets Var ecrans tableaul 1 10 d Ecrans Et m me d clarer des pointeurs sur des objets puisque eux aussi occupent une zone m moire Var cran ECran pEcran pointeur sur Ecran Par convention les variables objets qui seront simplement appel es objets par la suite commencent souvent par la lettre o oEcrani o1 02 etc Mais vous n tes absolument pas oblig de suivre cette convention sauf si elle vous est impos e Vous acc dez aux divers membres de l objet en utilisant le point entre le nom de l objet et ses membres exactement comme pour une structure La seule diff rence est qu apr s le point vous n avez plus forc ment un champ un attribut mais aussi un sous programme une m thode Quand vous placez
65. l occasion de faire la cuisine Pour un g teau vous tes vous lanc directement ou avez vous ouvert un livre pour r cup rer la liste et la quantit de chaque ingr dient pour suivre la recette faites fondre le chocolat et le beurre dans une casserole feu doux retirez la casserole du feu incorporez les jaunes d uf puis le sucre et la farine battez les ufs en neige puis incorporez doucement dans le m lange etc Dans les deux cas f licitations Vous avez d roul votre premier algorithme Une d finition simple d un algorithme c est une suite d instructions qui quand elles sont ex cut es correctement aboutissent au r sultat attendu C est un nonc dans un langage clair bien d fini et ordonn qui permet de r soudre un probl me le plus souvent par calcul Cette d finition est rapprocher du fonctionnement de la machine de Turing qui avant l apparition de l ordinateur utilisait cette d marche pour r soudre de nombreux probl mes L algorithme est donc une recette pour qu un ordinateur puisse donner un r sultat donn Le mot algorithme vient du nom du math maticien Al Khuwarizmi Muhammad ibn M s al Khuw rizm savant persan du IX ME si cle auteur d un ouvrage appel La transposition et la r duction Al jabr wa l muq balah Le mot Al jabr deviendra alg bre le nom de l auteur sera latinis en Algoritmi qui sera la base du mot algorithme 3 Pourquoi utiliser un algorithme L algorit
66. l octet de poids faible seront plac s dans la premi re case m moire et les 8 derniers bits de poids fort soit l octet de poids fort seront plac s dans la case suivante La d marche serait la m me en 32 bits ou 64 bits Case m moire 1 Case m moire 2 00111001 10010110 ENI Editions All rigths reserved c L hexad cimal Si vous reprenez l exemple d une valeur binaire cod e sur 64 bits il faut 64 0O ou 1 pour la d crire 1111111111111111111111111111111111111111111111111111111111111111 En d cimal il faut vingt chiffres 18 446 744 073 709 551 616 Cela prend beaucoup de place et c est difficile manipuler Puisqu il existe une base 10 d cimal et une base 2 binaire pourquoi ne pas prendre une base plus lev e multiple de 2 pour r duire la longueur et la manipulation de ces nombres C est ainsi qu en informatique il est d usage d utiliser la base 16 appel e hexad cimale Une base hexad cimale permet de coder les valeurs de 0 15 Si de O 9 on utilise les valeurs d cimales correspondantes au dessus il faut utiliser des lettres de l alphabet de A 10 F 15 Comment passer du binaire l hexad cimal Ceci revient r pondre la question Combien faut il de bits dans un nombre binaire pour coder 16 valeurs 24 16 Il faut donc 4 bits Le tableau suivant r sume les conversions D cimal Si vous reprenez le nombre 183 qui n cessite 8 bits soit un octet sa conversion donne B7
67. nature et de la g n alogie e Un n ud ou sommet est un l ment quelconque de l arbre Dans un arbre g n alogique chaque individu repr sente un n ud ou sommet il a plusieurs successeurs mais un seul pr d cesseur e La racine est le premier l ment de l arbre n ayant pas de pr d cesseur dans la hi rarchie e Une feuille ou n ud terminal ou n ud final est un l ment qui n a pas de successeur e Un n ud interne est un n ud qui n est ni racine ni feuille qui a donc un pr d cesseur et des successeurs e Un arc relie deux n uds e Une branche est le chemin qui relie la racine une feuille Du c t du rapprochement g n alogique l g rement sexiste vous trouverez les termes suivants e Le p re est le pr d cesseur unique d un n ud e Les fils sont les n successeurs d un n ud e Les n uds de p re identique sont des fr res e Le n ud le plus gauche de l arbre est l a n Un arbre peut tre d crit horizontalement et verticalement c Description horizontale Horizontalement un arbre n aire est un arbre dont le nombre maximum de fils par n ud est n Les fils sont regroup s par niveaux Un niveau est l ensemble des n uds gale distance de la racine Le premier niveau est la racine le deuxi me les fils de la racine le troisi me les fils des fils et ainsi de suite Quand chaque n ud d un niveau a exactement n fils le niveau est dit satur Un arbre est strictement complet si tous les ni
68. notions L ensemble de ces notions c est l algorithmique Ce livre reprend les notions essentielles fondamentales de la programmation Pour apprendre programmer il faut d abord comprendre ce qu est vraiment un ordinateur comment il fonctionne et surtout comment il peut faire fonctionner des programmes comment il manipule et stocke les donn es et les instructions quelle est sa logique Alors au fur et mesure le reste coule de source comme une vidence variables tests conditions boucles tableaux fonctions fichiers jusqu aux notions avanc es comme les pointeurs et les objets Le formalisme algorithmique la syntaxe du langage algorithmique ou pseudocode reprend celui couramment utilis dans les coles d informatique et dans les formations comme les BTS DUT premi res ann es d ing nierie qui ce livre est en partie destin et conseill Il existe plusieurs variantes utilis es selon le professeur le langage d origine Celui pr sent ici a l avantage d tre dans un fran ais tr s explicite tant que jusqu pour chaque afficher saisir etc Leur lecture ne n cessite aucune connaissance pr alable de termes trop techniques Ce livre ne fait pas qu aborder les notions basiques Deux chapitres l un sur les pointeurs et les r f rences l autre sur les objets ouvrent les portes de la programmation dans des langages volu s et puissants comme le C le C Java et PHP D ailleurs presque tous les algorithm
69. o os ooo 4 10i0V00 pl 0 o coohooowP Roo o0 000 GOi000EYFYY pI 0409 r20i0 0nE CpI DAD9I UOO0E FC0 nooE o onoE o o ooog o on niodn P toR n o oo 00Z 00 0R DANDA sP ETS ESOR DADSANISDDDHP SDOT n osooh P n no nionnHp P S o c oocHp oo les oo oiooo P S0R 0 D O0 002YYY00 800R oe oo ooo oo o piooos b P x s 00 pi 00 eU0G o ooeop oop e0000p 0s6000p PO0HpYSF SOR 0 DOpxOzOtYDiOj OC P J1G 0 ao oDoioooHp Pv s o n zo oid D0Hb P quR o00b o0 0R o lt jo o c o 0oi000Hb P DoR oo0b oof 0R 0 lt i o Rp 00 RTE a LRU E R R sultat de l ouverture d un fichier binaire dans un diteur C est que vous tes en pr sence d un fichier binaire en l occurrence ici un programme compil C est illisible directement c est une suite d instructions et de donn es compr hensibles par le microprocesseur Pourtant sorti sous forme hexad cimale ou binaire il serait possible de convertir les s quences en instructions lisibles c est le r le d un d sassembleur M me principe pour un fichier au format MP3 ce format n cessite un programme qui va analyser le format connu et en effectuer la transformation en ondes sonores qui pourront tre envoy es vers votre carte son puis vos oreilles Il est int ressant de noter que l diteur de
70. oit le r sultat de l expression b c donc a re oit 0 L expression totale est fausse elle vaut z ro Si vous aviez eu c a b La valeur de a est gale celle de b donc l expression a b est vraie et vaut 1 Donc c vaut 1 et l expression est vraie Nuance b La diff rence L op rateur de diff rence est d crit par les symboles ou point d exclamation et gal qu il faut comprendre comme la n gation voir op rateur bool en de l galit Vous trouverez parfois lt gt comme quivalent de inf rieur ou sup rieur si c est inf rieur ou sup rieur alors ce n est pas gal Attention une expression a b est vraie si la valeur de a est diff rente de b PROGRAMME DIFF VAR a b entiers DEBUT a 10 b 20 Afficher a b Afficher NON a b FIN Les r sultats de cet algorithme sont identiques Les valeurs de a et de b sont diff rentes Dans le premier cas a b est vrai Dans le second cas a b est faux mais la n gation de ce r sultat est vraie c Inf rieur sup rieur Quatre op rateurs permettent de comparer des valeurs inf rieures et sup rieures avec ou sans galit ENI Editions All rigths reserved e lt inf rieur e lt ou lt inf rieur ou gal e gt sup rieur e 2 ou gt sup rieur ou gal La compr hension de ces quatre op rateurs ne doit pas poser de probl me Le r sultat est vrai si la valeur de gauche est inf rieure inf rieure ou gale su
71. oit pEncours gt pSuiv si vous tes en fin de liste La valeur NIL Donc les deux sont identiques et ajout_mlilieu peut remplacer ajout_fin La proc dure ajout_element se trouve simplifi e ainsi Les deux autres proc dures ne servent plus rien Proc dure ajout_element vrech vnouveau entiers pTete pointeur sur element Si pPrec NIL Alors ajout_d but pNouveau pTete Sinon ajout_milieu pNouveau pPrec pEncours FinSi FinProc f Suppression d un l ment L ajout d l ments est un grand pas en avant car vous connaissez et comprenez int gralement le principe inh rent aux listes cha n es Pour supprimer un l ment de cette liste c est quasiment la m me chose il faut juste recoller les morceaux et lib rer la m moire allou e l l ment supprim Il y a quatre possibilit s e Supprimer le seul l ment de la liste e Supprimer le premier l ment de la liste e Supprimer le dernier l ment de la liste e Supprimer un l ment au milieu de la liste Il faut que l l ment supprimer existe donc tout d abord le rechercher et conna tre son adresse et celle de l l ment pr c dent L l ment pr c dent verra son pointeur pSuiv prendre comme valeur le pointeur pSuiv de l l ment trouv Les fonctions suivantes restructurent la liste pour lui redonner le bon cha nage La lib ration de la m moire occup e par l l ment effacer sera effectu e selon le m me mod le que la foncti
72. p ter b b 1 R p ter c c l nbl a 100 b 10 c nb2 a b c Si nbl nb2 Alors Ecrire nb1l a b c FinsSI Jusqu c 10 Jusqu b 10 Jusqu a 10 Fin En PHP lt html gt lt head gt lt meta gt ENI Editions All rigths reserved lt title gt Trois boucles 2 lt title gt lt head gt lt body gt lt php x 1 do y 1 do z 1 do nbl x 100 y 10 z nb2 pow x 3 pow y 3 pow z 3 if nbl nb2 echo nbl nb2 x y z lt br gt z while z lt 10 Sy Jwhile y lt 10 SEE Jwhile x lt 10 2 gt lt body gt lt html gt ENI Editions All rigths reserved Pour Fin Pour 1 Une structure pour compter Troisi me et derni re structure it rative de l algorithmique le Pour Fin Pour est une boucle l usage quasi exclusif des compteurs chaque passage dans la boucle un compteur est incr ment ou d cr ment selon le cas On dit alors qu il s agit d une structure incr mentale Sa syntaxe en pseudo code est la suivante Pour variable De d but fin PAS pas Faire Bloc d instructions Fin Pour chaque passage dans la boucle la variable prendra successivement chacune des valeurs dans l intervalle a b a et b inclus Le pas est optionnel et est de 1 par d faut Le pseudo code suivant compte de 1 10 Variable cpt en Num rique D but Pour cpt De 1 10 Faire Ecrire cpt Fin Pour Fin Il est possible de trouve
73. pas une erreur ni m me une faute lourde mais ce n est pas une raison L algorithme suivant est une illustration de la forme complexe elle v rifie si trois valeurs entr es au clavier sont tri es par ordre croissant PROGRAMME TRI VAR X Y z entiers DEBUT Afficher Entrez trois valeurs enti res distinctes Saisir x y 2Z Si z gt y ET y gt x Alors Afficher Tri s en ordre croissant Sinon Afficher Ces nombres ne sont pas tri s Finsi FIN Le code suivant en PHP n est pas bien difficile comprendre lt html gt lt head gt lt meta gt lt title gt trie lt title gt lt head gt lt body gt lt php if lisset _GET x gt lt form method GET gt x lt input type text size 4 name x gt lt br gt y lt input type text size 4 name y gt lt br gt z lt input type text size 4 name z gt lt br gt lt input type submit name 0K gt lt br gt lt form gt lt php k else x _GET x y _GET y z _GET z if z gt y amp amp y gt x echo Tries en ordre croissant else echo Ces nombres ne sont pas tries gt lt body gt lt html gt 4 Tests imbriqu s Vous connaissez le dicton populaire avec des si on mettrait Paris en bouteille qui r pond g n ralement une accumulation de conditions s il fait beau et qu il fait chaud et que la voiture n est pas en panne alors nous irons la mer sinon si la voit
74. performances pour des applications complexes et d augmenter encore sa modularit Un nouveau moteur a vu le jour appel Zend Engine contraction de Zeev et Andi PHP 4 sort officiellement en mai 2000 et apporte des performances accrues le support de plusieurs serveurs web les sessions une s curit accrue PHP 5 sorti en juillet 2004 propose entre autres une am lioration des performances du moteur Zend Zend Engine 2 un mod le objet tendu et tr s proche du C une compatibilit accrue avec de nouveaux standards et les anciens RPC XML NET C est actuellement la derni re version stable c Informations pratiques PHP peut tre utilis pour n importe quel projet dont e les forums et messageries e le commerce lectronique e la banque les comptes en ligne les paiements en ligne e la publication en ligne e les moteurs de recherche Tout ce que vous voulez en fin de compte Voici quelques sigles et abr viations conna tre et qui seront parfois utilis s par la suite dans ce livre e HTML Hypertext Markup Language e PHP PHP Hypertext PreProcessor e SQL Structured Query Language e MySQL Serveur de base de donn es et les outils pour y acc der e LAMP Linux Apache MySQL PHP le quatuor gagnant des serveurs web d Pages dynamiques Une page statique est une page crite directement en HTML Elle peut ventuellement incorporer du code Javascript lui donnant un semblant de dynamisme
75. place une s rie d exceptions Or l objectif n est pas de multiplier ces conditions mais de toutes les r unir au sein de l unique expression bool enne du Tant Que Il faut donc r unir toutes les conditions d arr t de la boucle en un seul point Le break existe tel quel en PHP Voici donc un exemple de ce que th oriquement il ne faut pas faire lt html gt lt head gt lt meta gt lt title gt Break lt title gt lt head gt lt body gt lt php cpt l1 while true echo cpt lt br gt if cpt 10 break Scpt gt lt body gt lt html gt En algorithmique il est toujours possible de trouver une expression bool enne m me si elle est longue et complexe permettant d viter l utilisation de break et de continue Si vous n tes pas d accord votre professeur risque de vous mettre au d fi de trouver un exemple contradictoire Peine perdue Il faut cependant mod rer ces propos L interruption d une boucle au milieu de celle ci est d conseill e certes Mais comme pour tout il faut se m fier des g n ralisations Il y a videmment des cas o il devient bien trop compliqu de cr er des boucles uniquement pour respecter ce principe S il faut cr er une expression bool enne rallonge et bidouiller c est le mot parfois son bloc d instructions avec des m thodes tarabiscot es des drapeaux tout va par exemple d autant plus que celui ci prend d j un grand nombre de lignes a
76. rence entre les variables locales et globales Ici pTete est une variable locale elle sera d truite la fin de la fonction Pourtant l adresse qu elle contient est retourn e C est que le pointeur n tant pas lib r la zone m moire allou e dynamiquement l est pour toute la dur e du programme A la sortie de la fonction la zone m moire existe encore et donc son adresse est encore valide Remarquez que l affectation de la valeur NIL pSuiv n est pas n cessaire car c est sa valeur par d faut lors de la d claration de l enregistrement structur Pour exploiter cette fonction il suffit de d clarer un pointeur et lui affecter le r sultat de celle ci Programme listel Var pTete pointeur sur element D but pTete cree_liste Fin La fonction cree_liste est tr s simple Peut tre pourriez vous en profiter pour voir le m canisme simple permettant d ajouter des l ments les uns la suite des autres La fonction cree_liste2 modifi e va vous demander de saisir en boucle des valeurs qui seront ajout es les unes apr s les autres en fin de liste Pour ceci vous aurez besoin de conserver chaque fois trois informations e Le pointeur pTete de la t te de la liste qui devra tre retourn par la fonction e Le pointeur pEncours de l l ment actuel de la liste de l l ment ajout en fait e Le pointeur pPrec de l l ment pr c dent dont le pointeur pSuiv devra recevoir l adresse de l l ment en cours Fonc
77. reserved sur une variable de type long devrait donc tre d clar avec un type long Pointeur pPointeur sur l entier toto Oxfde23a50 Oxfde23a51 Oxfde23a52 Oxdfe23a56 pPointeur Oxfde23a53 Oxfde23a54 Oxfde23a55 Oxfde23a56 Oxfde23a57 y Oxfde23a58 Re valeur Oxfde23a59 Le pointeur et la variable point e en m moire b Le C roi des pointeurs Peut tre tes vous perdu dans ces d finitions et explications L exemple suivant en C devrait suffisamment vous clairer pour la suite Supposez que vous voulez placer dans un pointeur l adresse de la variable i de l exemple pr c dent Pour d clarer un pointeur en C il suffit d ajouter une toile avant son nom Chaque ligne est comment e pour vous aider L objectif est de faire pointer un pointeur p_i sur l adresse de l entier i Pour cela le pointeur recevra cette adresse l aide du signe amp devant i car comme vu auparavant ce signe permet d acc der l adresse d une variable long i 123456 Un entier long contenant 123456 long p_i Un pointeur sur un entier long Le pointeur p_i re oit l adresse de i p_i amp i printf d l adresse xd taille de d octets n i amp i sizeof i printf Le pointeur p_i pointe sur l adresse xd n p_i l ex cution sur la machine de l auteur on obtient ceci 123456 l adresse 0xbfa95cbcd taille de 4 octets Le pointeur p_i pointe sur l adresse 0xbfa95cbcd No
78. s C est vous d ajouter avant le nom et le type du membre s il est public priv ou prot g Les d finitions public et private sont exactement celles vues ci dessus tandis que protected limite la port e des attributs aux classes d riv es ENI Editions All rigths reserved Il n est pas possible d utiliser le polymorphisme en PHP ce qui emp che la cr ation de plusieurs constructeurs Il faut donc ruser en cons quence Ici c est assez simple mais il existe d autres moyens de v rifier la liste des param tres pass s une fonction 3 H ritage PHP autorise l h ritage simple mais pas l h ritage multiple Vous verrez cependant qu il est possible de ruser un petit peu avec les interfaces L exemple des figures g om triques peut s appliquer ici car PHP supporte tr s bien les classes et m thodes abstraites L h ritage est exactement comme en algorithmique sauf qu la place de h rite de vous utilisez le mot cl extends Concernant les classes et m thodes abstraites vous ajoutez devant le nom le mot cl abstract Notez que dans la d finition de la classe abstraite quelques attributs priv s sont remplac s par des attributs prot g s Autrement les classes d riv es n auraient pas eu le droit d y acc der Enfin notez aussi l utilisation du mot cl parent qui remplace la classe ou plut t l objet h rit e utilis ici pour appeler le constructeur de la classe figure charg de placer les bonnes couleurs
79. suite jusqu aux extr mit s o poussent les feuilles Selon le cas apr s les tableaux et les listes vous pouvez vous aussi choisir de repr senter l organisation de vos donn es sous forme d arborescence en programmation La notion d arborescence est tr s courante sur votre ordinateur personnel de nombreuses informations sont repr sent es directement ou indirectement sous forme d arborescence les dossiers des disques durs la structure d une page web la structure d un site web la d composition de l ex cution d un programme et de ses appels aux sous programmes bref tout ce qui peut incorporer une notion de hi rarchie peut tre repr sent sous forme d une arborescence L exemple le plus simple comprendre est la g n alogie On parle d arbre g n alogique Partant de vous 1 vous placez tout d abord vos parents 2 puis les parents de vos parents 4 puis les parents de ces derniers 8 et ainsi de suite Tous sont reli s par leurs liens de parent vous avec vos parents parents avec grands parents et ainsi de suite Le sch ma part de vous mais pourrait partir de vos arri res grands parents ayant x enfants y petits enfants z arri res petits enfants dont vous chaque individu tant le successeur de son parent et le pr d cesseur de ses enfants AGP re1 lAGP re AGM re AGP re4 Fa G P re2 Un arbre g n alogique est un arbre binaire Comment repr senter un tel arbre g n alogique en programm
80. suppr_unique et suppr_dernier sont donc inutiles sauf pour l exemple G n ralisation Tout d abord vous devez trouver l l ment supprimer S il n y est pas il n y a rien supprimer Donc si pEncours contenant l l ment trouv vaut NIL il n y a rien faire Ensuite il y a deux cas de figure e pPrec vaut NIL l l ment supprimer est le premier ou le seul e pPrec est diff rent de NIL l l ment supprimer est au milieu ou en fin de liste Ensuite apr s avoir appel la fonction ad quate vous n avez plus qu lib rer la m moire allou e pour l l ment et passer son pointeur NIL La proc dure suppr_element ne prend que deux arguments la valeur de l l ment supprimer et la t te de la liste Proc dure suppr_element E vrech entier ES pTete pointeur sur element Var pPrec pEncours pointeurs sur element D but recherche_liste vrech pTete pPrec pEncours pointeurs sur elements Si pEncours NIL Alors Afficher Element absent Sinon Si pPrec NIL Alors suppr_premier pTete Sinon suppr_milieu pPrec pEncours Finsi Lib rer pEncours pEncours NIL FinProc g Supprimer toute la liste Pour supprimer tous les l ments de la liste il suffit de supprimer tous les l ments jusqu au dernier Mais attention Ne supprimez pas un l ment sans avoir auparavant conserv l adresse de l l ment suivant Si vous ne l avez pas fait non seulement les l ments suivants sont perdus m
81. sur 64 bits permet de repr senter des dates de l poque o l univers tel que nous le connaissons n existait pas et dans le futur une p riode o notre Soleil n existera plus depuis bien longtemps Il suffit donc de passer le timestamp sur 64 bits et sachant qu il existe un type timestamp en programmation de recompiler tous les programmes Il n y a donc aucun souci se faire 4 Les caract res Les caract res sont habituellement cod s sur 8 bits soit un octet en utilisant la table ASCII Dans cette table les 128 premi res valeurs ne repr sentent pas que les caract res pour les anglais mais aussi divers codes non affichables utilis s pour contr ler l affichage d un terminal Les caract res de 0 31 vont contenir des l ments comme le retour chariot le passage la ligne la tabulation etc Le caract re 32 est l espace le 127 le caract re de suppression Le A en majuscule d marre 65 en minuscule 97 les chiffres en partant de 0 48 Le reste est la ponctuation divers signes comme les symboles mon taires les op rateurs et comparateurs arithm tiques et ainsi de suite Typiquement la cha ne Hello World est repr sent e ainsi Les caract res d une m me cha ne occupent tous des cases m moires contigu s L ordinateur ou plut t les langages utilisant les cha nes de caract res doivent savoir o celle ci commence c est indiqu en interne par la variable elle m me et o elle finit C est le car
82. temps voulu Lorsque le sous programme se termine l instruction situ e juste en dessous de son appel est ex cut e On dit qu il y a retour du sous programme vers l instruction suivante ou appelante Enfin un sous programme peut tre appel en lui fournissant des valeurs appel es param tres Ces valeurs seront plac es dans des variables utilisables au sein du sous programme comme toute autre variable Voici l exemple complet en PHP avec en gras l appel la m thode sous programme lt html gt lt head gt lt meta gt lt title gt d claration de fonction lt title gt lt head gt lt body gt lt php function RepeteCar for S1i 1l 81 lt 20 81i4 echo Mr echo lt br gt echo Affichage de 10 lignes de 20 caract res lt br gt for i 1 i lt 10 i RepeteCar re lt body gt lt html gt 4 Fonctions et proc dures Le sous programme RepeteCar a t d clar avec le mot cl Proc dure et il vous a t indiqu aussi l existence du mot cl Fonction Il y a donc deux types de sous programmes Certains langages peuvent proposer ou l un ou l autre parfois les deux Vous entendrez parfois parler de langages proc duraux comme le Pascal ou fonctionnels comme le C Avant de continuer juste un petit mot sur PHP PHP ne fait pas de diff rences entre les fonctions et les proc dures telles que pr sent es ici En PHP les proc dures sont des fonctions qui ne retournent pas de v
83. texte kwrite ayant t utilis pour la capture ci dessus a fourni un avertissement int ressant S Fichier binaire ouvert KWrite T Le fichier file home seb ballistics_demo ballistics_ demo est binaire l enregistrer cr era un fichier corrompu _ Ne plus afficher ce message Risque de corruption d un fichier binaire Un fichier binaire n utilise pas de repr sentation ASCII ou Unicode pour repr senter les nombres d o les caract res farfelus affich s Aussi r enregistrer un fichier binaire avec un diteur de texte cassera le format du fichier rendant ce dernier totalement inutilisable gt La configuration compl te de Windows est plac e dans un registre ou base de registre Cette base est stock e dans deux fichiers system dat et users dat au format binaire S ils sont corrompus il est fortement probable de devoir tout r installer L acc s ce registre ne vous est qu indirectement possible via l diteur de base de registre regedit ou regedt32 mais pas en l ouvrant sous notepad c Le fichier texte Un fichier texte est ce qu il annonce il contient du texte sous forme de lignes Chaque ligne est distincte des autres Pour savoir s il doit passer la ligne l ordinateur ou plut t le syst me d exploitation ajoute des caract res sp ciaux Sous Windows ce sont les caract res ASCII CR Carriage Return retour chariot qui vaut 13 et LF Line Feed Saut de Ligne qui vaut 10 Cette s quence CRLF pas
84. title gt lt head gt lt body gt lt php t array 48 17 25 9 34 12 28 1 4 98 0 33 48 10 11 9 25 n 0 Scpt count t while n lt cpt n 3 n 1 while n 0 n int n 3 for i n i lt cpt S Si mem t i j i while j gt n 1 amp amp t j n gt mem t j t j n j j n t j mem for j 0 j lt cpt j echo t S i echo lt br gt 2 gt lt body gt lt html gt 2 Recherche par dichotomie La recherche par dichotomie ne s applique que sur les tableaux d j tri s Vous avez d j rencontr un algorithme de recherche d l ment dans un tableau non tri Mais celui ci pose un probl me si le tableau contient 10 000 l ments et que par pur hasard celui que vous cherchez est le 10000 ME il faut balayer l int gralit du tableau Cette recherche s quentielle n est pas id ale Dans un tableau tri la probl matique est radicalement diff rente Rien qu avec une recherche s quentielle il devient inutile de balayer tout le tableau il suffit de s arr ter d s que la valeur de l l ment du tableau devient sup rieure ce qu on recherche d o une probable complexit moyenne plus basse Mais il reste une solution plus efficace La dichotomie consiste diviser par deux l intervalle de recherche tant que l l ment recherch n est pas trouv Sur un tableau t de 10 l ments tri s Indice Valeur Vous voulez savoir si
85. tous les canaux au del du num ro deux donc 3 et suivants pour vos propres fichiers L ouverture d un fichier consiste donc directement ou indirectement lui rattacher un canal Les donn es que vous crirez dans le fichier iront de votre programme vers le fichier par ce canal et celles que vous lirez du fichier au programme toujours par ce canal Les notations algorithmiques peuvent varier sur ce point Certaines notations reprennent la syntaxe d un langage de type Basic ou Visual Basic dans lequel vous devez indiquer vous m me quel num ro de canal utiliser l ouverture du fichier D autres reprennent une syntaxe issue du C o c est la fonction C ouvrant le fichier qui choisit un canal et vous r cup rez un identifiant de fichier sous forme de variable Cet identifiant est le nom logique du fichier au sein du programme C est cette notation qui est g n ralement pr f rable en algorithmique En C une fonction d ouverture de fichier retourne une variable de type FILE qui est en fait un type structur contenant diverses informations dont un entier contenant un num ro qui se r v le tre le num ro du descripteur de fichiers au niveau du syst me d exploitation Des limites sont d finies au sein du syst me Sous Linux il ne peut y avoir par d faut plus de 1024 1024 fichiers ouverts mais en pratique 1024 par processus programme Cela devrait suffire cependant divers m canismes permettent d aller encore plus loin g n ralement
86. un arsenal int ressant de fonctions pour convertir du texte en entier r el etc Un souci peut se poser avec les r els les anglo saxons et d autres utilisent le point comme s parateur d cimal alors que vous utilisez probablement la virgule en France Certes les langages de programmation utilisent principalement le point mais les tableurs francis s utilisent la virgule Amis canadiens si vous lisez ce livre vous tes plus chanceux que les fran ais qui devront faire attention en convertissant une cha ne en nombre et vice versa cause de la virgule Dans le doute lisez le manuel de votre langage Quasiment tous les fichiers de configuration d un syst me d exploitation Unix sont des fichiers texte Pour modifier cette configuration il suffit donc bien souvent de l ouvrir avec un diteur de texte de modifier ou d ajouter des lignes de sauver et c est tout d Quel format utiliser Faites preuve de bon sens Il serait ridicule d utiliser un fichier texte pour sauver une image tout comme il serait ridicule d utiliser un fichier binaire uniquement pour sauver du texte simple un format de traitement de texte est plus complexe qu il n y para t Des formats r put s la mode comme le XML sont des fichiers la structure pouvant devenir tr s complexe et pourtant ce sont des fichiers texte Fichier texte Les propri t s d un fichier texte sont les suivantes e Les fichiers texte sont utilis s pour stocker des donn e
87. un charg de compter le nombre d l ments dans un tableau l autre de saisir des donn es ou d en lire dans un fichier Le langage PHP propose une quantit impressionnante de sous programmes calculs math matiques travaux graphiques manipulations de bases de donn es plusieurs milliers Autrement dit les concepteurs du langage ou d autres personnes fournissent des biblioth ques de sous programmes pour r duire autant que possible et sans tomber dans l exc s le travail des programmeurs Avant de cr er vos propres sous programmes v rifiez tout d abord dans la documentation du langage que vous utilisez si vous pouvez y trouver votre bonheur Un sous programme pr d fini porte un nom qui refl te souvent ce qu il fait C est une proc dure ou une fonction cf section Variables locales et globales de ce chapitre plus souvent une fonction qui retourne un r sultat b Quelques exemples Fonctions sur cha nes Vous pouvez obtenir la longueur d une cha ne de caract res avec la fonction longueur Elle s emploie en passant entre parenth ses une cha ne de caract res et retourne comme r sultat une valeur enti re qui est le nombre de caract res de cette cha ne Programme len Var txt cha ne l sentier D but txt Un petit texte l longueur txt Afficher 1 affiche 14 Fin Les fonctions milieu gauche et droite permettent de d couper des morceaux dans une cha ne de caract res La fonction milieu prend tr
88. une m thode apr s le point vous lancez l ex cution de celle ci Type Classe Ecran ENI Editions All rigths reserved SIDE FinClasse Programme objl Var ol Ecran D but modification des attributs ol type LCD ol connecteur VGA acc s direct aux attributs Afficher ol type appel aux m thodes ol mise_en_veille ol ralumer ol affiche mod le Fin 6 Les m thodes Regrouper les fonctions et les donn es au sein d une m me structure appel e objet est d j bien plus coh rent pour la pens e Mais comment manipuler les attributs de l objet au sein d une de ses m thodes C est l qu est un tr s gros avantage alors qu en programmation proc durale vous deviez passer la donn e la variable en argument l c est totalement inutile la m thode sait implicitement que l attribut auquel il acc de appartient l objet Classe Ecran attributs type cha ne m thodes Proc dure modifie _type E t cha ne D but typert FinProc FinClasse Il arrive parfois que des noms d attributs soient identiques ceux d autres objets ou arguments pass s en param tres de m thodes Pour viter la confusion vous pouvez explicitement d signer que le membre appartient votre objet en pr cisant le mot cl this suivi du point et de son nom This sera remplac par l objet lui m me lors de l appel Classe Ecran Proc dure modifie _type E t cha ne D but this type t FinProc FinClas
89. utilisation lt html gt lt head gt lt meta gt lt title gt Cercle avec constante lt title gt lt head gt lt body gt lt php define P1l 3 1415927 Sr 5 2 surface PI r r perimetre 2 PI r echo S Ssurface perimetre gt lt body gt lt html gt ENI Editions All rigths reserved Op rateurs et calculs 1 Les affectations Le symbole d affectation fait partie d une grande famille celle des op rateurs Comme son nom l indique un op rateur est utilis pour et dans des op rations Le symbole est un op rateur d affectation Il existe plusieurs op rateurs qui servent aux calculs affectations comparaisons rotations de bits groupages etc 2 Les op rateurs arithm tiques Pour que les algorithmes puissent effectuer des calculs il faut pouvoir au moins faire des op rations simples Vous utiliserez pour cela les symboles suivants e addition e soustraction e ou x multiplication il est plus facile d crire un x pour fois qu une toile e division e ou mod modulo e DIV la division enti re Rappel un modulo est le reste d une division enti re Par exemple 15 2 vaut 7 mais il reste 1 On dit que 15 modulo 2 vaut 1 Ces op rateurs sont dits binaires car ils s utilisent avec deux valeurs une avant le symbole et une apr s Les valeurs avant et apr s peuvent tre des donn es de m me type que la variable qui re oit les r sultats ou des
90. valeurs dans une m me variable Ils peuvent contenir n valeurs g n ralement du m me type dans les langages typ s comme le C ou non langages non typ s comme le PHP Des variables particuli res appel es les pointeurs ne contiennent pas directement une valeur mais l adresse d une variable contenant cette valeur c est dire l adresse de l emplacement de cette valeur dans la m moire de l ordinateur Bien que plus difficile appr hender elles permettent une souplesse in gal e dans les manipulations de valeurs Pour pallier au risque de complexit dans certains langages volu s la notion de r f rence remplace parfois celle de pointeur notamment en Java ou en PHP b Les traitements Les traitements sont effectu s soit dans le programme principal qu on appelle parfois le corps de programme soit dans des sous programmes appel s proc dures ou fonctions Dans ce dernier cas la fonction est utilis e comme une instruction retournant une valeur alors que la proc dure est un bloc d instructions sans valeur mais pouvant ventuellement en retourner via un passage de valeurs au travers des param tres Des langages comme le C PHP ou Java ne font pas de distinction entre ces deux notions une fonction ne retournant pas forc ment de valeur 3 L objet a Dans la vie courante Regardez autour de vous de quoi sont constitu es tous les objets r els ou abstraits qui vous entourent Un objet r el est par exemple une sali re un
91. 001 9 10100111 39 Il y a un probl me Vous devriez obtenir 21 soit 00010101 C est qu en r alit un nombre n gatif n est pas repr sent comme ceci L ordinateur ruse avec les manipulations binaires L astuce consiste prendre le compl ment un de la valeur binaire en valeur absolue 9 gt 9 et de lui ajouter un on obtient au final un compl ment deux Le compl ment un consiste remplacer tous les z ros 0 par des un 1 et tous les 1 par des 0 11111111 compl ment un 00001001 9 11110110 tout est invers 00000001 1 11110111 quivaut 9 repr sentation machine gt Si vous additionnez un nombre avec son compl ment deux vous obtenez 0 plus une retenue Maintenant additionnez ce r sultat 30 11110111 quivaut 9 repr sentation machine 00011110 30 00010101 21 plus une retenue C est gagn En pratique le microprocesseur n effectue pas tous ces calculs de conversion car il sait repr senter nativement en interne toutes ces valeurs mat riellement 2 La repr sentation des nombres r els S il est simple de se repr senter un nombre entier en binaire cela semble plus complexe avec un nombre virgule En effet le principe m me du binaire veut que chaque valeur repr sente une puissance de 2 en fonction de sa position de 0 n donc une valeur enti re En plus les nombres r els n ont jamais la m me taille plus ou moins de chiffres avant la vi
92. 10 Faire resultat cpt table Afficher table x cpt resultat cpt cpt 1l FinTantQue FIN Ce qui donne en PHP lt html gt lt head gt lt meta gt lt title gt Table de multiplication lt title gt lt head gt lt body gt lt php if lisset _GET table pe lt form method GET gt Table de multiplication lt input type text size 4 name table gt input type submit name OK gt lt form gt lt php erse table _GET table l l Scpt 1 while cpt lt 10 resultat table Scpt echo S table xS S cpt resultat lt br gt Scpt gt lt body gt lt html gt b Une factorielle Dans le m me ordre d id e voici un petit algorithme qui calcule une factorielle Pour rappel la factorielle de n s crit n et se calcule en multipliant toutes les valeurs de 1 n Ainsi 10 10 9 8 7 6 5 4 3 2 1 soit 3628800 Dans chaque passage dans la boucle il s agit de multiplier le compteur par le r sultat de la multiplication pr c dente Notez qu il est inutile de multiplier par un cela ne change pas le r sultat et le programme effectue une boucle de trop De m me cette fois l algorithme comptera l envers il partira de n pour descendre jusqu deux PROGRAMME FACT VAR cpt resultat entiers DEBUT Afficher Quelle factorielle Saisir cpt ENI Editions All rigths reserved 92 resultat cpt Tant que cpt gt 2 Faire cpt cpt 1 resultat cpt resulta
93. 2 abs nombre2 echo S nombre 2 2 gt lt body gt lt html gt b Forme complexe La forme complexe n a de complexe que le nom Il y a des cas o il faut ex cuter quelques instructions si la condition est fausse sans vouloir passer tout de suite l instruction situ e apr s le FinSi Dans ce cas utilisez la forme suivante Si bool en Alors Blo d instructions Sinon Bloc d instructions Finsi Si la condition est vraie le bloc d instructions situ apr s le Alors est ex cut Ceci ne diff re pas du tout de la premi re forme Cependant si la condition est fausse cette fois c est le bloc d instructions situ apr s le Sinon qui est ex cut Ensuite le programme reprend le cours normal de son ex cution apr s le FinSi Notez que vous auriez pu tr s bien faire un quivalent de la forme complexe en utilisant deux formes simples la premi re avec la condition vraie la seconde avec la n gation de cette condition Mais ce n est pas tr s joli m me si c est correct Retenez que e Si dans une forme complexe l un des deux blocs d instructions est vide alors transformez la en forme simple modifiez la condition en cons quence e Laisser un bloc d instructions vide dans une forme complexe n est pas conseill c est une grosse ENI Editions All rigths reserved maladresse de programmation qui peut tre facilement vit e c est un programme sale Cependant certains langages l autorisent ce n est
94. 2bits lt br gt echo is_float reel32bits lt br gt echo is_int reel32bits lt br gt echo is_double reel64bits gt lt body gt lt html gt b Autres types num riques Il existe d autres types num riques moins utilis s tout au moins sur les ordinateurs personnels ou dans des langages de programmation classiques mais bien plus sur des moyens ou gros syst mes ou dans des bases de donn es Le syst me BCD binary coded decimal pour d cimal cod en binaire est utilis principalement en lectronique car il est assez simple mettre en uvre En BCD chaque chiffre est cod sur 4 bits 0000 0 5 0001 1 10 0010 2 10 0011 3 0 et ainsi de suite jusqu 1001 9 10 Comme un ordinateur ne manipule que des octets compos s de 8 bits il existe deux m thodes pour coder des nombres en BCD e soit ne mettre qu un chiffre par octet et compl ter le reste que par des 1 ou des 0 EBCDIC e soit mettre deux chiffres par octet et ajouter un signe la fin packed BCD Par exemple le nombre 237 11110010 ITIILOOLL LLLIGILI en EBCDIC 00100011 01111100 en Packed BCD le 1100 final est le 1101 pour le Vous rencontrerez peut tre un jour le type mon taire pour g rer les sommes de m me nom et notamment les r gles d arrondi mais aussi et surtout une grande quantit de types permettant de g rer les dates couramment exprim s sous le nom date L ordinateur de type PC
95. 5 while x x lt a Sx if x x a SX for i 1 i lt cpt i x 0 5 x a x echo x lt br gt echo pow x 2 lt br gt gt lt body gt lt html gt d Calcul du nombre PI Sachant maintenant l aide des boucles peu pr s tout faire notamment calculer une racine carr e il serait int ressant de trouver une application encore plus pr cise Et pourquoi pas tenter d approcher la valeur de PI Il existe plusieurs moyens d approcher cette valeur PI est la circonf rence d un cercle dont le diam tre est 1 Sans vous exposer ici les d tails de la m thode sachez que Leonhard Euler grand savant du XVIII ME si cle a r solu un probl me connu de longue date la d termination de la somme des inverses des carr s d entier La formule est la suivante ml 1 1 1 1 1 6 Fr LS Remarquez la pr sence d une it ration sur les puissances de chaque d nominateur diviseur Voici une application de la boucle Pour De m me remarquez que PI est lev au carr Il faudra donc que vous effectuiez une racine carr e la fin pour obtenir le bon r sultat Donc e Effectuer n divisions successives de 1 n2 e Multiplier ce r sultat par 6 e Extraire la racine carr e de ce r sultat pour obtenir PI Variables i x a cpt en Num rique D but cpt 100000 a2 Pour i de 2 cpt Faire a a l i i Fin Pour a a 6 xel Tant Que x x lt a Faire x X t1 Fin Tant Que Si x x a Alo
96. 90 lt 1 on pose 0 0 0 0 390x2 0 780 lt 1 on pose 0 0 00 0 780x2 1 560 gt 1 on pose 1 0 001 0 560x2 1 120 gt 1 on pose 1 0 0011 0 120x2 0 240 lt 1 on pose 0 0 00110 0 240x2 0 480 lt 1 on pose 0 0 001100 0 480x2 0 960 lt 1 on pose 0 0 0011000 0 960x2 1 920 gt 1 on pose 1 0 00110001 0 920x2 1 840 gt 1 on pose 1 0 001100011 0 840x2 1 680 gt 1 on pose 1 0 0011000111 0 680x2 1 360 gt 1 on pose 1 0 00110001111 0 360x2 0 720 lt 1 on pose 0 0 001100011110 0 720x2 1 440 gt 1 on pose 1 0 0011000111101 0 440x2 0 880 lt 1 on pose 0 0 00110001111010 0 880x2 1 760 gt 1 on pose 1 0 001100011110101 0 760x2 1 520 gt 1 on pose 1 0 0011000111101011 et ainsi de suite Ici vous obtenez une pr cision de 2 16 Si d ailleurs vous faites le total en d cimal 273 274 278 27 942710 vous obtenez un total de 0 1949920654296875 Vous voyez qu on n obtient pas la valeur exacte M me avec plus de place et plus de calculs le r sultat approcherait 0 1949999999 sans jamais atteindre 0 195 aa 16 0 195 0011000111101011 r 182 195 10110110 0011000111101011 10110110 0011000111101011 1 01101100011000111101011x27 arrondi une pr cision de 2 en arrondi Enfin puisque le 1 avant les virgules est implicite on le supprime On obtient ce qu on appelle une mantisse Mantisse 01101100011000111101011 Plus on souhaite que la pr c
97. Bravo Fin Fonctions de conversion Vous pouvez convertir une cha ne de caract res en valeur num rique l aide de la fonction chnum qui prend comme param tre la cha ne de caract res et qui retourne la valeur en entier ou r el selon le cas La cha ne doit tre une repr sentation d une valeur num rique et rien d autre La fonction numch fait exactement le contraire elle convertit un nombre en cha ne de caract res l id al pour sauver tout ceci dans un fichier texte Voici un exemple simple Programme conversion Var rPi r el cPi cha ne D but rPi 3 1415927 cPi numch rPi Afficher cPi cpi 3 14 rPi chnum cPi Fin Fonctions pr d finies en PHP Les fonctions pr d finies en PHP sont extr mement nombreuses Dans les exemples pr c dents vous avez eu l occasion d en rencontrer quelques unes notamment des conversions de cha nes vers des entiers par exemple Les fonctions pr d finies sont en fait souvent associ es des types particuliers des objets particuliers etc Le mieux est de vous reporter la documentation en ligne de PHP l adresse http www php net manual fr Voici quelques courts exemples qui peuvent vous int resser e strlen retourne la longueur de la cha ne substr chain d but fin d coupe un morceau de cha ne e trim supprime tous les espaces en d but et fin de cha ne isempty retourne vrai ou faux selon que la cha ne est vide ou non Par exemp
98. Certains animaux en font leur sp cialit comme les abeilles chez une m me esp ce il y a trois formes d individus la femelle reine les m les faux bourdon et les ouvri res femelles st riles Trois formes diff rentes pour la m me esp ce ou plut t la m me larve la base ENI Editions All rigths reserved ff 12 Du c t de l objet le polymorphisme permet de cr er plusieurs m thodes qui portent le m me nom On distingue trois types de polymorphisme b Le polymorphisme ad hoc G n ralement dans un langage proc dural vous ne pouvez avoir qu une seule proc dure portant le m me nom dans un m me programme Si le sous programme Afficher doit tre utilis pour des donn es diff rentes vous devez soit l adapter en cons quence soit cr er autant de sous programme Afficher _xxx o xxx nommerait le r le exact du sous programme En objet comme chaque d finition de classe est ind pendante de sa voisine vous pouvez r utiliser les m mes noms de m thodes dans des classes diff rentes puisqu elles n ont aucun rapport entre elles Classe lion h rite de Carnivore m thodes publiques Proc dure affiche _ nom FinClasse Classe Ecran m thodes publiques Proc dure affiche _ nom FinClasse c Le polymorphisme d h ritage Vous avez le droit et c est souvent le cas de red finir une m thode d une superclasse dans une classe d riv e avec le m me nom de m thode Une classe Object com
99. Classe Musique impl mente lecture attributs priv s morceau cha ne piste cha ne position entier duree entier m thodes publiques Constructeur Musique m p cha nes D but this morceau morceau this piste p position 0 M thode de calcul dur e du morceau en secondes duree duree_morceau morceau Fin D but d impl mentation de l interface Proc dure lecture D but FinProc Proc dure pause D but Fin Proc dure stop D but ENI Editions All rigths reserved Fin Continuez ici FinClasse ENI Editions All rigths reserved L objet en PHP 1 Les langages objet Les deux parties pr c dentes de ce chapitre vous ont pr sent ce qu est la programmation objet Il existe plusieurs langages orient s Objet On parle de Programmation Orient e Objet POO Les pr mices de la programmation objet sont anciennes pour de l informatique 1967 avec le langage Simula puis Smalltalk L ge d or d bute au d but des ann es 1980 avec tout d abord l Objective C encore tr s utilis notamment dans le d veloppement de MacOS et de ses outils puis le C with Classes en 1983 qui deviendra le C puis Eiffel puis le Lisp Objet et ainsi de suite Les ann es 1990 ont vu l explosion de l objet toutes les sauces pour le meilleur et pour le pire et pas uniquement dans les langages Ainsi des bases de donn es objet sont apparues D anciens langages comme le Pascal le Basic ou m me le
100. Elle nomme la zone de la m moire contenant la donn e La zone de la m moire contenant la donn e est d finie par deux l ments e L adresse de d but de la donn e c est dire l adresse du premier octet contenant la donn e e La taille de cette zone c est dire le nombre d octets constituant les donn es La taille de la zone d pend du type de la donn e Un caract re ASCII n occupe qu un seul octet un entier quatre un entier long huit etc Quand vous acc dez au contenu de la variable vous acc dez au contenu de la zone m moire qui lui est associ e La variable elle m me contient donc une autre information l adresse de la zone m moire laquelle elle est attribu e Par convention un ordinateur sachant g rer beaucoup de m moire les adresses sont not es en hexad cimal C est plus simple de parler d adresse 0Ox2dcf0239 que de l adresse 768541241 Certains langages permettent d acc der et donc de voir l adresse de la zone m moire d une variable tout simplement l adresse de la variable b PHP des limites qui n en sont pas Il va vous falloir l g rement d chanter Le langage PHP utilis depuis le d but de cet ouvrage ne permet pas de conna tre l adresse de la variable En fait la plupart des choses d crites dans les prochaines pages seront en partie ENI Editions All rigths reserved sfs inaccessibles ce langage Et parmi ces choses la possibilit d acc der l adresse m moire des diverses v
101. HP En PHP les variables ne sont pas globales par d faut Si vous souhaitez acc der et modifier une variable du bloc principal au sein d une fonction vous devez l indiquer explicitement au sein de la fonction en pr c dant la variable du mot cl global lt html gt lt head gt lt meta gt lt title gt portee des variables lt title gt lt head gt lt body gt lt php function RepeteCar global c for i 1 i lt 20 i echo c echo lt br gt Sc for nbcar 1 Snbcar lt 10 S nbcar RepeteCar 2 gt lt body gt lt html gt 6 Les param tres Maintenant que vous r servez les variables globales des cas bien pr cis il vous faut trouver un autre moyen de passer des valeurs aux proc dures et aux fonctions Quand en math matiques vous calculez la valeur d une fonction f x vous lui demandez en fait de calculer la valeur de la fonction selon la valeur de x Vous passez donc la valeur de x la fonction Le principe est le m me avec vos algorithmes vous pouvez transmettre des valeurs vos proc dures et fonctions tout comme vous pouvez en recevoir La syntaxe diff re l g rement entre les fonctions et les proc dures pour cette raison Dans les deux cas cependant les param tres se placent entre les parenth ses situ es apr s leur nom Les param tres pass s un sous programme sont g n ralement des variables locales au programme ou sous programme l appelant mais ils ne
102. I Editions All rigths reserved pEncours null SpNouveau new element pNouveau gt valeur vnouveau SpPrec recherche _ liste vrech S SpTete if S SpPrec null S SpEncours pPrec gt pSuiv if pPrec null pTete ajout_ debut SpNouveau pTete else ajout_milieu pNouveau return pTete Fonctions de suppression pTete pTete gt pSuiv return pTete function suppr_milieu pPrec pPrec null SpEncours null function suppr_element vrech function suppr_premier pTete SpPrec pEncours SpEncours SpPrec gt pSuiv S SpEncours gt psSuiv SpTete pPrec recherche _ liste vrech SpTete if S SpPrec null S SpEncours pPrec gt pSuiv else pEncours pTete if SpEncours null if pPrec null pTete suppr_premier SpTete else suppr_milieu SpPrec pEncours SpEncours null return pTete supprimer la liste function suppr_liste pTete pTete null return pTete parcours r cursif if SpEncours null echo pEncours gt valeur LE function parcours_recursif pEncours parcours_recursif pEncours gt pSuiv else echo n programme principal SpTete cree_liste2 parcours_liste pTete echo Saisir la valeur recherchee v int fgets STDIN if existe_liste v pTete else echo Absent n echo Trouv n pTete ajout_element 2 15 pTete parco
103. Le formalisme des noms des variables d pend du langage utilis Parfois un caract re sp cifique indique le type que vous rencontrerez plus bas de la variable ce qu elle peut contenir Certains langages acceptent des noms en lettres minuscules majuscules avec des chiffres dedans des caract res sp ciaux comme le soulign etc Quelques langages dont Java font la diff rence entre les minuscules et les majuscules Si vous pouvez g n ralement utiliser un nom de grande taille vitez pour des raisons purement pratiques les noms rallonge Voici quelques exemples de noms de variables e var e titre e Total e Somme_globale Quand vous programmerez vous veillerez vous renseigner sur les conventions utilis es par le langage pour nommer vos variables certains utilisent des syntaxes tr s particuli res d autres sont beaucoup moins stricts La variable n est qu un outil pour les algorithmes et le programmeur afin qu il puisse se repr senter dans le r el les donn es qu il manipule Si vous modifiez le nom Somme_globale par Pomme _frite partout dans l algorithme ou le programme la variable repr sentera toujours la m me donn e le programme fonctionnera l identique mais ce sera plus difficile pour vous de faire le rapprochement De m me la case m moire ne porte pas r ellement un nom ou tiquette Chaque case est plut t r f renc e par une adresse elle m me exprim e par une valeur binaire C est le compil
104. Que Fermer fic Fin 4 Exemple en PHP PHP sait manipuler les types de fichiers binaires ou texte s quentiels ou en acc s direct Ce n est pas tr s compliqu Le programme PHP suivant est un exemple de lecture et de r criture d enregistrements avec d limiteurs comme le fichier des utilisateurs d Unix Il permet e Ouverture du fichier en lecture e Lecture de chaque ligne e Chaque ligne est plac e dans un tableau deux dimensions la premi re est la ligne la seconde les champs d coup s via la m thode split e Une place est r serv e pour d ventuels traitements sur les enregistrements e Ouverture du fichier de sortie en criture e Recomposition de toutes les lignes via une fonction recolle prenant en param tre un tableau de cha nes et le d limiteur e criture de la ligne reconstruite dans le fichier avec un retour chariot En l tat le programme ne fait qu une simple copie vous de cr er les ventuels traitements entre la lecture et l criture Aussi les lignes sont plac es dans un tableau de taille fixe Peut tre serait il plus avantageux d utiliser des listes cha n es comme expliqu dans le prochain chapitre Les instructions de d claration d ouverture lecture criture et fermeture sont plac es en gras lt php function recolle morceaux separateur ENI Editions All rigths reserved 2 gt l count Smorceaux Schaine for i 0 i lt l it
105. RAMME TXTCOMP VAR x y entiers txt1 txt2 cha nes DEBUT x 1111 y 2 Afficher x gt y txt1 1111 txt2e 2 Afficher txtl gt txt2 FIN ENI Editions All rigths reserved Dans le premier cas l expression est vraie Dans le second elle est fausse Il est possible d additionner des cha nes de caract res Le r sultat est la concat nation des deux cha nes Il n est par contre pas possible d utiliser les autres op rateurs arithm tiques Vous pouvez utiliser l op rateur amp o pour concat ner cependant le premier est pr f rable PROGRAMME CONCAT VAR txtl txt2 cha nes DEBUT Afficher Comment vous appelez vous Saisir txtl txt2 Vous vous appelez amp txtl Afficher txtl FIN ENI Editions All rigths reserved Pour aller plus loin 1 Les nombres n gatifs Un nombre sign par exemple sur 8 bits contient un bit r serv pour le signe C est en tout cas ainsi qu on vous le pr sente pour plus de compr hension G n ralement c est le bit de poids fort le plus gauche qui sert pour le signe 0 le nombre est positif 1 il est n gatif Par exemple 10 devrait tre repr sent par 10001001 Cette repr sentation pratique pour le lecteur ne l est cependant absolument pas pour l ordinateur Additionnez 9 et 30 vous obtenez 21 En binaire 30 quivaut 00011110 Le binaire s additionne comme le d cimal 1 1 10 donc retenue de 1 et ainsi de suite 00011110 30 10001
106. Retourne 2 PI this rayon Fin FinClasse Classe rectangle h rite de figure attributs priv s largeur r el hauteur r el m thodes publiques Constructeur rectangle e x c v r_l r h D but this xec x this v c_y this largeur r_l this hauteur r_h Fin Fonction getSurface r el D but Retourne this largeur this hauteur FinFonc Fonction getPerim tre r el D but Retourne 2 this largeur this hauteur Fin FinClasse Les deux classes disque et rectangle ne comportant pas de m thodes abstraites elle ne sont pas abstraites et peuvent tre instanci es 5 Interfaces Les classes abstraites sont des classes comportant des m thodes impl ment es ou non Elles servent g n ralement de superclasses d autres Il est possible de pousser le raisonnement plus loin qu est il n cessaire de faire pour cr er une classe servant uniquement et enti rement de prototype une classe Cette classe doit avoir les propri t s suivantes e Non instanciable ENI Editions All rigths reserved e Abstraite e Ne contenant que des m thodes abstraites Ainsi toute classe d rivant de cette classe sp ciale devrait obligatoirement impl menter toutes les m thodes Quel est l int r t Celui de d finir un mod le unique et complet de m thodes pour les classes qui d cident de les utiliser Ces types particuliers de classes s appellent des interfaces En pratique une classe n h rite pas d une interface mis part les d
107. Schaine chaine morceaux il if i 1 1 chaine chaine separateur return chaine Scpt 0 ligne x Fichier fopen etc passwd r while feof Fichier lit une ligne ligne fgets Fichier if ligne Split de la ligne passwd cpt split ligne cpt fclose Fichier eventuel traitement ici sur le tableau Fichier de sortie FicSort fopen home seb macopie w for cpt 0 Scpt lt count Spasswd S cpt On recolle les morceaux ligne recolle passwd cpt On enregistre la ligne fwrite FicSort ligne fclose FicSort ENI Editions All rigths reserved Les pointeurs et r f rences 1 Rappels sur la m moire et les donn es a Structure de la m moire Les pr c dents chapitres vous ont d j appris norm ment de choses sur la m moire et l organisation de son contenu e La m moire est d coup e en octets e Chaque octet de la m moire dispose d une adresse e Une donn e peut s taler sur plusieurs octets donc occuper une plage d adresses par exemple 4 ou 8 octets pour un r el plus encore pour une cha ne valeur entier sur 32 bits valant 1234546789 Oxfde23a50 Oxfde23a51 Oxfde23a52 Oxfde23a53 Oxfde23a54 Oxfde23a55 Oxfde23a56 Oxfde23a57 Oxfde23a58 Oxfde23a59 123456789 valeur Repr sentation d une variable en m moire Une variable est un nom donn une ou plusieurs cases
108. Un octet est ajout pour le caract re nul en fin de cha ne et donc une cha ne de longueur n occupe n 1 octets en m moire e Il se peut que les cha nes ne se suivent pas en m moire si au moment de les crire il n existe pas assez de positions libres contigu s disponibles Aussi les adresses donn es dans ce tableau peuvent tre totalement d cal es par rapport la r alit Le tableau de cha ne de caract res contiendrait donc les r f rences des adresses m moires o sont r ellement stock es les cha nes de caract res Indice R f rence Un astucieux tour de passe passe qui permet de nombreuses choses ENI Editions All rigths reserved Manipulations simples 1 Recherche d un l ment Vous disposez d un tableau de n l ments correspondant aux pr noms de vos amis et vous voulez savoir si l un de ceux ci est bien pr sent dans votre tableau Il faut alors le rechercher Le principe consiste balayer l int gralit du tableau l aide d une structure it rative et en sortir d s que l l ment a t trouv ou que le nombre maximal d indice a t d pass la sortie de la boucle il faudra de nouveau v rifier pour savoir si oui ou non l l ment a t trouv il se peut en effet que tout le tableau ait t parcouru et que ce soit la raison de la sortie de la boucle PROGRAMME RECHERCHE VAR Tableau noms tableaul 1 10 rech cha ne i entier DEBUT iel de cha nes Ta
109. Var total entier D but total duree heures 3600 duree minutes 60 duree secondes Retourne total FinFonc Enfin une fonction peut aussi retourner un enregistrement Ce qui veut dire que la proc dure sec to hms est inutile une fonction peut la remplacer Fonction sec_to_hms nbsec entier hms Var duree hms D but duree heures nbsec DIV 3600 nbsec nbsec 3600 duree minutes nbsec DIV 60 duree secondes nbsec 60 Retourne duree FinFonc Pour cette derni re fonction le r sultat doit tre affect un enregistrement de m me type PROGRAMME convert_sec2 ENI Editions All rigths reserved 9 10 Var nb_secondes entier heures hms D but nb_secondes 3950 heures sec_to_hms nb_ secondes Afficher heures heures heures minutes heures secondes Fin Une proc dure ne retournant qu une seule valeur et quel que soit son type est toujours convertible en fonction Une telle proc dure doit d ailleurs toujours tre convertie en ce sens elle n a pas d int r t autrement Pour tester les fonctions sec to hms et hms to sec vous pouvez appeler l une avec l autre Une fonction repr sentant son r sultat la valeur de la fonction est le r sultat qu elle retourne elle peut tre utilis e comme param tre une autre fonction si les types attendus sont compatibles PROGRAMME convert_sec3 Var nb_secondesl entier nb_secondes2 entier D but nb_secondes1 3950 nb_secondes2 hms_to_sec sec_ to _hms nb_secondesl Si nb
110. _secondesl nb_secondes2 Alors Afficher Erreur dans l une des fonctions Sinon Afficher Un programme parfait FinSi Fin c Param tres et PHP Le langage PHP accepte n importe quel type de param tre en argument d une fonction types classiques comme les entiers ou tableaux structures enregistrements objets Dans certains cas ces param tres peuvent tre en entr e et en sortie quand ils sont pass s en tant que r f rence ou si ce sont des objets Les r f rences seront abord es un peu plus profond ment dans le chapitre consacr aux notions avanc es dont les pointeurs En attendant tous les exemples pr c dents sont r alisables en PHP bien heureusement La proc dure RepeteCar est donc transform e ainsi lt html gt lt head gt lt meta gt lt title gt Parametres lt title gt lt head gt lt body gt lt php function RepeteCar nbcar c for i 1 i lt nbcar i echo c echo lt br gt for nb 1 S nb lt 10 S Snb RepeteCar nb 2 gt lt body gt lt html gt Voici en PHP une reprise des structures hms et des fonctions hms to sec et sec_to_hms Il n y a pas de difficult dans cette impl mentation lt html gt lt head gt lt meta gt lt title gt fonctions hms lt title gt lt head gt lt body gt lt php ENI Editions All rigths reserved class hms public heures public minutes public secondes function hms_to_sec duree S
111. a repr senter r ellement sous forme de symboles d assertions etc Il n y avait aucune repr sentation formelle de la logique Or un ordinateur est logique m me si on peut lui demander des choses illogiques c est vous qui le programmez apr s tout La logique est m me la base de nombreuses applications math matiques lectroniques d intelligence artificielle En informatique le mat riel est lectronique et d pend de la logique les programmes d pendent tant de tests et de calculs faisant appel la logique et devant fonctionner sur des circuits lectroniques Sans logique pas d lectronique ni d ordinateurs ni de programmes C est ce qui fait que les op rateurs conditions et tests ne doivent pas tre pos s n importe comment Il n y a rien de plus logique qu un ordinateur mais aussi rien de plus stupide il Va b tement et encore la notion de b tise lui est inconnue ex cuter exactement ce que vous lui demandez m me si le r sultat entra ne une erreur ou est faux et cela du moment que les tests sont bien pos s et qu une r ponse logique peut en tre d duite Ainsi PROGRAMME STUPIDE VAR froid nu sortir en Bool en DEBUT Froid VRAI Nu VRAT Si Froid VRAI ET nu VRAI Alors Sortir VRAI Finsi FIN Cet algorithme peut tre ainsi interpr t S il fait froid dehors et que je suis nu alors je peux sortir Cet algorithme est pour vous et moi tres humains faux Vous n allez pas sortir nu s il fait froid vo
112. a 256 cases num rot es de 0 255 On peut donc obtenir la valeur d une case depuis son num ro en disant que la case 74 contient la valeur 212 L o cela se complique c est que la m moire de vos ordinateurs atteint un nombre tr s important de cases Avec 1 Go de m moire vous avez 1073741824 cases pouvant contenir chacune un octet Comment voulez vous vous souvenir de chaque num ro de case C est bien entendu impossible Si par contre vous donnez un nom ou une tiquette chaque valeur contenue dans la case ou une suite de valeurs de plusieurs cases pour vous en rappeler plus facilement cela devient bien plus vident C est ce qu on appelle une variable En informatique une variable est l association d une tiquette une valeur Vous nommez la valeur La variable repr sente la valeur et se substitue elle La variable est donc la valeur Mais comme son nom l indique cette valeur peut changer dans le temps soit que la variable ne repr sente plus la ou les m me s case s m moire soit que la valeur de la case a chang Une variable est un nom ou tiquette donn une valeur nombre texte etc Cette valeur peut varier au cours du temps on affecte une nouvelle valeur au nom d o le nom de variable Quel nom donner une valeur Le nom que vous voulez et qui si possible est en rapport avec ce que repr sente la valeur Ce peut tre une lettre une association de lettres et de chiffres ou d autres symboles
113. a a etc a et a a a a a a etc a La compl mentarit La n gation de la n gation d une variable logique est gale la variable logique Ainsi la phrase La vie est belle quivaut La vie n est pas non belle En termes logiques a non non a a De m me a a i ENI Editions All rigths reserved SIDE En effet l expression La vie est belle OU la vie n est pas belle quivaut 0 1 ce qui est VRAI d apr s la loi OU l une des variables au moins tant vraie Enfin a a 0 quivaut dire que La vie est belle ET la vie n est pas belle ce qui videmment est impossible D apr s la loi ET 1 0 0 donc FAUX La priorit En calcul classique si vous faites 1 2 3 vous obtenez 7 car la multiplication est prioritaire sur l addition En alg bre de Boole les priorit s s appliquent aussi Le ET est prioritaire sur le OU Vous pouvez cependant influer sur les priorit s avec les parenth ses Voici deux exemples Dans les deux cas a est FAUX 0 b est VRAI 1 et c est VRAI 1 Exemple 1 a b c e Le ET est prioritaire on commence par b c 1 1 1 e Puis on passe au O 0 1 1 e On obtient donc a b c VRAI Exemple 2 a b c e Le ET est prioritaire on commence par a b 0 1 0 e Puis on passe au O 0 1 1 e On obtient donc a b c 1 VRAI Le th or me de De Morgan Comme tout alg bre celui de Boole dispose aussi de ses th or mes Le th or me de De Morgan tablit deux v rit s s
114. a plus petite valeur tant la plus droite et est appel e bit de poids faible la plus grande la plus gauche et est appel e bit de poids fort Dans l exemple pr c dent la valeur binaire 11 peut tre convertie ainsi 1 21 1 20 21 20 2 1 3 Les informaticiens et math maticiens utilisent une notation particuli re en indice nombres en retrait bas pour indiquer des conversions 11 2 3 10 Voici un dernier exemple avec une valeur binaire cod e sur 8 bits Quelle est la plus grande valeur d cimale qui peut tre cod e avec 8 bits 27 26 25 244234224214202128 64 32 16 8 4 2 1 255 Donc 11111111 255 10 Soit 256 valeurs possibles de 0 z ro 255 ce qui peut tre plus simplement calcul par 2 soit deux puissance n n tant le nombre de bits contenus dans la valeur binaire La plus grande valeur convertie en d cimal est donc 20 1 Il est possible de convertir du d cimal en binaire avec des divisions successives on divise les r sultats sans la virgule successivement par deux Le r sultat binaire sera la juxtaposition des restes 0 ou 1 sauf pour le dernier Par exemple avec le nombre 183 ENI Editions All rigths reserved e 183 2 91 reste 1 e 91 2 45 reste 1 e 45 2 22 reste 1 e 22 2 11 reste 0 e 11 2 5 reste 1 e 5 2 2 reste 1 e 2 2 1 reste 0 e On remonte du dernier 10110111 Conversion d cimale en binaire C est donc en binaire que sont repr sent es toutes les v
115. a structure interne de votre objet et y mette n importe quoi car vous pouvez effectuer un contr le au sein des m thodes C est le principe de l encapsulation des donn es e Les attributs sont priv s ou prot g s e Vous les manipulez en passant par des m thodes publiques L exemple modifi suivant met en vidence ce qui aurait pu poser un probl me vous voulez modifier le type d cran En passant directement par un attribut public vous auriez pu mettre n importe quoi dedans comme PLAT Or la m thode modifie_type v rifie avant ce que vous y mettez dans un choix pr d fini crt Icd plasma Si le type que vous voulez ne correspond pas il est rejet Vous venez de blinder un peu votre objet en emp chant quiconque de le casser Vous reconnaissez maintenant l importance dans certains cas de l encapsulation des donn es Types Classe Ecran attributs priv s type cha ne m thodes publiques Fonction modif _type mod cha ne bool en FinClasse Fonction Ecran modif_type mod cha ne bool en Var tmod tableaul 1 3 J lt CRT LCD PLASMA de cha nes ok bool en i sentier D but ok FAUX isl Tant que i lt 3 ET NON ok Faire Si mod tmod i Alors ok VRAI FinSi i i 1 FinTantQue Si ok Alors this type mod Finsi Retourne OK FinFonc Programme ob j3 Var oEcran Ecran D but Si NON oEcran modifie_ type PLAT Alors Afficher Erreur dans la modification du type Finsi Fin Les utilisat
116. ableau se fait par copie L exemple suivant met ceci en lumi re La premi re affectation est par copie la seconde par r f rence forc e un l ment de copie est modifi puis on affiche l l ment correspondant de t c est le m me lt html gt lt head gt lt meta gt lt title gt tableaux et copies de tableaux lt title gt ENI Editions All rigths reserved lt head gt lt body gt lt php t array 2 7 9 10 11 14 17 18 20 22 1 par copie Scopie t echo S t 2 lt br gt Scopiel 2 5 echo S St 2 lt br gt 2 par r f rence copie amp t echo t 2 lt br gt Scopiel 2 5 echo S St 2 lt br gt 2 gt lt body gt lt htmil gt Tableaux n dimensions PHP sait manipuler des tableaux plusieurs dimensions Selon le principe pr c dent le nom du tableau repr sente une r f rence sur le tableau en m moire Dans un tableau n dimensions chaque dimension r f rence son propre tableau ind pendant en m moire Chaque indice de la premi re dimension r f rence un tableau pour chaque deuxi me dimension C est ainsi qu il est possible que le nombre d indices de la deuxi me dimension ou de la troisi me quatri me etc ne soit pas le m me selon l indice de la premi re dimension La suite vous pr sente quelques l ments pratiques Pour indiquer le nombre d l ments proc dez comme pour une seule dimension placez le nombre d indices entre les croche
117. act re sp cial de code 0 repr sentant un caract re vide qui indique une fin de cha ne Quand l ordinateur doit r cup rer une cha ne il lit tous les caract res contigus jusqu ce qu il trouve le caract re vide de code 0 Les 128 caract res suivants repr sentent l ASCII tendu permettant de coder les caract res semi graphiques qui taient couramment utilis s sur les terminaux traits horizontaux verticaux angles etc mais aussi les caract res propres chaque pays Ces 128 caract res sont plac s au sein de pages de codes dont la plupart sont normalis es Quand on change de pays on change de page de code Ce syst me pr sente cependant deux inconv nients e Les fichiers textes et les noms de fichiers crits dans d autres langues que l anglais ne seront pas interpr t s correctement sur les syst mes n utilisant pas la m me page de code Typiquement si vous utilisez une page de code norv gienne sur des fichiers en fran ais vous obtiendrez des caract res surprenants e Les 128 octets ne suffisent pas toujours coder tous les caract res d une langue particuli re par exemple tous les id ogrammes chinois ou japonais Dans ce cas l alphabet de ces langues est restreint ou les gens natifs de ces pays et d autres doivent utiliser plusieurs pages de code ou passer par des logiciels et syst mes g rant sp cifiquement leur langue Pour pallier ces inconv nients il a fallu trouver un autre syst me de codag
118. adresses de variables ou autres l ments tableaux types structur s objets En PHP ce n est pas directement possible vous verrez un autre moyen Mais la notion est importante y compris pour ce langage Vous n aurez que rarement l occasion voire jamais de rentrer une adresse la main dans une variable M me en C vous partirez g n ralement d une adresse d j d finie celle d une variable d un tableau etc Dans les langages supportant les manipulations d adresses m moire il est courant de manipuler ces adresses au travers de variables particuli res qui ne contiennent non pas une donn e mais une adresse m moire Ce sont des pointeurs Un pointeur est une variable qui contient l adresse d une autre variable Le pointeur pointe sur une autre variable dont il contient l adresse m moire cette derni re tant dite variable point e Si vous affichez le contenu d un pointeur vous obtenez une adresse qui est celle de la variable point e tandis que si vous affichez le contenu de la variable point e vous obtenez la valeur associ e cette derni re Un pointeur est une variable De ce fait elle doit tre d clar e dispose elle m me de sa propre adresse en m moire et se voit d finir un type Le type d un pointeur ne d crit pas ce qu il contient c est une adresse donc en principe d une longueur de 32 ou 64 bits selon les architectures mais le type de la variable qu il pointe Un pointeur ENI Editions All rigths
119. ainsi si le langage le permet ou sous forme de la valeur 1 4 Les op rateurs de comparaison L algorithme ci dessus ne v rifie pas les valeurs des variables Il faut pour cela utiliser d autres op rateurs Pour valuer une expression il faut parfois avoir besoin de comparer des valeurs Comment savoir si un utilisateur de votre logiciel a r pondu oui ou non votre question Comment savoir si le chiffre saisi dans le jeu du lancer de d correspond au bon r sultat Vous allez devoir utiliser les op rateurs de comparaison Il y en a plusieurs Ceux ci sont des op rateurs binaires ils prennent deux valeurs une avant et une apr s Ces valeurs peuvent tre soit des scalaires entiers r els cha nes de caract re selon le langage utilis directement soit leur repr sentation sous forme de variable L ordinateur valuera le r sultat de cette comparaison sous forme bool enne le r sultat sera vrai ou faux Les langages r agissent diff remment selon les comparaisons et les types des donn es compar es L encore prenez garde ne pas m langer les types Aussi si en pseudo code algorithmique les cha nes de caract res peuvent tre compar es avec tous les op rateurs prenez garde l interpr tation qui en est faite par les langages En C notamment et entre autres il faut passer par des fonctions sp cialis es a L galit ENI Editions All rigths reserved L op rateur d galit s crit avec le sig
120. aintenant d n i Le r sultat est que vous venez de modifier le contenu de la zone m moire l adresse point e par p_i qui est celle de i Vous venez donc de modifier la valeur de i en passant par un pointeur i contient maintenant 987654 c Applications Les applications sont nombreuses e En C une fonction ne sait pas retourner directement un tableau ou un enregistrement structur Elle doit retourner l adresse de celle ci et donc son r sultat sera plac dans un pointeur ad quat e Dans le chapitre sur les sous programmes vous avez vu qu il est possible de passer une variable en Sortie S ou Entr e Sortie ES une proc dure D apr s vous quel est le m canisme utilis Le pointeur bien entendu vous passez l adresse de la variable en param tre et le sous programme va modifier le contenu de la m moire cette adresse via un pointeur e Les pointeurs ouvrent la voie l utilisation de m canismes complexes Notamment vous pouvez cr er une liste d enregistrements ordonn s un enregistrement contient une valeur puis un pointeur vers l enregistrement suivant et ainsi de suite e Dans un langage bas niveau comme le C les tableaux se manipulent tr s facilement via des pointeurs puisqu il est possible de faire des calculs sur les adresses 1 va au contenu de l adresse suivante et ainsi de suite Voici un simple exemple en C d une fonction qui doit modifier le contenu d une variable en passant tout d abor
121. ais la m moire des l ments suivants ne pourra plus tre lib r e La fonction suppr_liste ne prend qu un seul argument la t te de la liste ENI Editions All rigths reserved Fonction suppr_liste pTete pointeur sur element Var pEncours pSuivant pointeurs sur l ment D but pEncours pTete Tant que pEncours lt gt NIL Faire pSuivant pEncours pSuiv Lib rer pEncours pEncours pSuivant FinTantQue pTete NIL FinFonc h Parcours r cursif Il est possible de remplacer le sous programme it ratif de parcours de la liste par une fonction r cursive le sous programme s appelle lui m me avec l adresse de l l ment suivant tant que l l ment re u en argument n est pas NIL Fonction parcours_recursif pEncours pointeur sur element D but Si pEncours lt gt NIL Alors Afficher pEncours valeur parcours_recursif pEncours psuiv Finsi FinFonc Cette fonction est appel e avec le pointeur de t te comme param tre parcours_recursif pTete 2 L impl mentation en PHP Voici le programme adapt au PHP Il faut adapter quelques proc dures pour qu elles retournent une r f rence vers les divers l ments de la liste lt php class element public valeur public pSuiv null Creation de la tete function cree_liste SpTete new element pTete gt pSuiv null return pTete tete et suivants function cree_liste2 ler l ment pTete new element echo ler l ment
122. aleurs a Les proc dures ENI Editions All rigths reserved Les proc dures sont des sous programmes constitu s d une suite d instructions ind pendantes Une proc dure ne retourne pas de r sultat ou de valeur au programme qui l a appel tout comme les valeurs pass es en param tre ne sont pas forc ment modifi es de mani re globale Une proc dure pourrait faire l objet d un programme part Son contenu peut cependant parfois influer sur le d roulement global du programme s il modifie un fichier une base de donn es etc La proc dure RepeteCar est un exemple typique le bloc de donn es r p titif influe sur l affichage mais ne retourne rien en tant que tel Il existe cependant quelques moyens indirects pour une proc dure de retourner une valeur e en passant celle ci par r f rence selon le m me principe que ce qui a t expliqu pour les tableaux le sous programme re oit la r f rence de la variable et peut la modifier vers celle contenant la nouvelle valeur Ceci est d ailleurs aussi possible avec les fonctions e Plus simplement l algorithmique effectue souvent une distinction entre les valeurs en entr e de la proc dure celles qu on lui transmet et les valeurs en sortie Dans ce cas autant utiliser les fonctions notamment si une seule valeur doit tre retourn e e En modifiant les contenus des variables globales variables accessibles pour tous les programmes et les sous programmes ta
123. aleurs qu un ordinateur manipule C est valable tant pour les donn es num riques ou texte que pour les instructions destination du microprocesseur Un nombre binaire correspondra une instruction Par exemple sur un microprocesseur x86 Intel ou AMD 01110100 est l instruction je jump if equal ou encore la ligne 10110000 01100001 qui signifie mov 0x61 al placer la valeur hexad cimale 0x61 dans le registre AL Les ordinateurs du d but des ann es 2000 savent manipuler des nombres sur 64 bits or 264 est gal 18 446 744 073 709 551 616 soit plus de 18 milliards de milliards L id e d utiliser deux valeurs pour encoder d autres valeurs remonte Francis Bacon En 1623 il cherche une m thode st ganographique pour pouvoir crypter un texte compos des lettres de l alphabet Il remarque qu un assemblage de deux lettres group es par cinq permet de coder l ensemble de l alphabet Il appelle cet alphabet bilit re Le a tait repr sent par AAAAA le B par AAAAB jusqu au Z BABBB L alphabet de l poque le latin contenait vingt quatre lettres le j se confondant avec le i et le u avec le v b Les octets et les mots Un ordinateur sait manipuler individuellement chaque bit d une valeur Mais les bits ne sont pas stock s individuellement dans une case m moire Ils sont regroup s g n ralement par multiples de huit 8 Ainsi un ensemble de 8 bits est appel un octet L avantage de l octet est qu il suf
124. angage de bas niveau permettant un acc s direct au contenu de la m moire physique tout au moins celle r serv e pour votre programme En C vous pouvez afficher l adresse d une variable tr s simplement Le bout de code suivant affiche le contenu et l adresse d une variable enti re longue Il suffit en C d ajouter le signe amp ET commercial avant le nom de la variable La cha ne sot rique xd signifie que le amp i est une valeur enti re d qui doit tre convertie l affichage en hexad cimal avec un pr fixe 0x avant le indiquant de remplacer les caract res accol s par la variable situ e en param tre dans l ordre long i 123456 printf d l adresse xd n i amp i Le r sultat varie videmment d une machine l autre et n est jamais le m me si on relance le programme plusieurs fois 123456 l adresse 0xbf9f8420d C permet aussi de conna tre la longueur d une variable le nombre d octets qu elle utilise avec la fonction sizeof printf d l adresse xd taille de d octets n i amp i sizeof i Une variable de type long est cod e sur 4 octets sur un ordinateur 32 bits donc le r sultat ne provoque aucune surprise 123456 l adresse O0Oxbfa03430d taille de 4 octets 2 Le pointeur a Principe et d finition Que ce soit avec des langages de bas niveau de haut niveau comme PHP ou en algorithmique il peut tre utile de trouver des moyens de manipuler directement ou indirectement des
125. ans ceux ci vous devez d finir la structure de vos enregistrements Bien que tout soit possible notamment avec des structures en arborescence comme le XML vous pouvez initialement choisir entre deux m thodes assez simples les enregistrements avec d limiteurs ou largeur fixe 1 Les d limiteurs Les enregistrements d limit s sont courants sous Unix Dans chaque ligne les valeurs individuelles sont appel es des champs et sont s par es entre elles par un caract re particulier appel caract re de s paration ou caract re de d limitation ou enfin d limiteur N importe quel caract re peut convenir cependant il ne doit pas se retrouver dans la valeur d un champ ce qui aurait pour effet de casser la structure de l enregistrement Ce sont souvent le point virgule ou les deux points qui sont utilis s Les champs d enregistrements sont g n ralement encadr s par des guillemets lorsqu il s agit de cha nes de caract res rien pour des valeurs num riques Ce n est pas une affirmation ce n est pas toujours le cas et c est vous de g rer le type d une valeur donn e au sein de votre programme Voici un simple exemple de contenu de fichier d limit de type courant sous Unix root x 0 0 root root bin bash bin x 1 1 bin bin bin bash daemon x 2 2 Daemon sbin bin bash 1p x 4 7 Printing daemon var spool lpd bin bash mail x 8 12 Mailer daemon var spool clientmqueue bin false x news x 9 13 News system etc
126. ant le num ro de l indice entre les crochets St 2 254 total total t 3 Remarquez que ni l index ni le contenu d un tableau ne sont typ s L index l ment d un tableau peut tre une cha ne de caract res C est ce qu on appelle un tableau associatif C est une fonctionnalit puissante et pratique du PHP tr s utilis e dans le d veloppement de sites Web dynamiques notamment pour la r cup ration de valeurs d une page l autre Vous pouvez obtenir le nombre d l ments d un tableau l aide d une fonction particuli re appel e count nb count t R f rences de tableaux Attention ici il peut y avoir un risque notamment si vous venez du langage Java En Java la copie de tableau se fait par r f rence Il est possible en Java de faire ceci int l t 2 7 9 10 11 14 17 18 20 22 int copie copie t La derni re ligne donne l impression que le tableau t est copi dans le tableau copie Or Java fonctionne par r f rence Le principe est expliqu dans le point suivant sur la repr sentation m moire et dans le chapitre Notions avanc es Ici ce n est pas le tableau qui est copi mais copie qui re oit la r f rence du tableau t Les variables copie et t r f rencent le m me tableau si vous modifiez un l ment de copie vous modifiez l l ment correspondant de t puisqu ils r f rencent le m me tableau le m me endroit dans la m moire Ce n est pas le cas en PHP ou par d faut l affectation de t
127. ant un fils le fils droit tre raccord au bon pointeur du grand p re e La suppression d un n ud ayant deux fils C est le cas le plus probl matique Pour ce dernier cas vous pouvez proc der aux cha nages directement Par exemple soit un morceau de l arbre d exemple vous voulez supprimer le n ud 8 Suppression d un n ud deux fils Le n ud 8 tant supprim il faut r organiser l arbre en cons quence Le n ud avait deux fils celui de gauche et tout son sous arbre remplace le n ud supprim celui de droite et tout son sous arbre va droite du nouveau n ud Une autre possibilit est de supprimer le n ud parcourir les deux sous arbres de cet ancien n ud et d ajouter chaque l ment dans le premier arbre ENI Editions All rigths reserved Principe de l objet une notion vidente 1 Avant de continuer Vous voici dans le dernier chapitre de ce livre Si votre objectif tait d apprendre programmer dans des langages proc duraux ou fonctionnels c est dire bas s sur l utilisation de sous programmes tels que pr sent s ici vous pourriez vous arr ter l En effet d s pr sent vous disposez de tous les l ments indispensables pour programmer en langage C ou en Pascal Cependant il serait dommage de ne pas continuer ceci m me si vous n aurez pas tout de suite programmer en objet La programmation objet est depuis le d but des ann es 1990 non seulement un classique mais fait p
128. apidement des pages HTML dynamiques b Historique L origine de PHP remonte 1995 quand Rasmus Lerdorf a cr PHP FI une librairie de scripts Perl utilis e pour la publication de son CV sur son site personnel Au fur et mesure des volutions la librairie a t port e en C et agr ment e de nouvelles fonctionnalit s pour cr er des pages dynamiques simples pour le web et acc der quelques sources de donn es PHP FI signifie Personal Home Page Forms Interpreter PHP FI 2 0 sort en 1997 toujours d velopp par une seule personne C est le succ s 50000 sites 1 des noms de domaines disent l utiliser ou le supporter Les contributeurs affluent ENI Editions All rigths reserved PHP 3 0 sort en juin 1998 c est la premi re version d velopp e conjointement par Rasmus Lerdorf Andi Gutmans et Zeev Suraski et enti rement r crite les versions pr c dentes taient trop lentes pour une application commerciale Outre ses performances PHP 3 est modulaire et extensible il est possible de lui greffer des API suppl mentaires ce qui n a pas manqu d tre fait avec le support de nombreuses bases de donn es de formats et de protocoles Il dispose d une syntaxe plus coh rente et d un support basique de l objet Il a t install sur 10 du parc mondial des serveurs web avec des dizaines de milliers de d veloppeurs et des centaines de milliers de sites Le moteur de PHP 4 a t repens afin d en am liorer les
129. apitre utilisera la premi re notation avec le point Cette loi est souvent associ e une vraie multiplication car 0 n vaut toujours 0 Cependant attention certaines propri t s ne s appliquent pas du tout de la m me mani re La loi ET peut tre d crite sous forme de table ne pas confondre avec une table de v rit Elle ressemble plut t une table de multiplication CR CEE CE CE d La loi OU Vous connaissez aussi cette loi rencontr e au chapitre Les variables et op rateurs avec l op rateur logique associ OU La loi OU est aussi appel e la disjonction Vous trouvez parfois aussi disjonction inclusive afin de la diff rencier d un autre op rateur Elle s nonce ainsi a O b est VRAI si et seulement si a est VRAI ou b est VRAI Notez que le O tant inclusif on y vient si a et b sont VRAIS tous les deux a O b est VRAI aussi Du moment qu au moins l un des deux est vrai a OU b est VRAI Les notations suivantes sont utilis es e signe plus a b e OR selon les langages de programmation La suite utilisera la premi re notation avec le signe La loi OU est souvent associ e avec l addition ce qui se r v le totalement faux En effet 1 1 addition binaire vaut 0 avec une retenue de 1 Or 1 1 est VRAI donc 1 Attention au danger La loi OU peut tre d crite sous forme de table e Le contraire Le contraire appel aussi n gation se d finit ainsi
130. ariables La raison est simple PHP est un langage volu de haut niveau qui n a pas interf rer directement avec la m moire de l ordinateur Le programme PHP ne sait pas o sont r ellement stock es ses donn es en m moire centrale c est l interpr teur qui s occupe de tout S il avait t possible de voir une adresse celle ci aurait t celle au sein de la m moire r serv e par l interpr teur sans pouvoir faire le lien avec la m moire physique Ce syst me pr sente de nombreux avantages Puisque c est PHP qui g re votre place la m moire vous n avez plus vous soucier de probl mes propres des langages de bas niveau En C par exemple quand vous cr ez une cha ne de caract res c est en fait un tableau de caract res Si vous d bordez de la taille que vous avez initialement fix e vous risquez de graves dysfonctionnements et plantages car l espace m moire situ apr s est peut tre r serv pour une autre variable ou un bout de programme C ne vous pr viendra pas en cas d erreur dans les indices de tableaux non plus PHP vous d barrasse de tous ces probl mes puisqu il g re tout cela votre place Aucun risque de d passer quoi que ce soit aucun risque d oublier de lib rer de la m moire etc Vous verrez que PHP g re tr s bien pour certaines choses les r f rences comme cela vous a bri vement t expliqu dans le chapitre Les tableaux et structures c Brefs exemples en C Le langage C est un l
131. art ref art001_01 art libelle Pelle tarte Inox Luxe art prixe 35 50 cher pour une pelle tarte art fab ref Fab1234 art fab nom Le roi de la tarte art fab adresse 12 rue Siflette 13248 Latruelle art fab tel 0404040404 Fin c Un tableau dans une structure Vous voulez maintenant conna tre le nombre d articles vendus sur les douze mois de l ann e Pour cela vous allez cr er un nouveau type structur qui va reprendre un enregistrement tarticle auquel vous allez ajouter un moyen de stocker douze valeurs r elles Le meilleur moyen que vous connaissez d j est le tableau Vous pouvez parfaitement ajouter un tableau comme champ de structure Structure bilanart art tarticle vente tableaul 1 12 de r els Fin trter Soit dit en passant dans une telle structure et un enregistrement barti associ l acc s aux divers champs peut devenir un peu long Vous acc dez au tableau vente ainsi bartil ventelindicel L algorithme suivant va demander la saisie successive des douze quantit s de ventes mensuelles TYPES Le fabricant Structure tfabricant ref cha ne nom cha ne adresse cha ne ENI Editions All rigths reserved tel cha ne Fim truot L article Structure tarticle ref cha ne libelle cha ne prix cha ne fab tfabricant FinStruct Les ventes mensuelles Structure bilanart art tarticle vente tableaulf1 12 de r els FinStruct VAR bart0l bilanart i total 0 entiers D but bart01
132. artie de la culture informatique Un langage comme le C volution du langage C et m me d autres comme Delphi d riv du Pascal Visual Basic d riv du Basic ainsi que la plupart des langages de macros sous MS Office ou OpenOffice org ou encore les langages de certains gestionnaires de bases de donn es sont des langages objet Ne pas comprendre l objet c est risquer de se couper de beaucoup de produits beaucoup de fonctionnalit s et parfois aussi d une plus grande simplicit dans certains traitements 2 Rappels sur la programmation proc durale Les proc dures ou fonctions re oivent des donn es en arguments param tres Elles retournent des valeurs soit par le m me chemin pointeurs ou r f rence soit en renvoyant directement une donn e comme r sultat de la fonction Dans un langage proc dural ou fonctionnel les donn es sont s par es des programmes qui les utilisent a Les donn es Chaque variable dispose d un type qui indique quelle sorte de valeur elle peut contenir Ces types sont dits primitifs quand ils sont directement propos s par le langage lui m me Ils peuvent diff rer selon les langages mais le C propose une s rie d entiers de r els et de caract res D autres incluent les cha nes de caract res Le type de la variable peut aussi tre d fini par le programmeur Ce sont les types structur s que vous d crivez vous m me Les tableaux permettent de regrouper en un tout plusieurs occurrences de
133. as En algorithmique vous utilisez le type Alphanum rique il vous faudra alors faire attention lors de la conversion en C Mais alors comment se repr senter une cha ne de caract res avec un type scalaire Il faut pour cela se rappeler comment sont plac es en m moire les informations La m moire de l ordinateur est compos e de cases pouvant contenir certaines informations Ces cases sont num rot es on parle d adresse de la case et contiennent des donn es Ces donn es repr sentent ce que vous voulez selon le contexte de leur utilisation Vous pouvez par exemple partir du principe qu elles contiennent des scalaires Si une case m moire contient le nombre 65 ce peut tre la valeur enti re 65 ou encore le code ASCII du caract re A Une case m moire peut parfaitement contenir l adresse d une autre case m moire c est un peu plus compliqu que cela en a l air et ce sera l objet d un plus long expos dans la suite de cet ouvrage Une cha ne de caract res est donc une suite de scalaires de type Caract re les uns derri re les autres dans des cases m moires en principes contigu s Selon le m me principe si vous reprenez l exemple de la saisie des notes d tudiants ne pensez vous pas qu il serait plus pratique de pouvoir conserver ces notes pour la suite du programme Il serait alors possible de les r utiliser volont pour de nouveaux calculs voire m me pour les sauver dans un fichier les imprimer les consulter etc
134. as D Amiens Edouard Lucas en fait n Amiens et Li Sou Stian est l anagramme de Saint Louis nom du Lyc e o Lucas enseignait Les tours de Hanoi d rivent d une l gende Hindou qui dit qu un temple dispose de trois poteaux sur lesquels s empilent 64 disques en or de diam tres diff rents Les pr tres de Brahma d placent continuellement les disques du premier poteau vers le troisi me en passant ventuellement par un poteau interm diaire et en respectant quelques r gles simples e Ils ne peuvent d placer qu un seul disque la fois e Ils ne peuvent d placer un disque que dans un emplacement vide ou sur un disque de plus grand diam tre La l gende dit aussi que les disques ont t empil s au d but des temps et que lorsque les pr tres auront fini de les d placer ce sera la fin du monde Nul doute que si les pr tres de la l gende avaient eu un ordinateur nous serions tous d j morts Quoique Avec 64 disques il faut 264 1 d placements 18446744073709551615 et uniquement sans se tromper soit raison de un par seconde 584 542 046 090 ans 584 milliards d ann es Sachant que l univers a environ 14 milliards d ann es c est th orique il nous reste 570 milliards d ann es pour en profiter En plus les disques en or doivent tre tr s lourds d placer Le jeu fait r f rence Hano car dans la capitale du Vietnam une ancienne colonie fran aise les toits de certaines pagodes ont la forme de plat
135. as o il est possible d utiliser plusieurs algorithmes pour effectuer une m me t che comme pour trier les l ments d un tableau de valeurs Certains algorithmes se r v lent tre plus co teux que d autres pass un certain nombre d l ments trier Le co t d un algorithme refl te sa complexit ou en terme plus simple son efficacit Les mots co t complexit et efficacit refl tent ici la m me d finition Plus un algorithme est complexe plus il est co teux et moins il est efficace Le calcul de cette complexit a comme r sultat une quation math matique qu on r duit g n ralement ensuite une notion d ordre g n ral La complexit est not e O f n o le O grand O veut dire d ordre et f est la fonction math matique de n qui est la quantit d informations manipul e dans l algorithme Voici un exemple pour mieux comprendre soit un algorithme qui compte de 1 n et qui affiche les valeurs correspondantes Dans la pratique vous allez utiliser une boucle voir le chapitre Les boucles allant de 1 n Il faudra faire n passages pour tout afficher et donc vous aller manipuler n fois l information La fonction math matique donnant le co t sera alors f n n La complexit est alors lin aire et vous la noterez O n Si dans le m me algorithme vous d cidez de faire une seconde boucle dans la premi re pour afficher par exemple une table de multiplications la premi re boucle va toujours de 1 n la seco
136. assez simple c est la m me que pour le programme principal vous y d clarez vos variables constantes tableaux etc et vous placez vos instructions entre DEBUT et FIN Voici un simple exemple pour le moment ayez une confiance aveugle les termes comme Proc dure seront expliqu s un peu plus loin Dans cet exemple vingt tirets sont affich s en partant du principe qu ils le sont sur la m me ligne Proc dure RepeteCar Var i entier D but Pour i de 1 20 Faire Afficher FinPour FinProc Vous constatez qu un sous programme est constitu de e Un identifiant sous forme de nom RepeteCar qui lui servira pour tre appel e Une zone de d claration de variables e Un bloc d instructions encadr entre D but et Fin e Le tout tant ici et dans le cadre de cet exemple pr cis ment entre les mots cl s Proc dure et FinProc En algorithmique un sous programme ne peut pas tre d clar dans un autre sous programme La possibilit existe cependant parfois dans certains langages de programmation comme le PHP mais alors il faut faire preuve d une tr s grande rigueur le sous programme sera connu du reste du programme seulement quand celui qui le d clare sera lui m me appel une premi re fois b En PHP En PHP un sous programme se d clare sous cette forme function nom_fonction argument1 argument2 argumentn code du sous programme return valeur suivant le retour Vous n avez pas
137. ateur devra alors saisir plusieurs valeurs selon le langage final les unes la suite des autres s par es par des espaces ou en appuyant sur la touche Entr e apr s chaque saisie PROGRAMME SAISIE MULTIPLE VAR nom prenom cha nes DEBUT Afficher Quels sont vos noms et pr noms Saisir nom prenom FIN Vous avez d j remarqu depuis le premier chapitre qu en PHP les exemples utilisent echo pour afficher quelque chose dans la console MS DOS dans le shell Unix MacOS ou destination d une page HTML pour un navigateur La saisie via la console si le script PHP est lanc depuis un terminal est tr s simple lt php echo Entrez un texte saisie fgets STDIN echo saisie gt Via le navigateur web la saisie est totalement diff rente puisqu il faut passer par les formulaires L exemple suivant dont les principes seront repris de nombreuses fois par la suite partout o cela sera possible et coh rent montre comment utiliser des formulaires en HTML et r cup rer les valeurs saisies en PHP C est la base m me de la puissance de ce langage Les structures de contr le if sont expliqu es dans le prochain chapitre Ce programme ex cut une premi re fois affiche le formulaire de saisie La seconde fois il affiche le r sultat lt html gt lt head gt lt meta gt lt title gt Saisie en HTML lt title gt lt head gt lt body gt lt php if lisset _GET txt gt lt form meth
138. ateur ou l interpr teur qui fera la conversion des noms vers les adresses des cases m moire votre place Si vous souhaitez vous amuser manipuler directement des adresses m moire non pas par leur nom mais par leur adresse quelques langages le permettent Directement vous pouvez apprendre l assembleur mais vous devrez tre tr s courageux et patient sinon des langages comme le C ou le C permettent la manipulation via des pointeurs ce sont des tiquettes qui sont accol es l adresse de la case m moire contrairement aux noms des variables classiques qui sont associ es la valeur que la case contient Comme en r gle g n rale le nom d une variable repr sente tant l adresse que la valeur la valeur a telle adresse m moire c est source de beaucoup d amusement pour le programmeur ENI Editions All rigths reserved M moire La variable une tiquette associ e une valeur en m moire 2 D claration Pour exister une variable doit tre d clar e c est dire que vous devez indiquer au d but de l algorithme comment elle s appelle et ce qu elle doit contenir En effet pour que l algorithme utilise votre variable il doit d j savoir qu elle existe et ce qu elle doit contenir Il ne s agit pas ici de d finir la valeur de la variable vous pourrez le faire dans la suite de l algorithme en lui affectant une valeur Il s agit de donner son nom et de pr ciser le type de valeur qu elle peut conte
139. ation Vous disposez comme souvent de plusieurs moyens notamment avec les bases de donn es mais connaissant les listes cha n es vous devez penser qu il existe un moyen ou un autre de s en sortir directement avec quelques enregistrements et pointeurs Vous avez raison Dans un arbre chaque l ment membre de votre famille dispose d un p re et d une m re qui ont eux m mes deux parents Un l ment peut donc tre d crit par plusieurs informations mais deux seulement vont vous int resser pour la suite un l ment individu pointe sur son p re et sa m re Un type structur pouvant repr senter un individu pourrait donc tre Structure individu nom cha ne pnom cha ne pP re pointeur sur individu pM re pointeur sur individu FinStruct Contrairement aux listes cha n es simples ou doubles il ne s agit pas ici de d finir une liste file ou pile mais une notion de hi rarchie entre l ments p res et fils Cette hi rarchie porte le nom d arbre 2 D finitions a Base ENI Editions All rigths reserved Un arbre est form d une racine qui est l l ment la base de l arbre et d un nombre fini d arbres qui lui sont raccord s appel s sous arbres Chaque l ment d un arbre peut avoir plusieurs successeurs vous avez deux parents mais un seul pr d cesseur Seule la racine n a pas de pr d cesseur b Terminologie Les arbres utilisent une terminologie particuli re qui reprend en gros celle de la
140. avec les bonnes valeurs Pour reprendre l exemple de la classe Ecran nul doute qu en cr ant un objet de ce type vous voudrez positionner les attributs type marque mod le etc aux bonnes valeurs La solution actuelle consiste appeler explicitement les m thodes pr vues cet effet modif_type modif_ marque modif_mod le et ainsi de suite Il existe un moyen plus efficace et implicite de positionner les bonnes valeurs des attributs et d effectuer toute autre op ration n cessaire d s l instanciation Ce moyen c est le constructeur Le constructeur est une m thode particuli re qui est appel e automatiquement d s que vous cr ez un objet sans que vous ayez le pr ciser que se soit par d claration ou allocation dynamique via un pointeur Dans cette m thode libre vous de faire ce que vous voulez mais dans 90 des cas son r le sera de donner aux attributs leurs bonnes valeurs initiales ou des valeurs par d faut Un constructeur doit respecter les deux propri t s suivantes e Il porte le m me nom que la classe e Il ne retourne pas de valeur Via le polymorphisme param trique qu on appelle aussi la surcharge des m thodes vous pouvez cr er autant de constructeurs que vous le souhaitez un par cas selon les param tres pass s En algorithmique vous ajouterez le mot cl Constructeur devant le nom de la m thode en remplacement de Proc dure ou Fonction Ce n est pas forc ment obligatoire car aucune aut
141. avec une simple calculatrice tr s bas prix ne serait ce qu en divisant 1 par 3 Obtenez vous 1 333333 ou 1 333334 En r utilisant cette m me valeur les calculs suivants sont souvent fauss s Vu le nombre de manipulations pour arriver g rer les nombres r els leur manipulation par le microprocesseur est plus lente qu avec des nombres entiers Heureusement c t puis dans les microprocesseurs sont apparus des composants suppl mentaires appel s FPU Flotting Point Unit dont le but est de pouvoir manipuler directement les nombres et les fonctions math matiques associ es acc l rant fortement le traitement des donn es Peut tre avez vous entendu parler des processeurs Intel 386 qui quipaient les PC vers 1990 Un coprocesseur math matique appel 80387 pouvait souvent tre ajout pour acc l rer les op rations M me les ordinateurs personnels de type ENI Editions All rigths reserved Atari ST pouvaient se voir ajouter un coprocesseur de ce type 68881 Aujourd hui ces coprocesseurs n en sont plus ils sont directement int gr s dans le microprocesseur Le dernier microprocesseur de votre PC en contient 3 Les dates Les dates sont repr sent es de deux mani res dans l ordinateur La premi re est le format BCD vu pr c demment et ceci presque exclusivement dans le bios setup de votre ordinateur pour des raisons historiques Le second est le timestamp Unix qui repr sente le nombre de secondes coul es d
142. billet chaque passage dans la boucle on compte un billet Puis on passe au billet suivant et ainsi de suite Voici un exemple pour 1700 euros avec uniquement des billets de 500 euros Variables montant nb500 en Num rique D but montant 1700 nb500 0 Tant Que montant gt 500 Faire nb500 nb500 1 montantemontant 500 FinTantQue Ecrire nb500 montant Fin Ce qui donne en PHP lt html gt lt head gt lt meta gt lt title gt Factorielle 3 lt title gt lt head gt lt body gt lt php montant 1700 nb500 0 while montant gt 500 nb500 montant montant 500 echo Nombre de billets de 500 S Snb500 lt br gt echo Reste S Smontant 2 gt lt body gt lt html gt Que se passe t il la sortie de la boucle nb500 vaut 3 et montant vaut 200 g n raliser l algorithme pour toutes les valeurs Variables montant nb500 nb200 nb100 nb50 nb20 nb10 nb5 en Num rique Variables nb2 nb1l nb05 nb02 nb01 nb005 nb002 nb001 en Num rique D but montant 1700 nb500 0 nb200 0 nb100 0 nb50 0 nb20 0 nb10 0 nb002 0 nb001 0 Tant Que montant gt 500 Faire nb500 nb500 1 montant montant 500 FinTantQue Tant Que montant gt 200 Faire nb200 nb200 1 montantemontant 200 FinTantQue Tant Que montant gt 100 Faire nb100 nb100 1 montantemontant 100 FinTantQue Tant Que montant gt 50 Faire nb50 nb50 1 ENI Editions All rigths reserved c est le reste Aussi il faut 11 12 montante
143. blement cha n e ce n est plus pour une repr sentation lin aire mais hi rarchique Structure noeud valeur entier pGauche pointeur sur noeud pDroit pointeur sur noeud FinStruct Chaque arbre binaire peut tre d compos en sous arbres un gauche et un droite Mais bien souvent un sous arbre peut lui m me tre clat chaque n ud ayant un ou des fils contient un ou deux sous arbres un droite et un gauche Le n ud 9 a deux sous arbres un gauche vers le n ud 9 un droite vers le n ud 10 Dans les fonctions de parcours suivantes chaque appel chaque n ud ne valant pas NIL est consid r comme la racine d un arbre et les sous arbres partant de ce n ud seront parcourus comme tels Le parcours complet d un arbre consiste parcourir tout l arbre afin d acc der l ensemble des n uds de l arbre Bien qu il soit possible de faire ceci avec des structures it ratives le moyen le plus facile est d employer des sous programmes r cursifs afin de traiter e La racine e Le sous arbre gauche e Le sous arbre droit Ce type de parcours est dit pr fix Le programme va d abord traiter tous les l ments de gauche Arriv une feuille il remonte au n ud pr c dent puis passe droite pour traiter les l ments de gauche de celui ci puis remonte et ainsi de suite Dans l arbre binaire de l exemple l ordre de sortie est le suivant e Branche gauche 12 gt 9 gt 8 c est une feuille e On
144. buts publics nb_ecrans 0 entier statique m thodes publiques Constructeur Ecran D but nb_ecransenb_ecran 1 Fin Destructeur Ecran D but nb_ecransenb_ecran 1 Fin Proc dure nbEcrans D but Afficher nb_ecrans FinProc FinClasse ENI Editions All rigths reserved Programme obj11 Var p_ol pointeur sur Ecran p_o2 pointeur sur Ecran D but p_ol nouveau Ecran p_ol gt nbEcrans 1 p_o2 nouveau Ecran p_o2 gt nbEcrans 2 Afficher Ecran nb_ecrans Acc s public 2 Lib rer p_ol p_o2 gt nbEcrans 1 Lib rer p_o2 Afficher Ecran nb_ecrans Seul moyen ici 0 Fin 4 Classes et m thodes abstraites Il y a des fois o vous avez besoin de d finir un prototype de classe dans laquelle vous allez d clarer des m thodes mais pas forc ment leur impl mentation Par exemple vous voulez cr er des classes repr sentant des figures g om triques afin de concevoir un logiciel de conception assist e par ordinateur Dans ces logiciels 2D ou 3D les diff rentes figures trac es ont toutes leurs propri t s comme leurs dimensions surface p rim tre volume couleur de remplissage couleur du contour etc Les valeurs de ces attributs varient d une figure l autre c est normal mais certaines m thodes peuvent tre identiques comme celles pour la couleur et d autres non comme le calcul des surfaces volumes et p rim tres Pourtant toutes les figures carr s rectangles polygones triangle
145. car de 1 10 Faire RepeteCar FinPour FIN Ce programme une fois ex cut devrait vous afficher quelque chose de ce genre x XX kkk kkxkx k kkkk kxx k KXKKKXXX KKKKXKXXX KXKKKKXKXXX KXKKKKKXXX Xk XKKKKKXXX XX Remarquez que les deux variables globales sont modifi es dans le programme principal tandis que le sous programme y acc de La variable globale am ne trois remarques e Elle n est d clar e qu une seule fois pour l int gralit du programme Elle ne doit donc jamais tre red clar e tant dans le programme principal que dans un sous programme e Elle permet indirectement de passer des valeurs aux sous programmes qui l utilisent C est un dommage collat ral et les variables globales ne devraient tre r serv es que lorsque celles ci sont vraiment communes la plus grande partie du code ENI Editions All rigths reserved e Il serait ridicule de d clarer toutes les variables en globales La plupart des programmes et sous programmes ne les utiliseraient pas toutes et en plus vous risqueriez par accident pensant une variable locale d en modifier certaines sans y prendre garde et ainsi de mettre en p ril l ex cution du programme e Comme corollaire ne donnez jamais le m me nom une variable locale et globale C est interdit en algorithmique et dans la plupart des langages qui ne manqueront pas de vous le faire remarquer la compilation ou l ex cution c Variables globales et P
146. cela r sout singuli rement le probl me 2 Probl matique Qu est ce qu un fichier C est exactement la m me chose que dans la r alit Quand vous avez une seule information retenir dans votre t te c est facile Quand vous en avez des milliers c est une mission impossible Vous allez utiliser un agenda rempli de fiches Le cerveau a certes des capacit s incroyables mais comment retenir toutes les transactions bancaires de millions de comptes pour une banque cela ajoutez deux probl mes e Malgr la puissance de vos ordinateurs la capacit m moire reste souvent limit e Un ordinateur 32 bits standard bureau jeu est souvent limit 4 Go Parfois des machines vont beaucoup plus haut jusqu 64 Go Or m me au modeste niveau de l ordinateur personnel cela reste souvent tr s insuffisant il est impossible de conserver toutes les donn es en m moire Par exemple un film au format DV d un camescope num rique occupe pr s de 20 Go un DVD complet plus de 8 Go etc e M me s il tait possible de conserver toutes les donn es en m moire centrale ce qui serait somme toute l id al vu la vitesse d acc s aux informations cette derni re est volatile C est dire que tant que l ordinateur est allum que vos programmes ne plantent pas et que l lectricit fonctionne il n y a aucun probl me D s qu on d branche tout dispara t Il faut donc trouver une solution p renne pour conserver vos donn es Un fi
147. chier correspond l une des possibilit s 3 D finition Un fichier est un ensemble d informations g n ralement structur es d une mani re ou d une autre Certes la m moire contient aussi ce genre d informations vous avez vu les types structur s mais on parle de fichiers quand ces informations sont plac es sur un support moins volatile que la m moire de l ordinateur Aussi un fichier se place sur une disquette en voie de disparition une bande magn tique comme les sauvegardes sur bande par exemple une cl USB et surtout sur un disque dur 4 Les formats a Types de contenus Un fichier se distingue des autres par quelques attributs dont son nom et sa cat gorie Ils se distinguent aussi entre eux par l organisation de leurs donn es ce qui d finit leur format Vous connaissez probablement plusieurs formats de fichiers e les fichiers texte ENI Editions All rigths reserved e les documents des traitements de texte e les fichiers son MP3 e les vid os Divx e les fichiers HTML e les images JPEG e les fichiers de votre gestion de compte bancaire e etc Comment s y retrouver Il existe autant d organisations de donn es qu il existe de logiciels C est d ailleurs souvent un tr s gros probl me c est ce qu on appelle un format de fichiers propri taire il est souvent impossible de relire un format donn avec un produit concurrent Cela n a pas forc ment de rapport direct mais un
148. code algorithmique Vous pouvez donc quasiment tout tester Par tester comprenez ici valuer une expression qui est une condition Une condition est donc le fait d effectuer des tests pour en fonction du r sultat de ceux ci effectuer certaines actions ou d autres Une condition est donc une affirmation l algorithme et le programme ensuite d termineront si celle ci est vraie ou fausse Une condition retournant VRAI ou FAUX a comme r sultat un bool en En r gle g n rale une condition est une comparaison m me si en programmation une condition peut tre d crite par une simple variable ou m me une affectation par exemple Pour rappel une comparaison est une expression compos e de trois l ments e une premi re valeur variable ou scalaire e un op rateur de comparaison e une seconde valeur Variable ou scalaire Les op rateurs de comparaison sont ENI Editions All rigths reserved e L galit e La diff rence ou lt gt e Inf rieur lt e Inf rieur ou gal lt e Sup rieur gt e Sup rieur ou gal gt Le pseudo code algorithmique n interdit pas de comparer des cha nes de caract res videmment vous prendrez soin de ne pas m langer les torchons et les serviettes en ne comparant que les variables de types compatibles Dans une condition une expression quel que soit le r sultat de celle ci sera toujours valu e comme tant soit vraie soit fausse L op rateur d a
149. d par une valeur de retour puis par un pointeur La premi re fonction est tr s classique et ressemble beaucoup ce qui existe en PHP long modif long var long n var n return var Elle s utilise ainsi et n am ne pas de remarque particuli re i modif i 1000 printf i contient maintenant da n i La seconde fonction est modifi e pour prendre une adresse en param tre void modif2 long var long n var n Le premier param tre est un pointeur sur une variable de type long La fonction doit recevoir l adresse d une variable de type long comme la variable i de l exemple Vous devez l appeler comme ceci modif2 8 amp i 20000 printf i contient maintenant da n i C est l adresse de i que vous passez comme premier param tre de la fonction Dans la fonction modif2 var va contenir l adresse de i va modifier le contenu de cette adresse en y pla ant la valeur du second param tre Au retour la valeur de i est donc modifi e i contient maintenant 20000 C est exactement le fonctionnement des sous programmes de type proc dure du chapitre Les sous programmes ENI Editions All rigths reserved C est avec les enregistrements de type structur et surtout les tableaux que les pointeurs montrent toute leur puissance Un tableau est une liste d l ments contigus en m moire Si vous r cup rez l adresse du premier l ment vous pouvez acc dez aux n l ments suivants situ s aux n adresses suivan
150. des m thodes d crites pour un cran est valable pour 99 des crans si ce n est plus Le contenu des propri t s sera probablement modifi mais si l cran est standard le changement de r solution via Windows MacOS ou Linux sera effectu de la m me mani re La d finition globale propri t s et m thodes d un tel objet peut former une sorte de moule commun tous les objets les crans de m me type Une fois que vous disposez de ce moule vous pouvez l appliquer autant d objets les crans que vous voulez avec d ventuelles variantes en appliquant les m mes m thodes b En informatique Programmation proc durale En programmation proc durale la question se poser quand on d veloppe est quoi sert le programme Ici il sert manipuler les informations et les fonctions d un cran Comment en programmation repr senter les propri t s de l cran et les manipulations qui y sont associ es Jusqu pr sent vous auriez probablement raisonn ainsi e Regrouper toutes les informations sur l cran dans un type structur tEcran par exemple e Cr er des sous programmes de gestion des param tres de l cran prenant comme arguments la structure correspondante e Pour n crans vous cr ez n enregistrements structures de type tEcran un par cran dans des variables diff rentes ou dans des tableaux Pour r sumer en algorithmique vous cririez quelque chose ressemblant plus ou moins cela
151. ditions All rigths reserved b Une table comme champ Selon le m me principe qu un tableau dans une structure vous pouvez utiliser un tableau d enregistrements comme type de donn es dans une structure puisque ce n est qu un tableau apr s tout Soit une grande enseigne disposant de dix magasins Vous devez d crire deux structures une structure magasin et une structure enseigne La structure enseigne doit contenir les enregistrements des dix magasins Voici ce que vous pourriez faire Structure tmagasin adresse cha ne tel cha ne gerant cha ne FinStruct Structure tenseigne nom cha ne magasin tableaul 1 10 de tmagasins FinStruct Voici comment exploiter un enregistrement de type tenseigne Var enseigne tenseigne i entier D but Afficher Nom de l enseigne Saisir enseigne nom pour i de 1 10 Faire Afficher adresse du magasin i Saisir enseigne magasin il adresse Afficher tel du magasin i Saisir enseigne magasin i l tel Afficher g rant du magasin i Saisir enseigne magasin i l gerant FinPour Fin Il n y a en fait rien de bien complexe Vous pouvez encore aller plus loin en cr ant des tables contenant d autres tables et ainsi de suite 5 Et PHP Il y a ici un petit probl me PHP ne dispose pas tout au moins directement de moyen de d clarer une structure en tant que telle contrairement des langages comme le C C ou le Pascal PHP est un langage dit objet L objet est abord dans le de
152. e 127 128 On dit alors que la variable est sign e elle peut contenir des valeurs positives et des valeurs n gatives Seulement 8 bits ne sont pas suffisants pour des grandes valeurs C est pourquoi les nombres peuvent tre plac s dans deux cases 16 bits quatre cases 32 bits ou plus Si l ordinateur est bien plus l aise et bien plus rapide avec des nombres entiers il sait aussi manipuler des nombres r els bien que dans ce cas leur codage en binaire soit radicalement diff rent Vous trouverez plus bas toutes les explications n cessaires pour comprendre comment l ordinateur se repr sente exactement les nombres n gatifs et r els ce n est pas si vident Au final l ordinateur est capable de g rer des nombres de longueur variable sign s ou non entiers ou r els Suivant le langage de programmation les types portent des noms diff rents Cependant le C et ses d riv s proposent les types suivants Attention car Java fait la diff rence entre le type Byte de un octet et le type Char qui prend deux octets cause du format de codage des caract res en Unicode Type num rique Plage de valeurs possibles ENI Editions All rigths reserved Byte char Entier simple sign int 32 768 32 767 Entier simple non sign 0 65535 Entier long sign long 2 147 483 648 2 147 483 647 Entier long non sign 0 4294967295 R el simple pr cision float N gatif 3 40x1038 1 40x104 P
153. e sont en fonction du langage des artifices ou plut t des facilit s cens es simplifier la vie du d veloppeur Quand vous affectez une cha ne de caract res ce type de variable le langage conna t la longueur de cette cha ne a Salut la longueur de Salut est 5 et va allouer l espace m moire contigu n cessaire au stockage de cette cha ne Que repr sente alors la variable Bien souvent ce sera la position en m moire de la cha ne de caract res ENI Editions All rigths reserved autrement dit son adresse Pour reprendre l exemple de la cha ne de caract res Bonjour ci dessus elle d bute l adresse m moire 1616 Si c est la variable txt qui contient cette cha ne txt va en fait r f rencer le tableau de caract res pr sent l adresse 1616 C est flagrant avec des langages comme le C qui permettent de manipuler directement les adresses m moire et leur contenu Prenez maintenant un tableau de cinq cha nes de caract res PROGRAMME TABCHAINES VAR essages tableaul 1 5 de cha nes DEBUT essages 1 il essages 2 ne essages 3 fait essages 4 pas essages 5 beau FIN Pour se repr senter ceci en m moire il faut d abord se repr senter l organisation des cha nes de caract res Soit la phrase il ne fait pas beau vous voulez placer chacun des mots dans un l ment d un tableau 2007 gt 2009 2010 gt 2012 2013 gt 2017 2018 gt 2021 2022 gt 2026 Notez deux choses e
154. e une liste rev t plusieurs formes une liste de courses de t ches effectuer un index un glossaire une collection de dvds de musiques etc Ces listes sont compos es d l ments individuels li s les uns aux autres par leur type ou l ordre que vous voulez leur donner Pour passer d un l ment un autre vous descendez dans la liste dans l ordre que vous lui avez donn Comment se repr senter une liste par d finition lin aire en programmation Vous connaissez au moins un moyen les tableaux Dans un tableau vous pouvez stocker n l ments et l ordre peut tre repr sent par l indice du tableau Connaissez vous un autre moyen de stocker des l ments Les enregistrements de types structur s le permettent et en plus vous pouvez y stocker bien plus de d tails Vous pouvez aussi cr er des tableaux d enregistrements donc leur donner un certain ordre L utilisation des tableaux pose cependant parfois des probl mes un peu complexes Vous l avez d j remarqu avec les m thodes de tris e Comment ins rer un nouvel enregistrement en d but de tableau Il n y a pas d indices n gatifs e Comment ins rer un nouvel enregistrement en fin de tableau Si l algorithmique propose un redimensionnement dynamique les langages PHP l autorisent e Comment ins rer un l ment au milieu du tableau Faut il d caler tous les l ments pour placer le nouveau l endroit donn Si oui le tableau risque de d border
155. e 32 bits la valeur r elle en d cimal il faut appliquer la formule suivante x 14x27 Formule de calcul d un r el depuis sa repr sentation binaire Reprenez les valeurs pr c dentes converties en d cimal pour plus de facilit e E 137 e M 3551723 z x S 2 127 3551723 7 3388608 2 LEA 182 1949920654296875 Le codage d un r el sur 32 bits am ne deux remarques e La taille de la mantisse limite la pr cision pour des nombres de grande valeur car plus le nombre avant la virgule occupe de la place plus la taille restante dans la mantisse est r duite pour les chiffres apr s la virgule Cette remarque est aussi dans une moindre mesure valable pour un r el cod sur 64 bits e La pr cision peut se r v ler insuffisante pour certaines applications Si vous envoyez une fus e sur Jupiter en calculant la trajectoire en simple pr cision pour chaque l ment de calcul intervenant la fus e risque cette chelle de ne pas arriver au bon endroit cause des sommes d impr cisions Le principe du r el en double pr cision est exactement le m me sauf que les tailles de l exposant et de la mantisse sont agrandies L exposant fait 11 bits la mantisse 52 bits Si vous reprenez les calculs mais cette fois en double pr cision vous arrivez un total de 182 194999992847442626953125 avec un arrondi 224 Un exemple concret et simple des erreurs d arrondi peut tre tout fait mis en vidence
156. e Et si vous supprimez un enregistrement allez vous de nouveau d caler le tableau pour boucher le trou Ou trouver une parade pour passer par dessus Vous pouvez vous arranger pour tout programmer afin de tout faire marcher avec les tableaux C est parfaitement possible Mais est ce vraiment raisonnable Est ce de la programmation efficace Rappelez vous qu au chapitre Introduction l algorithmique vous avez appris qu il faut tre conome en ressources Cette m thode est gourmande et compliqu e Il vous faut en trouver une autre plus simple et plus belle En fait encore une fois vous connaissez tous les principes de base de cette nouvelle m thode Voici quelques l ments e Un enregistrement peut contenir un autre enregistrement e Cet autre enregistrement peut tre du m me type structur e L enregistrement peut aussi contenir un pointeur vers un autre enregistrement du m me type e En notation Java un enregistrement est un objet et dans un objet on peut r f rencer un autre objet du m me type e On obtient ainsi une cascade d enregistrements qui se suivent les uns les autres Pour acc der au suivant il suffit d acc der la r f rence de cet enregistrement dans l enregistrement actuel e Chaque enregistrement dispose d un pointeur ou r f rence vers le suivant e Les enregistrements sont donc cha n s les uns aux autres c est une liste cha n e d enregistrements Le principe peut tre repr sent
157. e break est en principe d conseill et il vaut mieux que la boucle elle m me ait une condition de sortie afin d viter une catastrophe en cas de modification du bloc d instructions qu elle contient Il faut maintenant compl ter l algorithme d origine pour y ajouter nos variables e Un compteur du nombre de notes e La note minimale e La note maximale e La somme de toutes les notes e La moyenne La moyenne s effectue en sortie de la boucle principale une fois l ensemble des notes saisi Il faut veiller ce qu au moins une note ait t saisie sinon l algorithme effectuerait une division par z ro ce qui est videmment impossible Au sein de la boucle et seulement si la note saisie est diff rente de 1 l algorithme compare la plus ENI Editions All rigths reserved basse note avec la note actuelle qui devient la plus basse le cas ch ant la m me chose est faite pour la note la plus haute vous prendrez soin d initialiser correctement ces valeurs d s le d but et le total des notes est calcul En sortie de boucle il ne reste plus qu faire une division Variables note cpt min max sum moy en Num rique D but min 20 max 0 cpt 0 sume0 Ecrire Entrez une note Lire note Tant que note gt 1 Faire Si note gt 20 Alors Tant que note lt 1 ou note gt 20 Faire Ecrire Erreur 0 gt 20 1 sortie Lire note FinTantQue Finsi Si note lt gt 1 Alors cpt cpt 1l sum sum tnote Si note lt min Alors min note
158. e des caract res L arriv e des ordinateurs avec une grande capacit m moire et une gestion avanc e de l affichage des caract res permet de disposer de polices de caract res un fichier qui contient tous les dessins des caract res destination de l cran ou de l imprimante qui peuvent contenir les alphabets de la plupart des langues Par exemple dans la police Arial on ENI Editions All rigths reserved pourrait trouver les caract res europ ens mais aussi h breux arabes chinois japonais et ainsi de suite Mais comment repr senter ces milliers de caract res diff rents en m moire Une norme appel e Unicode reconnue par la plupart des syst mes d exploitation et des logiciels notamment sous Unix et Windows fait sauter cette limitation Chaque caract re dispose d un nom et d un identifiant num rique de mani re unifi e et quelque soit le syst me cible C est dire que tout produit sachant interpr ter les caract res unicode affichera les cha nes de caract res crites sous cette norme avec les bons caract res Un texte unicode en chinois s affichera en chinois si votre traitement de texte g re l unicode et dispose de la police de caract res unicode contenant les id ogrammes chinois Notez que vous n avez pas vous soucier de la mani re dont vous tapez le texte le syst me d exploitation et les logiciels le font votre place vous continuez taper votre texte comme vous l avez toujours fait Unicode
159. e sur un l ment pr c dent et pEncours contient NIL la recherche est arriv e au bout l ment trouv ou non le nouveau se place en dernier Quatre cas de figures qui correspondent aux quatre sous programmes d j cr s ci dessus L algorithme devient simple il suffit d appeler la bonne proc dure selon les valeurs de pPrec et de pEncours La proc dure ajout_element prend trois valeurs la valeur recherch e la valeur ins rer avant et le pointeur de t te de la liste Proc dure ajout_element E vrech vnouveau entiers ES pTete pointeur sur element Var pPrec pEncours pNouveau pointeurs sur element D but pNouveau nouveau element pNouveau valeur vnouveau recherche _liste vrech pTete pPrec pEncours Si pPrec NIL Alors Si pEncours NIL Alors ajout_unique pNouveau prete Sinon ajout_d but pNouveau pTete FinslI Sinon Si pEncours NIL Alors ajout_fin pNouveau pPrec Sinon ajout _milieu pNouveau pPrec pEncours Finsi Finsi FinProc 6 ENI Editions All rigths reserved Simplification Les traitements sont ici tr s d taill s Cependant analysez les proc dures ajout_premier et ajout_d but Que remarquez vous Elles se ressemblent d autant plus que dans ajout_d but pTete contient d j NIL s il n y pas d enregistrements Donc les deux proc dures sont identiques ajout_debut remplace ajout_premier Regardez maintenant ajout_fin et ajout_milieu dans ajout_milieu que re
160. e trajet vous arrivez bon port Mais quid des impond rables Par o allez vous passer si la route droite au prochain carrefour est devenue un sens interdit cela arrive parfois y compris avec un GPS prudence ou que des travaux emp chent de prendre la troisi me sortie du rond point Reprenez le trajet allez tout droit Si au prochain carrefour la route droite est en sens interdit continuez tout droit puis prenez droite au carrefour suivant puis gauche sur deux kilom tres jusqu au rond point Sinon tournez droite et faites trois kilom tres jusqu au rond point Au rond point si la sortie vers B est libre prenez cette sortie Sinon prenez vers C puis trois cents m tres plus loin tournez droite vers B Ce petit parcours ne met pas uniquement en lumi re la complexit d un trajet en cas de d tour mais aussi les nombreuses conditions qui permettent d tablir un trajet en cas de probl me Si vous en poss dez certains logiciels de navigation par GPS disposent de possibilit s d itin raire Bis de trajectoire d vitement sur telle section ou encore pour viter les sections p age Pouvez vous maintenant imaginer le nombre d expressions valuer dans tous ces cas de figure en plus de la vitesse autoris e sur chaque route pour optimiser l heure d arriv e 2 Que tester Les op rateurs s appliquent sur quasiment tous les types de donn es y compris les cha nes de caract res tout au moins en pseudo
161. eaux empil s L algorithme r cursif pour r soudre ce probl me est un grand classique n cessitant un peu de torture mentale Supposons que vous sachiez d placer n 1 disques Pour en d placer n il suffit de d placer n 1 disques du piquet 1 au piquet 3 puis de d placer le grand disque du piquet 1 au piquet 2 et de terminer en d pla ant les n 1 autres disques du piquet 3 vers le piquet 2 Soient ENI Editions All rigths reserved sags e nle nombre de disques a la position de d part valant 1 e b la position d arriv e valant 2 e c la position interm diaire utilisable valant 3 e au d part tous les disques sont la position a e une proc dure d placer qui d place un disque d une position une autre via une position interm diaire L algorithme est le suivant Proc dure d placeri n a b c entiers D but Si n gt 0 Alors d placer n 1 a c b Afficher De a vers b d placer n 1 c b a FinSi Fin Soit en PHP lt html gt lt head gt lt meta gt lt title gt Tour de Hanoi lt title gt lt head gt lt body gt lt php function deplace n a b c if n gt 0 echo deplace n 1 a b c lt br gt deplace n 1 a c b echo De a vers b lt br gt echo deplace n 1 c b a lt br gt deplace n 1 c b a deplace 3 1 2 3 2 gt lt body gt lt html gt ENI Editions All rigths reserved Les diff r
162. em tabli pos i 1 tant que tablpos gt mem et pos gt 0 Faire tablpos i tabl pos pos pos 1 FinTantQue tablpos 1 imem FinPour FinFonc Voici un petit programme pour l exploiter PROGRAMME TRITAB CONST INDICES 10 VAR t itableaul 1 INDICES 10 5 8 7 3 1 6 9 4 2 d entiers i sentier D but t tri_tableau t INDICES Pour i de 1 INDICES Faire Afficher t i FinPour Fin En PHP c est encore plus simple la taille des tableaux pass s en param tres n a pas d importance Vous pouvez facilement obtenir la taille d un tableau avec la fonction count La fonction tri_tableau ne re oit donc qu un seul param tre le tableau trier et n est m me pas oblig e de retourner le tableau car il est pass en r f rence lt html gt lt head gt lt meta gt lt title gt Fonction de tri de tableau lt title gt lt head gt lt body gt lt php attention passage par r f rence function tri_tableau amp tab Scpt count tab for i 1 i lt cpt S Si mem tab i pos i 1 while pos gt 0 amp amp tab pos gt mem tab pos 1 tab pos pos Stab pos 1 mem ENI Editions All rigths reserved St array 48 17 25 9 34 Scpt count t echo Avant for i 0 i lt cpt i echo lt br gt tri_tableau t echo Apres for i 0 i lt cpt i echo lt br gt 2 gt lt body gt lt html gt Le r sultat est le suiva
163. ement conseill En effet si PHP tombe sur une correspondance par exemple valeur1 et si aucun break n est pr sent alors il va ex cuter toutes les instructions jusqu en bas ou jusqu ce qu il rencontre un break En pratique les instructions pr vues pour valeur2 valeur3 etc sont ex cut es Le default est l action par d faut si aucune valeur case n est v rifi e lt html gt lt head gt lt meta gt lt title gt bissextile lt title gt lt head gt lt body gt lt php Smois 5 switch mois case 1 libmois Janvier break case 2 libmois F vrier break case 3 libmois Mars break case 4 libmois Avril break case 5 libmois Mai break case 6 libmois Juin break case 7 libmois Juillet break case 8 libmois Ao t break case 9 libmois Septembre break case 10 libmois Octobre break case 11 libmois Novembre break case 12 libmois D cembre break default libmois 7 echo libmois 2 gt lt body gt lt html gt 6 Des exemples complets a Le lendemain d une date Les structures d j abord es permettent d j d effectuer pas mal de petites choses Vous allez maintenant calculer le lendemain d une date selon les crit res suivants e La date est d compos e dans trois variables ann e mois et jour e Il faut g rer e les changements de mois e le nombre de jours dans le mois ENI Editions All rigths reserved e le cha
164. ement dit a EQV b a XOR b Si vous d veloppez encore la n gation de a b b a l aide des propri t s et du th or me de De Morgan vous retrouvez la formule alg brique de XOR Le EQV est souvent repr sent par le symbole e aeb L implication et l inhibition La plupart des langages ne proposent pas ces fonctions L implication indique que a est une condition suffisante pour b tandis que b est une condition n cessaire pour a Cela signifie que si b est vrai ou bien que si a et b sont identiques l expression est toujours vraie L implication se note a IMP b a IMP b a b ENI Editions All rigths reserved L inhibition est le contraire de l implication elle se note a INH b a INH b a b h Avec plus de deux variables Rien n emp che et bien au contraire d utiliser plus de deux variables logiques dans des expressions de l alg bre de Boole Reprenez l exemple de l tablissement de la communication t l phonique Elle dispose de trois variables e sonner qui sera appel e a e r pondre qui sera appel e b et e appeler qui sera appel e c Le r sultat d crocher sera d mais n intervient pas dans les calculs Quelle est la table correspondante Attention il y a un pi ge VRAI est repr sent par 1 FAUX par 0 Avez vous trouv le pi ge a sonne on n a pas envie de r pondre mais on veut appeler pour appeler Dans ce cas vous n allez pas d crocher vous a
165. encore rencontr ce qu est un retour ni un argument Ce n est pas g nant pour les petits exemples Voici le petit sous programme RepeteCar en PHP function RepeteCar for i 1 i lt 20 i echo x echo lt br gt 3 3 Appel ENI Editions All rigths reserved Un sous programme est ex cut depuis le programme principal ou un autre programme Pour cela le programme fait appel au sous programme L appel au sous programme est une instruction qui va d clencher l ex cution de celui ci Cet appel peut avoir lieu n importe o Suivant les diverses conventions les sous programmes peuvent tre appel s depuis une instruction Appel ou Appeler Plus simplement il est d usage d appeler un sous programme par son nom L usage peut cependant changer selon le type de sous programme proc dure ou fonction les instructions ci dessus tant souvent r serv es aux proc dures Pour reprendre le sous programme RepeteCar voici un exemple d appel Proc dure RepeteCar VAR i entier DEBUT Pour i de 1 20 Faire Afficher T FinPour FIN FinProc PROGRAMME LIGNES VAR itentier DEBUT Afficher Voici 10 lignes de 20 caract res Pour i de 1 10 Faire RepeteCar FinPour Afficher Le programme est termin FIN Les plus perspicaces d entre vous auront remarqu que la variable i est d clar e deux fois une fois dans le sous programme et une fois dans le programme principal C est normal les explications arriveront en
166. enregistrement se manipulent exactement comme des variables ils peuvent recevoir des valeurs et leur valeur peut tre affect e une autre variable Les champs peuvent tre utilis s partout o les variables sont utilis es y compris vous le verrez dans le prochain chapitre comme param tres de sous programmes en sais ie en affichage etc L exemple suivant reprend tous ces principes PRO Typ S F Var a r DEB A D OU gt U gt e A S S F a S F FIN GRAMME demo_enreg e tructure tarticle ref cha ne libelle chaine prix r el inStruct rticlel article2 tarticle eponse cha ne UT fficher R f rence du premier article aisir articlel ref fficher Libell du premier article aisir articlel libell fficher Prix du premier article aisir articlel prix fficher articlel ref articlel libelle articlel prix fficher Copier le premier article dans le second aisir reponse i reponse oui Alors article2 articlel Afficher article2 ref article2 libelle article2 prix insi rticle2 prix 15 25 i articlel prix article2 prix Alors afficher Les deux articles ont le m me prix insi Voici les constatations qui peuvent tre tir es de cet exemple e Le nom du champ seul ne repr sente rien il est toujours associ son enregistrement sous la forme enreg champ Ce qui est appel champ repr sente cette paire e Un champ s utilise exactement comme une variable ind pe
167. ent e a b a b le dernier terme provient du th or me de De Morgan e a a a b b a b b e a a et b b valent toujours O FAUX on les supprime il reste e a b a b Voici sa table de v rit Le O exclusif est not XOR le X pour eXclusif Vous le rencontrez sous ces notations e diff rent de en effet XOR est parfaitement quivalent ENI Editions All rigths reserved 7 e un entour ab Si le XOR n est pas ou peu utilis en algorithmique beaucoup de langages de programmation le proposent permettant de remplacer une condition longue par une condition plus courte Les programmeurs n ont souvent pas le r flexe de l utiliser La plupart des microprocesseurs int grent directement une instruction de type XOR accessible depuis le langage assembleur associ Enfin en lectronique les applications sous forme de porte logique sont nombreuses L quivalence EQV L quivalence porte tr s bien son nom Not e EQV elle signifie que a EQV b est VRAI si et seulement si a et b ont la m me valeur En alg bre de Boole NON a O b OU a ET b soit a b a b Si on d veloppe on obtient e a b a b le premier terme provient du th or me de De Morgan e a a a b b a b b e a a et b b valent toujours 1 VRAI on les supprime il reste e a b b a Voici la table de v rit de EQV Remarquez que l quivalence est le contraire du XOR Autr
168. ent e par une liste cha n e Chaque nouvel l ment est ajout en fin de liste tandis que les l ments sont trait s les uns apr s les autres depuis la t te de la liste Quand vous faites la vaisselle les assiettes sont empil es les unes sur les autres Quand vous lavez les assiettes vous prenez celles du dessus en descendant au fur et mesure Si de nouvelles assiettes sales sont empil es elles le sont sur le dessus de la pile Le principe est le m me en informatique quand vous voulez traiter des l ments au fur et mesure de leur arriv e les derniers arriv s sont trait s en premier La pile peut tre repr sent e par une liste cha n e les nouveaux l ments sont syst matiquement empil s en t te de liste et les l ments sont toujours trait s depuis cette t te Si les l ments arrivent plus vite que leur traitement ceux arriv s en premier risquent d tre trait s bien tard ENI Editions All rigths reserved 13 Les arbres 1 Principe L impl mentation des arbres en PHP reprend des principes quasi identiques aux listes vues pr c demment Cette fois le code PHP ne vous sera pas fourni vous d impl menter ces algorithmes ce n est pas tr s difficile Dans la nature les v g taux d crivent souvent des structures dites arborescentes L exemple le plus vocateur est l arbre le tronc se d compose en plusieurs branches se d composant elles m mes en branches plus petites et ainsi de
169. ent la puissance des processeurs ENI Editions All rigths reserved Vous comprenez maintenant l utilit de conna tre la complexit des algorithmes et d optimiser ceux ci Dans la suite les complexit s ne seront fournies que dans les cas o les traitements plus compliqu s que d habitude sont en concurrence avec diverses m thodes C est le cas par exemple des m thodes de tris sur des tableaux Ceci dans l unique but de vous donner un simple ordre d id e ENI Editions All rigths reserved Les langages d impl mentation 1 Quel langage Il existe plusieurs centaines de langages de programmation si on tient compte de toutes les variantes possibles d un m me langage Comme vous avez pu le lire au d but de ce chapitre l ordinateur ne comprend nativement qu un seul langage le langage machine Croyez vous vraiment que vous allez impl menter le programme de lancer de d directement en binaire ou m me en hexad cimal Le choix du langage m rite une petite d monstration On a coutume dans le milieu de l informatique de tester un langage en lui faisant afficher un message pour dire bonjour en l occurrence le fameux Hello world Voici comment afficher ce texte dans divers langages En assembleur x86 sous DOS Cseg segment assume cs cseg ds cseg org 100h main proc jmp debut mess db Hello worlda debut mov dx offset mess mov ah 9 int 21 ret main endp cseg ends end main En shell U
170. ent le constructeur de A depuis B vous devez le faire explicitement au sein du constructeur de B via le mot cl super Celui ci rempla ant l objet superclasse il s utilise comme un objet Modifiez le constructeur de B ainsi Classe B h rite de A Constructeur B D but super Afficher Je suis B Fin FinClasse Vous obtenez en relan ant obj10 le r sultat suivant Je suis A Je suis A Je suis B Une nouvelle ligne correspondant l appel du constructeur de A depuis B est affich e L encore en cas d h ritage en cascade vous devez appeler les constructeurs en cascade Il faut bien comprendre pourquoi l appel au constructeur de la superclasse n est pas automatique rien ne vous emp che au sein du constructeur de la classe d riv e d initialiser les attributs de la superclasse directement puisque sauf si ceux ci sont priv s vous y avez acc s directement L appel implicite au constructeur de la superclasse risquerait de faire double emploi ou d craser vos valeurs 2 Les destructeurs Tout comme le constructeur est appel la cr ation d un objet le destructeur est appel quand l objet est d truit ou l allocation dynamique lib r e Tous les langages ne proposent pas de destructeurs notamment Java mais proposent parfois des m thodes particuli res appel es automatiquement quand l objet n est plus utilis sortie de fonction quand l objet est local remise NIL de sa valeur etc PHP 5 propose un de
171. ent que Expi ET Exp2 est vrai Dans le cas du ET l ensemble est vrai uniquement si les deux expressions sont vraies l une ET l autre Dans les autres cas comme au moins l une des deux est fausse alors le r sultat total est faux O Table de v rit OU Dans le cas du O au moins l une des deux expressions doit tre vraie pour que l ensemble soit vrai Seule une seule assertion est donc fausse dans le cas o les deux expressions sont fausses toutes les deux NON ENI Editions All rigths reserved lt 9 Exp1 NON Exp1 Vrai 1 Faux 0 Table de v rit NON Le NON est tr s facile comprendre puisque l expression bool enne est invers e ce qui tait vrai devient faux et vice versa Dans quel cas les op rateurs bool ens sont ils utiles Dans les expressions utilis es dans des conditions ex cuter une action selon tel ou tel crit re quand ces conditions sont multiples Par exemple si vous voulez ex cuter une action uniquement si deux variables a et b sont vraies contiennent autre chose que 0 PROGRAMME ETI VAR a b entiers result bool en D but ael be 2 resulta ET b Afficher result Fin Notez que l algorithme ci dessus ne v rifie pas si a vaut 1 et b vaut 2 Il effectue l op ration logique a ET b Comme les variables a et b sont toutes les deux diff rentes de 0 elles sont consid r es comme vraies Donc la variable result contient VRAI et s affichera
172. ents Quid des tri Quid des recherches Cela devient difficile Il faudrait donc une sorte de m ta type particulier qui pourrait regrouper en un seul ensemble des variables de types diff rents Ces m ta types existent Ils s appellent des structures ou types structur s et permettent de d crire des enregistrements Les enregistrements sont en fait des structures de donn es compos es d l ments de types diff rents ou non Ces structures compos es de plusieurs l ments forment une entit unique qui est appel e un type structur Autrement dit vous pouvez cr er vos propres types de donn es en combinant d autres l ments de types diff rents ou non et cr er des Variables de ce nouveau type qu on appelle des enregistrements Les diff rents l ments contenus dans un type structur sont appel s des champs 2 D claration a Type structur Le type structur est opposable aux types dit primitifs vus jusqu pr sent Un type structur peut contenir des l ments de types primitifs entiers r els cha nes caract res des tableaux mais aussi des l ments d autres types structur s Ceci permet une infinit de nouveaux types pour tous les cas de figures Un type structur doit tre d clar et d fini avant les variables pour qu il puisse tre utilis pour d finir des enregistrements Le type structur se d clare donc entre les constantes et les variables Si l algorithme contient des sous programmes vou
173. ents fichiers 1 Pr ambule Vous permettrez pour une fois d tre un peu direct les fichiers sont une calamit d crire en algorithmique Durant des ann es jusqu au milieu des ann es 1990 le COBOL a r gn en ma tre chez les langages de programmation en informatique de gestion Ce langage tait aussi puissant dans ce domaine que sa syntaxe tait pratique Ceux d entre vous qui connaissent un peu le COBOL savent de quoi il est question ici Une des sources de sa puissance tait sa capacit g rer les fichiers et les enregistrements structur s dans tous les sens dans toutes les formes Seulement le COBOL est pass de mode pour les nouveaux d veloppements Les multitudes de fichiers de donn es diverses et vari es ont t remplac es par d autres structures notamment par des bases de donn es relationnelles rendant caduque l tude de la plupart des types de fichiers au profit de langages comme le SQL Pourtant les bases de donn es elles m mes sont souvent stock es dans des fichiers Aussi ce chapitre est plus court que les autres Il serait possible de d crire une foule de types de fichiers des livres complets existent sur ce th me de plusieurs centaines de pages Les bases et d finitions th oriques seront peu pr s toutes couvertes mais seuls seront trait s les fichiers textes PHP ne sachant pas directement vous pouvez bien entendu tout reprogrammer c est son r le g rer des fichiers de type index s
174. epuis le 1er janvier 1970 minuit pile UTC Cette date a t retenue car bien que l id e d Unix soit apparue en 1969 l re d Unix arriv e de la premi re version et expansion d bute dans les ann es 1970 Le 11 avril 2007 21 heures 24 minutes et 43 secondes le timestamp Unix est de 1176319483 secondes Le timestamp est g n ralement cod sur un entier de 32 bits sign S il est n gatif il repr sente une date d avant 1970 s il est positif une date suivante Il couvre une plage de 136 ans du 13 d cembre 1901 20 heures 45 minutes 52 secondes jusqu au 19 janvier 2038 3 heures 14 minutes 8 secondes Pass e cette date que se passera t il Tous les syst mes d exploitation ou les ordinateurs n ayant pas pr vu ce probl me rencontreront un magistral bug digne de celui de l an 2000 ou pire le bug de l an 2000 qui n a pas eu lieu ou peu malgr les pr dictions catastrophiques tait essentiellement logiciel le timestamp est d fini au sein du syst me d exploitation Alors que faire D j il reste une trentaine d ann es pour modifier la chose et c est bien souvent d j fait Unix a t con u il y a bient t 40 ans et est toujours extr mement utilis Il est fort probable que d ici 30 ans lui ou l un de ses d riv s le soit encore C est un syst me d exploitation qui a fait ses preuves Or les technologies voluent et les ordinateurs actuels manipulent sans difficult des nombres de 64 bits Un timestamp sign
175. er t FinProc 7 Port e des membres Dans le programme obj1 l acc s aux divers membres attributs ou m thodes se fait directement Le programme acc de aux membres en passant par l objet et l op rateur point C est que dans la d finition de la classe les membres sont bien souvent publics ils sont accessibles sans aucune protection Vous pouvez choisir de rendre les divers membres publics ou priv s Par d faut en PHP par exemple si vous ne pr cisez rien tous sont publics En algorithmique les attributs sont par d faut priv s et les m thodes publiques e Public les membres sont directement accessibles depuis toute autre partie du programme ou objet comme dans les exemples pr c dents via l op rateur point e Priv les membres ne sont plus accessibles depuis l ext rieur de l objet Ils sont seulement accessibles depuis l int rieur de l objet Vous pouvez pr ciser dans les d clarations le type d acc s vos membres Voici un exemple de la classe Ecran o les attributs sont priv s donc accessibles uniquement depuis les m thodes de l objet et les m thodes publiques Classe Ecran attributs priv s type cha ne marque cha ne mod le cha ne m thodes publiques Proc dure regler_affichage Proc dure affiche mod le Proc dure saisie mod le FinClasse Avec cette nouvelle d finition vous ne pouvez plus utiliser le programme obj1 tel quel Vous devez le modifier Programme obj2 Var ol Ecran
176. ermettent de communiquer avec le monde ext rieur et donc vous ce peut tre un clavier pour entrer les donn es et un cran pour afficher les r sultats Il permet l ordinateur d tre interactif Les instructions du programme sont pr sentes dans la m moire L unit de contr le va prendre la premi re instruction du programme et l ex cuter Si l instruction est par exemple d additionner deux nombres elle va demander l UAL de prendre ces deux nombres en m moire et de les additionner et ventuellement de placer le r sultat dans une nouvelle case Puis l UC passe l instruction suivante Si elle consiste afficher ce r sultat alors l UC va lire le contenu de la m moire l adresse o est plac le r sultat puis va envoyer le r sultat via le composant d E S ad quat Et ainsi de suite Au final le d roulement d un programme au sein de l ordinateur est le suivant e l UC extrait une instruction de la m moire e analyse l instruction e recherche en m moire les donn es concern es par l instruction e d clenche l op ration ad quate sur l ALU ou l E S e range le r sultat dans la m moire Von Neumann p re des ordinateurs actuels Si vous ouvrez le capot de votre ordinateur vous y verrez une grande quantit de cartes composants c bles et m me des organes m caniques lecteurs de disques durs cd et disquette Un programme que vous allez crire et d rouler ne s ex cute pourtant que dans un seul endroi
177. es 24 heures heures 24 Finsi Finsi Finsi Afficher jours heures minutes secondes FIN Dans le meilleur des cas un seul calcul sera effectu Dans le pire neuf Entre les deux toute une gamme Si par exemple on additionne 60 secondes alors on augmente forc ment d une minute et trois calculs suppl mentaires sont effectu s Si on augmente d une heure alors trois autres nouveaux calculs ont lieu et d une journ e deux derniers calculs On retrouve bien neuf calculs au pire Mais la complexit moyenne est largement r duite par rapport au premier algorithme Ce serait calculable via un intervalle al atoire mais born de n valeurs pertinentes Voici le programme modifi en PHP lt html gt lt head gt lt meta gt lt title gt Calcul d heures 2 lt title gt lt head gt lt body gt lt php if lisset _GET nbsec gt lt form method GET gt nb de secondes ajouter lt input type text size 4 name nbsec gt lt br gt lt input type submit name OK gt lt form gt lt php else heures 17 minutes 55 secondes 48 secondes nbsec nbsec GET nbsec l if secondes gt 59 minutes int Ssecondes 60 secondes secondes 60 if minutes gt 59 Sheures int minutes 60 minutes minutes 60 if heures gt 23 jours int heures 24 heures heures 24 echo jours heures minutes secondes gt lt body gt lt
178. es de ce livre sont impl ment s en PHP Les sources directement utilisables sont disponibles en t l chargement sur le site des ditions ENI ENI Editions All rigths reserved Les fondements de l informatique 1 Architecture de Von Neumann Un ordinateur est un ensemble de circuits lectroniques permettant de manipuler des informations qu on appelle des donn es et capable de faire tourner des programmes c est dire une suite ou s quence d instructions programm es l avance et qu il va d rouler du d but la fin dans le but d obtenir des r sultats Pour comprendre comment un ordinateur peut d rouler un programme il faut tudier un peu plus en d tail son fonctionnement C est Von Neumann qui a d fini en 1944 l architecture des ordinateurs modernes encore largement utilis e aujourd hui avec des Variantes cependant L architecture de Von Neumann issue des travaux de Turing dont il sera question plus loin d compose l ordinateur en quatre parties distinctes e L Unit Arithm tique et Logique UAL ALU en anglais est l organe de l ordinateur qui ex cute les calculs additions soustractions multiplications divisions modulos gestion des signes positif n gatif op rations logiques bool enne comparaisons parfois rotations et d calages de valeurs toujours dans le cadre d une logique bool enne Il existe des UAL sp cialis es dans les nombres virgule flottante d autres dans des traitements complexes c
179. es limitations frustrantes et notamment une certaine lourdeur lorsque le programme est tr s long et qu il s agit de r p ter certains blocs d instructions pourtant d j pr sents ailleurs Par exemple rappelez vous un simple petit programme qui calcule la valeur absolue d une commande L emb tant est qu chaque fois que vous voulez calculer cette valeur vous devez r p ter la structure conditionnelle N aurait il pas t plus simple de le faire une seule fois et de passer ce bloc d instructions uniquement la valeur dont on veut r cup rer la valeur absolue Vous pourriez pour cela envisager un second programme qui serait lanc par le programme principal avec comme param tre cette valeur C est techniquement faisable mais placer un second programme part un ex cutable juste pour ce genre de traitement c est une perte de temps et d espace L autre solution consiste ajouter le code n cessaire ce programme dans une structure sp ciale et part du programme principal C est ce qu on appelle un sous programme Les anciens langages BASIC utilisaient d ailleurs des instructions en ce sens gosub sub xxx endsub etc sub pour sous programme Lorsqu un programme est tr s long il n est pas r aliste de tout programmer d un seul tenant Le programme est d compos en de plus petites unit s ou parties r utilisables qui sont ensuite appel es au moment opportun par le programme principal Un sous programme vite la r p tition
180. es se d finissent avec le mot cl du m me nom la structure d un objet se d crit avec le mot cl Classe pour classe d objet Cette structure de l objet d finit ce que sera un objet de ce type La classe est le type de l objet e Un objet est une variable dont le type est sa classe e Une classe est en fait un moule servant cr er plusieurs objets Les objets issus d une m me classe sont diff rents les uns des autres parce que les valeurs de leurs propri t s ne sont pas toujours les m mes e Comme il peut y avoir plusieurs objets de m me type de classe on dit qu un objet est une instance de classe La d finition d un objet est un peu comme celle d une structure sauf qu elle est compos e de deux parties e Les attributs sont les propri t s de l objet c est dire les diff rentes variables qui d finissent ce qu il repr sente son tat e Les m thodes sont les sous programmes fonctions ou proc dures qui influent sur l objet par exemple sur les attributs Ces deux parties sont appel es les membres de l objet Les attributs sont des variables de n importe quel type primitif tableau objet etc Les m thodes sont l quivalent des sous programmes vus jusqu pr sent mais propres l objet ENI Editions All rigths reserved Classe mon_objet attributs attri entier attr2 tableaul1 10 de r els m thodes proc dure afficher proc dure effacer FinClasse Reprenez l exemple proc dural sur
181. est une norme de repr sentation interne des caract res et propose divers formats de stockage en m moire Actuellement unicode repr sente plus de 245000 chiffres lettres symboles ponctuation syllabes r gles de repr sentation etc Il faut de la place pour repr senter ceci La m thode la plus courante utilis e notamment par d faut sous Linux est l UTF 8 Universal Transformation Format Son tude d passe le cadre de ce livre et prendrait plusieurs pages Cependant sachez que le mod le Unicode est un mod le en couches La premi re couche est le jeu de caract res abstrait en fait une liste des caract res et leur nom pr cis Par exemple le correspond Lettre majuscule latine c c dille La seconde est l index num rique du caract re cod appel point de code not U XXXX o XXXX est en hexad cimal Sans rentrer dans les d tails le est repr sent par le point de codage U 00C7 Il existe plusieurs niveaux ensuite Java utilise un codage des caract res sous forme Unicode sur 16 bits Le premier octet en partant de la gauche repr sente le jeu de caract re le second le num ro de caract re dans ce jeu C est pourquoi le type caract re en Java utilise deux octets alors qu il n en utilise qu un seul en C ENI Editions All rigths reserved Types et langages 1 Langages typ s ou non Quelques langages sont tr s souples avec les variables Vous pouvez tout d abord y mettre des nombres puis du texte
182. etit probl me pas si anodin que cela Il met en vidence l utilisation de deux variables de m me nom l une dans le programme principal l autre dans le sous programme La variable i appara t deux fois L endroit o les variables sont d clar es est tr s important Selon cet endroit les variables ont une port e diff rente La port e d une variable est sa visibilit au sein des diff rentes parties du programme Le cas g n ral dit qu une variable n est visible et accessible par d faut que dans le bloc d instructions o elle a t d clar e Une variable d clar e dans un sous programme sous les mots cl s Proc dure ou Fonction ne pourra dans ce cas qu tre lisible et modifiable uniquement dans ce sous programme Idem pour le programme principal une variable d clar e sous le mot cl Programme ne sera accessible que par celui ci Les variables accessibles uniquement par le programme o sous programme dans lesquels elles sont d clar es sont appel es des variables locales Toutes les variables que vous avez rencontr es jusqu pr sent sont des variables locales Les variables locales de m me nom n ont aucun rapport entre elles Elles sont totalement ind pendantes les unes ENI Editions All rigths reserved des autres et aucune interaction entre elles n est possible Les variables locales peuvent donc parfaitement porter un m me nom La variable i de RepeteCar n est pas du tout la m me que la variable i du p
183. eurs de vos classes n ont pas toujours savoir comment sont d finies celles ci ils n ont acc s qu aux membres publics de votre classe Vous d finissez en fait des interfaces la liste des m thodes depuis lesquelles les utilisateurs acc dent indirectement aux attributs Les m thodes qui permettent de manipuler l objet sont les m mes quelles que soient les valeurs des attributs de l objet C est pourquoi un objet dont l attribut type est CRT ou LCD ENI Editions All rigths reserved s utilise de la m me mani re c est le principe d abstraction l utilisateur manipule n importe quelle instance de classe sans rien conna tre de sa complexit interne 9 L h ritage a Principe Vous ne trouverez la notion d h ritage nulle part ailleurs que dans l objet Il permet de cr er une nouvelle classe depuis une classe existante On dit alors que la nouvelle classe h rite de la premi re ou qu elle d rive de la premi re Vous entendrez r guli rement parler de classes d riv es en programmation objet Quand une classe h rite d une autre elle r cup re tous ses attributs et m thodes On dit que la classe de base est une superclasse La classe d riv e h rite des membres de la superclasse Sauf que dans la classe d riv e vous pouvez ajouter des nouveaux attributs et des nouvelles m thodes et m me red finir les m thodes de la classe de base c est une fonctionnalit majeure de la notion d objet Soit une classe animal
184. eurs sur element S trouve bool en 4 ENI Editions All rigths reserved Var trouve bool en D but trouve FAUX pPrece lt NIL pEncours pTete Tant que pEncours lt gt NIL ET pEncours valeur lt gt v Faire pPrec pEncours pEncours pEncours pSuiv FinTantQue Si pEncours lt gt NIL ET pEncours valeur v Alors trouve VRAT FinsSI FinProc e Ajout d un l ment Pour l ajout d un l ment dans la liste trois cas de figure peuvent se pr senter n cessitant trois traitements diff rents e L ajout d un l ment en d but de liste e L ajout d un l ment en milieu de liste e L ajout d un l ment en fin de liste Dans les trois cas le cha nage est modifi Il est certes possible de cr er un gros sous programme qui g re les trois cas d un coup mais il est profitable de diff rencier ces trois traitements en trois sous programmes ind pendants Il sera toujours temps ensuite de cr er un sous programme f d rateur qui g rera tous les cas Dans tous les cas suivants l adresse de l l ment ajouter que vous aurez d j remplie avec la bonne valeur sera repr sent e par le pointeur pNouveau Ajout en d but de liste Deux cas sont possibles l ajout d un l ment dans une liste vide auquel cas il s agit du premier enregistrement et l ajout d un l ment en premi re position de la liste Dans le premier cas il s agit de faire en sorte que l l ment ajouter soit le premier donc que pNouveau dev
185. euxi me tableau dans lequel on placera au fur et mesure les l ments du premier tableau dans l ordre croissant C est une tr s mauvaise id e pour de multiples raisons dont e L ajout d un second tableau double la m moire n cessaire e La recherche du plus petit l ment est plus compliqu e qu on ne le pense car chaque passage il ne faut pas reprendre ceux d j sortis et c est compliqu e Le nombre de boucles et de recherches est important La complexit de l algorithme r sultant aussi sup rieure aux autres Pour toutes ces raisons le tri par cr ation ne doit absolument pas tre utilis c Le tri par s lection Le tri par s lection est tr s simple il consiste s lectionner dans le tableau la plus petite valeur et de la permuter avec le premier l ment du tableau puis la deuxi me plus petite valeur hors premier l ment et de la permuter avec le deuxi me l ment du tableau et ainsi de suite et cela pour tous les l ments du tableau Voici les tapes n cessaires depuis l exemple g n ral CR a a S E e tape 1 la plus petite valeur est 9 on permute 9 et 48 o e ENI Editions All rigths reserved e tape 2 la plus petite valeur suivante est 17 d j la bonne position on passe la suivante D B o ES e tape 3 la plus petite valeur suivante est 25 d j la bonne position on passe la suivante C COS e tape 4 la plus petite valeur suivante est
186. ew disque 100 100 10 echo ol gt getSurface lt br gt echo ol gt getPerimetre lt br gt So2 new rectangle 10 10 35 25 echo o2 gt getSurface lt br gt echo o2 gt getPerimetre lt br gt JS lt body gt lt html gt 4 Interfaces Encore une fois en PHP les interfaces sont exactement comme en algorithmique Vous cr ez une interface avec le mot cl interface et vous indiquez que la classe impl mente cette interface avec le mot cl implements apr s le nom de la classe suivi du nom de l interface lt html gt lt head gt lt meta gt lt title gt Interfaces en PHP lt title gt lt head gt lt body gt lt php interface lecture public function lecture public function pause public function stop public function avance public function retour public function precedent public function suivant class Musique implements lecture private S morceau private position duree Spiste function Musique m p this gt morceau m this gt piste p position 0 ENI Editions All rigths reserved D but d impl mentation de l interface public function lecture echo lecture de this gt morceau lt br gt public function pause echo Pause this gt position lt br gt public function stopi echo Arr t piste this gt piste lt br gt public function avance echo Avance lt br gt
187. ffectation peut aussi tre utilis dans une condition Dans ce cas si vous affectez 0 une variable l expression sera fausse et si vous affectez n importe quelle autre valeur elle sera vraie En langage courant il vous arrive de dire choisissez un nombre entre 1 et 10 En math matique vous crivez cela comme ceci 1 lt nombre lt 10 Si vous crivez ceci dans votre algorithme attendez vous des r sultats surprenants le jour o vous allez le convertir en v ritable programme En effet les op rateurs de comparaison ont une priorit ce que vous savez d j mais l expression qu ils composent est aussi souvent valu e de gauche droite Si la variable nombre contient la valeur 15 voici ce qui ce passe e L expression 1 lt 15 est valu e elle est vraie e Et ensuite Tout va d pendre du langage l expression suivante vrai lt 10 peut tre vraie aussi e Le r sultat est pouvantable la condition est v rifi e et le code correspondant va tre ex cut Vous devez donc proscrire cette forme d expression Voici celles qui conviennent dans ce cas nombre gt 1 ET nombre lt 10 Ou encore 1 lt nombre ET nombre lt 10 3 Tests SI a Forme simple Il n y a en algorithmique qu une seule instruction de test Si qui prend cependant deux formes une simple et une complexe Le test SI permet d ex cuter du code si la condition la ou les expressions qui la composent est vraie La forme simple est la
188. ffecter une valeur un enregistrement en passant par son nom Pour lui affecter des valeurs il faut les affecter une une aux champs correspondants e Cependant il est possible d affecter un enregistrement un autre du m me type chaque champ de l enregistrement affect re oit la valeur du champ correspondant de l enregistrement affecter a Utiliser les champs Vous acc dez aux champs d un enregistrement en passant par le nom de l enregistrement et le nom du champ n s par s par le caract re le point selon la forme suivante nom_enreg nom_champ Cette syntaxe repr sente la valeur du champ nom_champ au sein de l enregistrement nom_enreg Reprenons l exemple pr c dent articlel prix ENI Editions All rigths reserved repr sente le prix de l articlei D ailleurs pour plus de simplicit lisez vos enregistrements de droite gauche article2 libell se lit libell de article2 Comme il est interdit d affecter une valeur directement un enregistrement complet vous devez passer par les champs videmment il est impossible si vous mettez le nom du champ seul de savoir quel enregistrement il appartient Aussi n oubliez jamais d crire le nom de l enregistrement ET le nom du champ De m me ne confondez pas tar le nom du type structur et le nom de l enregistrement ticle ref mauvaise id e ne repr sente rien du tout et ne peut recevoir aucune valeur Les champs d un
189. fic fic2 fichiers s quentiels nom nom2 cha nes ligne pwd cha nes D but nom passwd nom2 backup Ouvrir nom dans fic en lecture Ouvrir nom2 dans fic2 en Ajout Tant que NON EOF fic Faire Lire fic ligne pwd lt trim milieu ligne 9 1 Si pwd lt gt Alors Ecrire fic2 ligne Finsi FinTantQue Fermer fic Fermer fic2 Fin Traiter sur disque ou en m moire Cette strat gie de recopie a un avantage elle n utilise que tr s peu de m moire Elle a cependant un tr s gros inconv nient elle n cessite la pr sence un moment donn de deux fichiers sur le disque dur Dans le traitement pr c dent le but tait de supprimer les lignes inutiles du premier fichier Au final ce genre de traitement est en trois tapes e Recopie des enregistrements de passwd vers backup e Suppression du fichier passwd e Renommage de backup en passwd Cette m thode sera privil gier sur des fichiers tr s imposants plusieurs milliers ou millions de lignes si la m moire ne doit pas tre trop charg e Une autre m thode consiste tout traiter en m moire Elle se fait en deux tapes e Lecture int grale du fichier passwd et stockage des lignes dans un tableau e R criture du fichier passwd avec les bons l ments du tableau Certains langages font une distinction entre le mode d criture g n ralement destructeur le fichier est purg vid avant l ajout de donn es et un mode d ajout tendu o le
190. fichier peut aussi tre lu Prudence ENI Editions All rigths reserved Cette m thode est plus rapide et plus simple L acc s et le traitement des enregistrements en m moire sont plus rapides que l acc s un fichier du disque Une fois en m moire les donn es peuvent tre manipul es volont sans avoir relire les enregistrements Elle est pr f rable si la capacit m moire de votre ordinateur le permet Les gros logiciels comme les gestionnaires de bases de donn es relationnels chargent souvent en cache plusieurs blocs de fichiers pour acc l rer leurs traitements Tant que les supports de stockage non volatiles seront plus lents que la m moire c est ainsi qu il faudra proc der 3 Les enregistrements structur s Peut tre faudrait il dire d ailleurs enregistrements de types structur s tels que vus dans le chapitre Les tableaux et structures La m thode de lecture s quentielle rencontr e dans le point pr c dent a mis en lumi re un petit probl me Quand vous r cup rez un enregistrement vous le r cup rez en entier et c est vous de le d couper ensuite Pour en r cup rer plusieurs vous utilisez des tableaux un pour chaque champ de l enregistrement Or dans le chapitre Les tableaux et structures vous avez pris connaissance des enregistrements de types structur s Ces enregistrements sont eux m mes d compos s en champs Pourquoi ne pas lire et crire directement un enregistrement de type structur
191. finitions des m thodes une interface ne contient pas de code Pour d clarer une classe vous utilisez le mot cl Interface la place de classe Par exemple vous voulez cr er une interface qui d clare toutes les m thodes de base pour la lecture d un fichier multim dia lecture pause stop avance rapide retour rapide piste pr c dente piste suivante L interface ressemblerait ceci les param tres des m thodes ne sont pas pr cis s ici Interface lecture m thodes publiques Proc dure lecturei Proc dure pause Proc dure stop Proc dure avance Proc dure retour Proc dure pr c dent Proc dure suivant Finlinterface Notez bien qu une interface ne contient QUE des m thodes et rien d autre On dit qu une classe qui d cide d utiliser une interface impl mente les m thodes de l interface donc impl mente l interface Vous utilisez ce m me mot cl pour le pr ciser Classe titi impl mente interface Vous pouvez d cider d impl menter plusieurs interfaces au sein de votre classe dans ce cas vous s parez les noms des interfaces par des virgules Classe titi impl mente interfacel interface2 interfacen Vous devez impl menter toutes les m thodes de l interface dans la classe Si vous ne le faites pas la m thode qui n est pas impl ment e doit tre d clar e abstraite et la classe devient abstraite donc non instanciable La classe Musique r cup re l interface lecture
192. fit ou en tout cas a longtemps suffi pour repr senter tous les chiffres lettres et symboles des alphabets occidentaux Un octet repr sente les valeurs de 0 255 Avec l augmentation des espaces de stockages de la quantit de m moire du besoin de repr sentation de nombres de plus en plus grands d un acc s plus rapide la m moire ou encore de plus d instructions il a fallu augmenter la taille des valeurs manipuler De 8 puis 16 puis 32 certains microprocesseurs peuvent manipuler des valeurs de 64 voire 128 bits parfois plus Ces valeurs deviennent difficiles d crire et repr senter Pour ces valeurs on parle de mot m moire word en anglais Certains microprocesseurs font une diff rence entre divers types de mots Ceux de Motorola comme les 68000 qui quipaient les ordinateurs Atari ST Amiga les consoles Sega Megadrive et plus r cemment les Palm Pilot utilisent des mots de 16 bits et des mots longs long word de 32 bits Les instructions et les donn es sont donc cod es sous forme de nombres binaires qu on appelle des mots Cependant suivant le type de microprocesseur l ordre des mots est diff rent entre la r alit et son stockage en m moire Avec un microprocesseur x86 en mode r el 16 bits le nombre d cimal 38457 n cessite 16 bits soit deux octets ou un mot de seize octets pour tre repr sent 38457 19 1001011000111001 Pour stocker cette valeur en m moire les 8 premiers bits de poids faible soit
193. gnes colonnes et diagonales e Si une ligne colonne diagonale est compl te on sort de la boucle e En cas de victoire il faut indiquer quel pion x o a gagn e Il faut g rer le match nul neuf tours et personne n a gagn Le programme qui suit n est pas optimis de mani re tout fait volontaire afin de forcer la manipulation des indices de tableaux deux dimensions PROGRAMME MORPION VAR pitableauf1 3 1 3 de caract res i j Xx Y nbtours entiers pion caract re gagne bool en DEBUT Initialisation du plateau que des blancs Pour i allant de 1 3 Faire Pour j allant de 1 3 Faire pIJ JJA FinPour FinPour gagne FAUX nbtour 0 Boucle de jeu R p ter Changement du pion joueur Si pion lt gt o Alors Pion o Sinon Pion x Finsi Affichage du plateau Pour i allant de 1 3 Faire Afficher pli ll 1 pli l 2 pli l3 FinPour Saisie des coordonn es R p ter Afficher Coordonn es x y Saisir x y Jusqu x gt 1 ET x lt 3 ET y gt 1 ET y lt 3 ET p x y Mise en place du pion plx y pion ENI Editions All rigths reserved V rification en ligne Tel Tant que i lt 3 ET NON gagne Si p i T tsm ET plilli1 pli l 2 ET pli ll1 pli ll3 alors gagne VRAI Finsi ieiti FinTantQue V rification en colonne si NON gagne Alors isi Tant que i lt 3 ET NON gagne Si p 1 i ET p 1 i p 2 i ET p 1 i p 3 i
194. gt Egalit s vari es lt title gt lt head gt lt body gt lt php Sa 1L0 r1 3 1415927 txtl1 Hello World b a Sr2 r1 c int r2 txt2 txtl echo r2 lt br gt echo go lt br gt echo S Stxt2 lt br gt 2 gt lt body gt lt html gt 5 Saisie et affichage Pour simuler l affichage d un texte ou d une valeur sur l cran il faut utiliser la pseudo instruction Afficher qui prend sa suite une cha ne de texte ou une variable Si vous m langez du texte et des variables s parez ceux ci par des virgules l affichage les virgules seront remplac es par des espaces PROGRAMME AFFICHE VAR a entier texte cha ne DEBUT a 10 texte Hello World Afficher a Afficher texte ENI Editions All rigths reserved Afficher Bonjour les amis FIN Pour inviter un utilisateur rentrer au clavier une valeur utilisez le mot Saisir L algorithme attendra alors une entr e au clavier qui sera valid e avec la touche d entr e La valeur que vous saisissez sera plac e dans la variable indiqu e la suite de Saisir PROGRAMME SAISIE VAR reponse cha ne DEBUT Afficher Quel est votre nom Saisir reponse Afficher Vous vous appelez reponse FIN Si vous devez saisir plusieurs valeurs placer chacune dans une variable vous pouvez utiliser plusieurs Saisir mais plus simplement placez les diverses variables la suite d un unique Saisir s par es par des virgules L utilis
195. hangement de joint de culasse c est la casse assur e Il en est de m me de la programmation Il existe plusieurs langages de programmation tr s simples extr mement simples parfois qui peuvent donner un temps l illusion que vous savez programmer En entreprise m me certains employ s sont bombard s d veloppeurs pour leurs quelques connaissances confuses de Visual Basic de Delphi ou de Windev Le r sultat risque d tre catastrophique Les publicit s sont all chantes mais trompeuses Les bons programmeurs y compris les autodidactes ont tous un moment ou un autre eu affaire avec les algorithmes car il existe en programmation une multitude de moyens d arriver un r sultat mais tr s peu pour obtenir le meilleur r sultat possible ce qui explique pourquoi beaucoup de programmes ayant la m me fonction se ressemblent au niveau de la programmation alors que ce ne sont pas les m mes programmeurs qui les ont d velopp s Les d butants qui se lancent dans des projets de programmation audacieux se retrouvent parfois bloqu s ne ma trisant pas une technique particuli re de logique de programmation Certains abandonnent d autres trouvent un moyen de contournement souvent peu reluisant Les derniers liront peut tre un livre d algorithmique comme celui ci qui d faut de donner une solution compl te leur probl me leur fournira les bases et les techniques pour avancer Les ordinateurs personnels du d but des ann es 1980
196. hasard L algorithme n cessite trois boucles pour chacune des valeurs C est bien entendu au sein de la derni re boucle que les valeurs sont calcul es et les r sultats affich s en cas d galit Variables a b c nbl nb2 en Num rique D but a l be1 Cl Tant que a lt 10 Faire Tant que b lt 10 Faire Tant que c lt 10 Faire nbl a 100 b 10 c nb2 a 3 b3 c3 Si nbl nb2 Alors Ecrire nbl a b c FinsI c c l FinTantQue b b 1 FinTantQue a a l FinTantQue Fin Si vous convertissez ce programme en PHP vous devriez obtenir seulement deux possibilit s 153 et 371 En effet 33 73 13 27 343 1 371 ENI Editions All rigths reserved Voici le programme quivalent en PHP lt html gt lt head gt lt meta gt lt title gt Trois boucles lt title gt lt head gt lt body gt lt php x 1 y 1 z 1 while x lt 10 while y lt 10 while z lt 10 nbl x 100 y 10 z nb2 pow x 3 pow y 3 pow z 3 if nbl nb2 echo nbl nb2 x y z lt br gt Sz Sy x 2 gt lt body gt lt html gt ENI Editions All rigths reserved 13 R p ter Jusqu 1 Diff rences fondamentales Malgr l abondance d exemples vus jusqu pr sent la structure it rative Tant Que n est pas la seule M me s il est possible de tout programmer avec ce type de boucle il en manque encore deux dont la structure R p ter Jusqu Son pseudo code est le suivant
197. he encore au domaine spatial Le 11 d cembre 1998 la NASA lan a une sonde en direction de Mars Mars Climate Orbiter MCO dans le but d tudier le climat martien La sonde arriva en insertion orbitale mise en orbite autour de Mars le 23 septembre 1999 La sonde devait allumer son moteur principal un bon quart d heure passer derri re la plan te perte de contact avec la Terre puis de nouveau devant reprise de contact Le contact n a jamais repris Pourquoi Parce que lors des calculs n cessaires cette insertion sur orbite MCO a fait appel un programme issu d un autre fournisseur Lockheed Martin Or MCO programm par la NASA utilisait le syst me m trique Newtons par seconde et celui de Lockheed Martin le syst me de mesure imp rial anglais Livre par seconde Personne n a v rifi ni test Le r sultat est que la sonde s est approch e tr s haute vitesse 57 kms de la surface au lieu de 150 kms et a br l dans l atmosph re martienne B te erreur Imaginez maintenant les cons quences de ces deux tr s stupides erreurs de programmation de simples tests de conversion s il y avait eu des astronautes dans ces missions Heureusement votre modeste chelle vous n avez probablement pas la pr tention d envoyer des hommes sur Mars 3 George Boole Comme indiqu dans le chapitre Les variables et op rateurs c est l anglais George Boole 1815 1684 logicien math maticien et philosophe qui le premier a pos
198. heure2 delta hms D but Afficher Saisir l heure de d part Saisir heurel heures heurel minutes heurel secondes Afficher Saisir l heure de fin Saisir heure2 heures heure2 minutes heure2 secondes delta hms_delta heurel heure2 Afficher Il s est coul Afficher delta heures delta minutes delta secondes Fin Voici enfin une impl mentation en PHP de la fonction hms delta et du calcul de ce dernier exemple function hms_delta S Shmsil hms2 Sdelta new hms Sdelta sec_to_hms hms_to_sec hms2 hms_ to _sec hmsl return delta exemple 3 Sheures gt heures 10 Sheures gt minutes 30 Sheures gt secondes 45 Sheures2 gt heures 18 heures2 gt minutes 36 ENI Editions All rigths reserved heures2 gt secondes 24 Sdelta hms_delta heures S heures2 echo delta gt heures delta gt minutes S Sdelta gt secondes lt br gt 7 Sous programmes pr d finis a Un choix important Presque tous les langages de programmation proposent d une mani re ou d une autre la possibilit de cr er des sous programmes C est le cas du C du C de Java de C PHP etc Vous pouvez et vous allez cr er vos propres sous programmes selon le cas Cependant ces m mes langages sont souvent d j fournis avec une quantit plus ou moins importante de sous programmes Dans les exemples pr c dents vous en avez d j utilis s En PHP les instructions count ou fgets sont des sous programmes l
199. hme d crit formellement ce que doit faire l ordinateur pour arriver un but bien pr cis Ce sont les instructions qu on doit lui donner Ces instructions sont souvent d crites dans un langage clair et compr hensible par l tre humain faire ceci faire cela si le r sultat a telle valeur et ainsi de suite ENI Editions All rigths reserved Un algorithme bien tabli et qui fonctionne tout au moins en th orie pourra tre directement r crit dans un langage de programmation volu comme le C Java ou PHP Malheureusement en programmation c est souvent l homme de se mettre au niveau de la machine Probl me Algorithme Programme R flexion Programmation Sur ordinateur Sur papier De la r flexion la programmation Plus que cela un algorithme d crit une m thode de r solution de probl mes courants Un algorithme est donc r utilisable sauf cas ponctuel ou tr s pr cis Il existe plusieurs moyens d obtenir un m me r sultat mais certains sont meilleurs que d autres C est le cas par exemple des m thodes de tris de donn es par ordre alphab tique Il existe divers algorithmes d crivant ces m thodes certaines tant adapt es des quantit s plus ou moins importantes de donn es La ma trise de l algorithmique et l apprentissage des algorithmes de base sont une des conditions de la r ussite d un projet en programmation qu il soit personnel ou professionnel L exp rience aidant vous
200. ho lt br gt gt lt body gt lt html gt d Le tri bulles Le tri bulles a un lointain rapport avec le champagne et les boissons gazeuses Le but est que par permutations successives des valeurs voisines les valeurs les plus lev es remontent vers les derni res places du tableau tandis que les valeurs les plus basses migrent vers les premi res places Pour trier dans un ordre croissant il faut que chaque valeur d un l ment du tableau soit plus petite que celle de l l ment qui suit sauf pour le dernier bien entendu Voici une simulation pas pas du premier passage e tape 1 48 est sup rieur 17 on permute CS e tape 2 48 est sup rieur 25 on permute 17 25 48 9 34 e tape 3 48 est sup rieur 9 on permute gt b SN e tape 4 48 est sup rieur 34 on permute po p M l issue de ce premier passage vous remarquez que la valeur la plus lev e est d j en derni re place du tableau mais que le tableau n est pas enti rement tri Aussi il faut effectuer plusieurs passages en v rifiant chaque passage si des permutations ont eu lieu Quand au moins une permutation a eu lieu lors d un passage il faut en relancer un autre Ainsi il faut mettre en place un drapeau flag indiquant si une permutation a eu lieu ou non Voici les r sultats apr s les passages successifs e Passe 1 D CS CS e Passe 2 CE CS CS CS e Passe 3 CR CR CC
201. ho Note l sortie note fgets STDIN while note gt 1 if note gt 20 while note lt 1 note gt 20 echo Erreur Note l sortie note fgets STDIN if note gt 1 echo Note actuelle note echo Note l sortie note fgets STDIN gt Cet algorithme montre qu une simple r p tition de saisie est plus complexe qu il n y para t Au tout d but l utilisateur se voit poser une premi re fois la question s il r pond 1 tout de suite il n entre m me pas dans la boucle Dans la premi re boucle une v rification est effectu e sur la validit de la note saisie est elle sup rieure 20 Si oui alors il faut de nouveau effectuer une saisie et reposer en boucle la question autant de fois que n cessaire c est dire tant que la note saisie n est pas comprise entre 1 et 20 Sachant que 1 est une condition de sortie aucun traitement y compris la saisie d une nouvelle note ne doit tre effectu dans ce cas Vous avez ici une tr s belle application d un cas o un break aurait pu effectivement tre utilis Voici un exemple incomplet qui remplace le dernier Si de l algorithme pr c dent Tant que note gt 1 Faire Si note 1 Alors break FinSi Ecrire Entrez une note Lire note FinTantQue La boucle principale peut en effet tre directement interrompue d s qu une note de 1 est rencontr e Dans ce cas il serait m me possible d aller plus loin en consid rant
202. html gt Sachant que Unix compte le nombre de secondes coul es depuis le 1er janvier 1970 minuit pour calculer la date ENI Editions All rigths reserved actuelle vous savez maintenant comment le syst me d exploitation fait pour vous la fournir Et encore il doit convertir les jours en ann es en tenant compte des ann es bissextiles Vous avez maintenant tout le n cessaire pour cr er vous m me les morceaux d algorithmes manquants Vous pouvez m me si vous le souhaitez cr er un algorithme suppl mentaire pour g rer par exemple les fuseaux horaires en fonction d une heure centrale UTC Il n y a rien de difficile ENI Editions All rigths reserved 15 L alg bre bool en 1 L origine des tests Les tests effectu s tant en algorithmique qu en programmation sont des tests logiques ou plut t faisant appel la logique Le chapitre Les variables et op rateurs a d j bri vement abord ce point lorsqu il a t question des op rateurs bool ens Les op rateurs dits logiques ET OU et NON sont des repr sentations de la logique De quelle logique parle t on Fondamentalement la logique est la m me pour tout le monde bien que videmment l interpr tation des r sultats puisse varier d un individu l autre en statistique par exemple La logique est universelle Monsieur Spock s il avait exist n aurait pas dit mieux Mais jusqu peu dans l chelle de l humanit il n y avait aucun moyen de se l
203. ienne l l ment de t te de la liste sans l ment suivant Vous passez la proc dure le pointeur sur l enregistrement et le pointeur de t te Proc dure ajout_unique E pNouveau ES pTete pointeurs sur element D but pNouveau pSuiv NIL pTete pNouveau FinProc La seconde proc dure ajoute le nouvel l ment en t te de liste sachant que la liste contient d j au moins un l ment C est un cas tr s simple o le nouvel l ment re oit comme l ment suivant celui de t te Pour ce dernier rien ne change Proc dure ajout_d but E pNouveau ES pTete pointeurs sur element D but pNouveau pSuiv pTete pTete pNouveau FinProc Ajout en fin de liste C est encore un cas tr s simple Le rajout d un l ment en fin de liste n cessite seulement de conna tre l adresse du dernier l ment actuel Le pointeur pSuiv de ce dernier pointera sur le nouvel l ment et le pSuiv du nouvel l ment recevra NIL Si vous reprenez les proc dures de recherche et de parcours de la liste cha n e la fin de la liste pEncours vaut NIL et pPrec contient l adresse du dernier enregistrement La proc dure ajout_fin re oit deux param tres pNouveau et pPrec ENI Editions All rigths reserved 9 Proc dure ajout_fin ES pNouveau pPrec pointeurs sur element D but pPrec pSuiv pNouveau pNouveau pSuiv NIL FinProc Ajout en milieu de liste Au final aucun ajout n aura t bien compliqu puisque l e
204. ies du tableau Dans un tableau d une dizaine d l ments la moyenne des l ments de la premi re partie du tableau est plus basse que celle de la deuxi me partie d s le premier passage Au final le tri Shell est d une complexit O n mais se r v le tre plus rapide dans la majorit des cas C est l algorithme de tri le plus utilis Prenez un tableau de dix l ments Et un pas de 4 e tape 1 t 1 et t 5 sont compar s et ventuellement permut s e tape 2 t 2 et t 6 sont compar s et ventuellement permut s er t CNE e tape 3 t 3 et t 7 sont compar s et ventuellement permut s o b k B CON e tape 4 t 4 et t 8 sont compar s et ventuellement permut s se b b B CNE e tape 5 t 5 et t 9 sont compar s et ventuellement permut s CS Le pas ne doit pas tre calcul au hasard car c est de lui que d pend l efficacit de l algorithme La formule utilis e par l algorithme est g n ralement Utn 1 53Un t1 avec U 0 PROGRAMME TRISHELL VAR cpt n i j tmp entiers t tableaul 1 10 d entiers TantQue n lt cpt Faire n 3 n 1 FinTantQue ENI Editions All rigths reserved 7 TanQue n lt gt 0 Faire nen 3 Pour i de n cpt 1 Faire tmpet i j i TantQue j gt n 1 ET t j n gt tmp t j lt t j n j j n FinTantQue t j tmp FinPour FinTantQue FIN Soit en PHP lt html gt lt head gt lt meta gt lt title gt tri shell lt
205. igts par votre professeur d algorithmique pr cisez le bon type d s le d but et vitez les affectations douteuses Dans la d claration Vous avez le droit de donner une valeur initiale ou par d faut une variable lors de sa d claration Dans ce cas vous devez utiliser l op rateur d affectation lors de la d claration PROGRAMME DECLARE2 VAR a 10 entier b 3 5 c 8 2347 r els titre Mon titre cha ne vrai VRAl bool en DEBUT Afficher a FIN Avec une valeur par d faut la variable dispose d j d un contenu d s son initialisation et peut tre directement utilis e ENI Editions All rigths reserved b Affectation de variables Le principe est exactement le m me sauf que cette fois vous ne mettez pas de valeur droite mais une autre variable ce qui a pour effet d affecter la variable de gauche la valeur de la variable de droite PROGRAMME AFFECT3 VAR a b entiers DEBUT a 10 b a FIN L encore vous prendrez bien soin de ne pas m langer les torchons et les serviettes en n affectant pas des variables de types incompatibles L exemple suivant est videmment faux PROGRAMME AFFECT4 VAR a entier b r el DEBUT b 3 1415927 a b FIN L encore n oubliez pas une ventuelle conversion dans un vrai langage et de d clarer correctement vos variables dans le bon type L exemple PHP suivant ne devrait pas vous poser de probl mes de compr hension lt html gt lt head gt lt meta gt lt title
206. ilisation en cours e x d cr mente de 1 la variable x e x idem mais apr s l utilisation en cours PHP accepte ces op rateurs Cette criture peut surprendre Voici un exemple PROGRAMME UNAIRE VAR a entier DEBUT a l Ecrire a Ecrire a Ecrire a FIN e Le premier affichage indique 2 la variable a est incr ment e avant son utilisation e Le deuxi me indique 2 aussi la variable a est incr ment e apr s son utilisation e Le dernier indique 3 Les op rateurs et peuvent aussi tre utilis s comme op rateurs unaires plac s avant un scalaire ou une variable le signe donnera l oppos de cette valeur 1 est gal 1 3 Les op rateurs bool ens Les op rateurs ne permettent pas que de faire des calculs Dans une expression un op rateur peut aussi effectuer des valuations de bool ens Vous avez vu que pour l ordinateur tout ce qui est vrai est diff rent de 0 ce qui est faux valant 0 Comment alors faire si deux expressions sont l une vraie l autre fausse pour conna tre la valeur des deux conjugu es Il faut utiliser des op rateurs bool ens pour indiquer ce qui doit tre consid r comme vrai l un ou l autre les deux en m me temps etc e L op rateur ET indique que les deux expressions situ es avant et apr s doivent tre toutes les deux vraies pour que l ensemble le soit aussi e L op rateur OU indique que seule l une des deux expressions que ce soit celle situ e avant ou cel
207. imiteur e la conversion en minuscules ou majuscules e la suppression des espaces avant et apr s e etc Maintenant regroupez les propri t s de la cha ne et tous les traitements possibles dessus en un seul tout Vous obtenez un objet Un programme objet est constitu d un ensemble d objets qui communiquent entre eux par l mission et la r ception de messages pour r aliser le traitement final Cela para t impressionnant et compliqu comme cela mais c est en fait tr s simple Dans la ligne suivante Scpt tab count l objet appel tab un tableau PHP d clar comme arrayObject re oit l ordre associ sa fonction count compter le nombre d l ments de ce tableau Si vous n avez pas encore bien compris alors dites vous qu un v ritable objet en informatique est un peu comme un enregistrement il en reprend les m mes propri t s que sont les champs auquel on aurait ajout dedans des sous programmes charg s de manipuler ses champs Les sous programmes ne seraient plus part mais partie prenante de la structure qui serait alors non plus la d finition d un enregistrement mais d un objet 4 Classe objets Il est n cessaire de conna tre quelques mots de vocabulaire pour d finir un objet Un objet est d fini par e Les donn es sur lui m me ses propri t s son tat e Ce qu il fait les traitements qu il associe ses donn es ou les donn es re ues des autres objets Comme les structur
208. insSI FIN Cela marche exactement de la m me mani re mais il n y a plus qu un test et pas de r p tition C est plus court Tout de m me cet algorithme a plus de classe que le pr c dent Et pour pater un peu plus vos ventuels professeurs pourquoi ne pas remplacer le test par Si chaud ET NON pleuvoir Alors ENI Editions All rigths reserved Les structures it ratives 1 D finition Comme indiqu dans le premier chapitre la boucle est la quatri me grande structure de base de l algorithmique et donc de la programmation Pass ce chapitre tout le reste est une application ou une d rivation de ces quatre structures de base Les boucles sont des structures it ratives Une it ration ou structure it rative est une s quence d instructions destin e tre ex cut e plusieurs fois C est aussi l action d ex cuter cette instruction Vous entendrez parler parfois de structures r p titives c est la m me chose dite autrement Le but d une boucle est de r p ter un bloc d instructions plusieurs fois Selon le type de boucle ce bloc va tre r p t un nombre fixe de fois n fois ou selon un certain nombre de crit res un test de une ou plusieurs conditions que vous connaissez tr s bien maintenant La boucle est un l ment tr s simple au premier abord Les premiers exemples que vous rencontrerez seront bien souvent vidents Pourtant elle devient rapidement l une des b tes noires du programmeur en herbe cause
209. inutile de code et permet de clarifier le programme Une fois tous les sous programmes r alis s il est m me possible de les enregistrer dans des biblioth ques pour les r utiliser dans d autres programmes quels qu ils soient simplifiant ainsi fortement l criture du code et permettant aussi d aller beaucoup plus vite Un programme complet forme une application Une application est si vous avez correctement suivi compos e de plusieurs parties fonctionnelles e Le programme principal ou bloc principal qui correspond au bloc principal d instructions situ es sous le mot cl PROGRAMME et DEBUT C est ce programme qui est ex cut quand vous lancez l ex cutable qui r sulte de l impl mentation de votre algorithme en Java par exemple En Java le programme principal est ce qui est situ sous la ligne contenant le mot main qui signifie depuis l anglais principal e Des sous programmes charg s de divers r les qui peuvent aller du calcul d une valeur absolue celui d une puissance quelconque une conversion de date le formatage d une cha ne de caract res l affichage d un en t te quelconque bref tout ce que vous voudrez bien en faire Suivant les langages vous trouverez les expressions sous programmes mais aussi et surtout les mots fonctions et proc dures pour les d crire C est le programme principal qui se charge d appeler les sous programmes Ceux ci ne se lancent jamais d eux m mes Un sous programme ne se lance ja
210. ision dans des losanges et les fl ches repr sentent l ordre du d roulement du programme Si une valeur est pr sente c t de la fl che l action d pend du r sultat de la question pos e dans le losange Les d cisions et les fl ches peuvent d crire des boucles Dans le sch ma tant que l utilisateur n a pas saisi la bonne valeur la question lui est de nouveau pos e Cet algorithme est tr s simple l organigramme aussi Cependant voyez d j la taille de celui ci la place qu il prend par rapport ce qu il fait Imaginez maintenant un algorithme plus complexe qui doit par exemple d crire tous les cas de figure dans la gestion d une communication entre deux machines description d un protocole de communication le sch ma n cessitera une feuille d une grande dimension et sera difficile tudier b L algorithme sous forme de texte Prenez le m me nonc du lanc de d Celui ci pourrait tre crit ainsi en fran ais correct e 1 re tape lancer le d e 2 me tape saisir une valeur e 3 me tape si la valeur saisie est diff rente de la valeur du d retourner la troisi me tape sinon continuer e 4 me tape afficher bravo Vu ainsi c est tr s simple De cette mani re il est vident que tout le monde m me un non informaticien comprend ce que l algorithme est cens faire Cependant si les algorithmes complexes devaient tre crits ainsi ce serait encore une fois bien trop long e
211. ision soit fine plus on descend dans les puissances de 2 Vous voyez cependant qu un moment il faut s arr ter et qu il faut se contenter d une pr cision de compromis Ce syst me est aussi gourmand en place Il existe une norme pour repr senter les nombres r els en binaire elle a t d finie par l IFEE pour des pr cisions dites simples et doubles En pr cision simple le nombre r el est cod sur 32 bits En pr cision double il l est sur 64 bits Il existe aussi une pr cision sur 80 bits Le principe est le m me dans tous les cas Il est bas sur la repr sentation du signe S du nombre d une mantisse M et d un exposant E Nombre r el simple pr cision 32 bits 31530 2322 0 D 4 gt 55 Sy D 2 jr L 0 0 So SQ n Repr sentation binaire 32 bits d un r el simple pr cision Dans un nombre r el en simple pr cision sur 32 bits un bit est r serv pour le signe 8 pour l exposant et 23 pour la ENI Editions All rigths reserved mantisse dans cet ordre le bit de poids fort tant le signe L exposant doit subir un d calage de 2 1 1 n tant le nombre de bits utilis s Le d calage est donc de 127 Enfin il ne faut pas conserver le 1 de la mantisse il est implicite Signe S 0 10 soit 10000111 3 sur 23 bits 01101100011000111101011 Exposant E 7 127 134 Mantisse 182 195 10 Au final vous obtenez le nombre cod en 32 bits suivant E A Ee E E Pour retrouver depuis ce nombr
212. itres Cette zone commence par le mot VAR e Le programme lui m me c est dire les divers traitements Les instructions du programme sont encadr es par les mots DEBUT et FIN Il vous est conseill pour plus de clart et de lisibilit d indenter les diverses lignes de les d caler les unes par rapport aux autres l aide des touches de tabulation Le programme peut tre de n importe quelle longueur une ligne ou 10000 lignes ceci n a pas d importance e Les commentaires c est un texte libre qui peut tre tendu sur plusieurs lignes et encadr par les s quences de caract res et Si votre commentaire tient sur une seule ligne vous pouvez uniquement la commencer par les caract res e Une derni re partie ou plut t premi re car lorsqu elle est pr sente elle se situe avant toutes les autres peut tre constitu e des sous programmes semblants de programmes complets appel s par le programme principal Ces sous programmes appel s proc dures ou fonctions font l objet d un chapitre complet 5 La complexit L exemple du lanc de d est un algorithme tr s simple court concis et rapide Ce n est pas le cas de tous les algorithmes Certains sont complexes et le traitement r sultant peut n cessiter beaucoup de temps et de ressources de la machine C est ce qu on appelle le co t de l algorithme et il est calculable Si un algorithme est gourmand son co t sera plus lev Il existe certains c
213. jusqu 8192 Au del cela devient tr s tr s lourd Un nom logique de fichier est donc un enregistrement de type structur c Les modes d ouverture En ouvrant un fichier il faut indiquer comment vous souhaitez y acc der Souhaitez vous seulement lire son contenu y crire o vous voulez ou ajouter des lignes la fin e En lecture vous avez un acc s en lecture seule au fichier Vous ne pouvez pas y crire Vous pouvez vous y d placer retourner au d but lire tout ce que vous voulez mais c est tout e En criture parfois nomm lecture criture vous pouvez modifier n importe quelle partie du fichier crire o vous voulez craser vos anciennes donn es qui seront donc d finitivement perdues Attention la casse si vos enregistrements sont de taille variable dans un fichier texte Vous pouvez aussi lire le contenu du fichier e En ajout append vous ne pouvez pas lire le fichier mais uniquement ajouter des donn es apr s la fin de celui ci comme ajouter un enregistrement ou quelques octets tout au bout Vous ne pouvez pas modifier les donn es qui y sont d j crites Le probl me principal que vous rencontrerez quand vous utiliserez des enregistrements dans un fichier c est qu il n y a aucun moyen d effacer un enregistrement donc de r duire la taille de celui ci Vous devrez donc ruser utiliser un indicateur particulier pour indiquer un enregistrement supprim et pr voir des traitements de r organisa
214. l art ref art001 01 bart01l art fab ref FrFab1234 Pour i de 1 12 Faire Afficher Ventes du mois i 7 Saisir bart01 venteli total total bart01 ventelil FinPour Afficher Total annuel total Fin 4 Les tableaux d enregistrements a Les tables Un article repr sente un enregistrement Jusqu pr sent pour repr senter plusieurs articles vous deviez cr er plusieurs enregistrements comme dans l exemple de article1 article2 et article3 L id al serait de pouvoir traiter n articles sans avoir d clarer n enregistrements ind pendants Un enregistrement tant la r p tition est le meilleur ami de la m moire d clar comme une variable vous avez aussi le droit de cr er des tableaux d enregistrements Un tableau d enregistrements se d clare comme n importe quel autre tableau Il est parfois appel table Dans cette table les colonnes sont les champs et les lignes les enregistrements Soit la structure tarticle simplifi e d origine Structure tarticle ref cha ne libelle chai ine prix r el FinStruct Vous voulez cr er une table de dix enregistrements Var articles tableaul1 10 de tarticles Pour saisir les l ments d un enregistrement de cette table vous utilisez les indices articles 1 ref art001 01 Pour acc der aux dix enregistrements le mieux est d utiliser une boucle D but Pour i de 1 10 Faire Afficher Saisir ref article i Saisir articles i l ref FinPour Fin ENI E
215. la premi re boucle comme infinie et en effectuant dedans toutes les saisies et la condition de sortie Variable note en Num rique D but Tant que VRAI Faire Ecrire Entrez une note Lire note ENI Editions All rigths reserved Si note lt 1 ou note gt 20 Alors Tant que note lt 1 ou note gt 20 Faire Ecrire Erreur 0 gt 20 1 sortie Lire note FinTantQue Finsi Si note 1 Alors break Finsi FinTantQue Fin Ce qui donne en PHP via une console lt php while true echo Note lt l sortie 7 note fgets STDIN if note gt 20 while note lt 1 note gt 20 echo Erreur Note l sortie note fgets STDIN if note 1 break echo note 2 gt Il est encore possible d aller plus loin en PHP avec l instruction continue En effet plut t que de cr er une nouvelle boucle en cas d erreur de saisie pourquoi ne pas relancer celle ci au d but Le programme devient donc lt php while true echo Note lt l sortie note fgets STDIN if note gt 20 echo Erreur nouvelle saisie n continue if note 1 break echo note gt Comme vous pouvez le constater cet algorithme est un peu plus court que l original avec notamment une saisie en moins une expression bool enne en moins dans la condition de la premi re boucle un sinon en moins Cependant fondamentalement cet algorithme est moins propre Comme indiqu pr c demment l
216. la valeur 20 est pr sente dans le tableau ENI Editions All rigths reserved e tape 1 Calculer l indice situ au milieu du tableau L indice de d but est 1 l indice de fin est 10 le milieu vaut d but fin 2 Comme cette valeur n est pas forc ment enti re on r cup re la division enti re d but fin DIV 2 Ici 5 HASA w peek bebe k b b e e tape 2 Comparer la valeur t 5 avec 20 tant inf rieure cela veut dire que la valeur 20 est forc ment au del de l indice 5 On positionne D but 6 et on recalcule d but fin DIV 2 Ici 8 e tape 3 Comparer la valeur t 8 avec 20 tant inf rieure cela veut dire que la valeur 20 est au del de l indice 8 On positionne D but 9 et on recalcule On obtient 9 e tape 4 Comparer t 9 avec 20 Les valeurs sont identiques la recherche est termin e La recherche doit continuer tant que D but est inf rieur ou gal Fin et que l l ment recherch n a pas t trouv PROGRAMME DICHOTOMIE VAR t tableaul1 10 d entiers d m f rech entiers DEBUT rech 18 det f 10 R p ter m d f DIV 2 Si rech gt t m Alors d m 1 Sinon fem 1 FinSi TantQue d lt f ET rech lt gt t m Si rech t m Alors Afficher Trouv Sinon Afficher Absent FinSi FIN Le code correspondant en PHP est le suivant lt html gt lt head gt lt meta gt lt title gt Recherche dichotomique lt title gt lt head gt lt body gt lt php
217. le lt html gt lt head gt lt meta gt lt title gt fonctions internes lt title gt lt head gt lt body gt lt php Stxtl Bonjour les amis LE Stxtl trim Stxtl Svaleur strlen txtl echo txt1 de longueur Svaleur lt br gt Stxt2 substr txt1 3 5 echo txt2 lt br gt gt lt body gt lt html gt 8 Dernier cas les tableaux ENI Editions All rigths reserved 16 Une fonction peut retourner un tableau seulement si la variable qui la re oit est elle m me un tableau de m me dimension et de m me nombre d indices De m me il est possible de passer un tableau en param tre d une fonction Dans ce cas vous ne connaissez pas forc ment par avance le nombre d l ments du tableau aussi vous pouvez ne rien pr ciser entre les crochets Cependant si le langage d impl mentation ne propose pas d instructions ou de fonctions pr d finies pour trouver la taille d un tableau vous devriez passer celle ci en param tre Quand vous passez un tableau en param tre d un sous programme mettez uniquement son nom sans utiliser les crochets De nombreux exemples sont possibles Parmi eux pourquoi ne pas trier un tableau Reprenez l un des algorithmes de tri du chapitre pr c dent comme le tri par insertion et adaptez le pour le transformer en fonction Fonction tri _tableau t tableau d entiers nb entier tableau d entiers VAR i mem entiers DEBUT Pour i de 1 nbelem faire m
218. le diteur de texte mais il vaut mieux pr f rer un diteur plus volu supportant la coloration syntaxique et quelques fonctions volu es Sous Windows les diteurs notepad ou HAPEdit 3 sont parfaits pour d velopper en PHP Sous Linux kwrite gedit bluefish ou quanta sont parfaits Pour les tests un simple navigateur web ou la ligne de commande suffisent f Un premier programme PHP Le premier programme PHP que vous allez taper compiler et lancer est le fameux Hello World dont l algorithme ne m rite videmment pas d tre expliqu car le programme se contente d un simple affichage Le code PHP r sultant est le suivant lt php echo Hello world gt a Tapez ce programme et placez le dans un fichier appel HelloWorld php a Ouvrez une fen tre MS DOS cmd sous Windows ou une console ou terminal shell sous Unix MacOS et tapez l instruction suivante l o votre programme est enregistr Le signe gt indique l invite de commande ou prompt de MS DOS ou du shell ne le tapez pas gt php HelloWorld php Hello world Bravo vous venez de faire fonctionner votre premier programme PHP La syntaxe du langage PHP de ce premier programme est tr s simple Une page php porte l extension php Une page PHP peut tre enti rement programm e en PHP ou m lang e avec du code HTML PHP est un langage Embedded HTML c est dire qu il appara t n importe quel endroit de la page HTML Pour cela on le place
219. le 1 libelle article l prix ailes 2 Avec un enregistrement de ce type il existe des ressemblances videntes avec l ventuelle structure d enregistrements en base de donn es ou dans un fichier Pour peu que le type structur de l enregistrement reprenne le m me sch ma les traitements s en trouvent grandement simplifi s Cependant particuli rement pour la ressemblance avec un contenu de base de donn es relationnelle l analogie n est pas compl te Un enregistrement ne contient pas d identifiant ou cl uniques et rien n emp che que deux enregistrements de m me type contiennent les m mes donn es Ce serait vous au sein de votre programme de g rer ces cas de figure De m me le champ d application des enregistrements est beaucoup plus vaste qu il n y para t Certains langages les utilisent pour des choses totalement diff rentes qu une description de donn es de gestion Ainsi un langage comme le C dispose de types structur s pour g rer les fichiers ouverture fermeture position type d acc s etc mais aussi leur nom leur r f rence sur le disque leurs propri taires leurs droits D autres types structur s sont utiles pour la gestion des dates et heures pour repr senter une connexion r seau 3 Utiliser les enregistrements Les enregistrements sont compos s de plusieurs l ments appel s champs Quand vous manipulez un enregistrement vous le faites au travers de ses champs e Il n est pas possible d a
220. le programmeur est enti rement d barrass de toute la gestion de ces adresses puisque la machine virtuelle s occupe de tout C est une sorte de C d barrass de toute sa complexit Le d veloppement en PHP est donc tr s simplifi en se concentrant sur les fonctionnalit s b Les r f rences En PHP toute variable peut tre r f renc e et en r f rencer une autre L op rateur amp devant un nom de variable permet de r cup rer sa r f rence Si vous tentez de l afficher vous n obtiendrez pas d adresse m moire mais son nom de r f rence tabli par l interpr teur PHP PHP maintient une table des ressources variables par exemple utilis es dans le programme Chaque ressource est identifi e par une valeur une entr e C est cette valeur qui r f rence la variable Dans l exemple suivant copie re oit la r f rence du tableau t Les deux variables r f rencent donc la m me chose le tableau On acc de celui ci par l une ou l autre variable puisqu elles r f rencent le m me tableau De m me la fonction tableau re oit comme param tre la r f rence de la variable pass e en param tre La modification est directement effectu e sur le tableau pass en param tre En PHP toutes les valeurs sont pass es en copie SAUF pour les objets qui le sont toujours par r f rence et ceci depuis PHP5 lt html gt lt head gt lt meta gt lt title gt R f rences explicites lt title gt lt head gt lt body gt l
221. le situ e apr s doit tre vraie pour que l expression compl te soit vraie aussi e Le NON est la n gation Si l expression tait vraie elle devient fausse et vice versa Les op rateurs bool ens sont r gis par la logique bool enne du nom de l inventeur non pas de la logique elle m me mais des travaux de George Boole qui au XIX me si cle a restructur toute la logique en un syst me formel que l on peut interpr ter avec des mots des phrases compr hensibles Prenez les deux expressions II fait beau et le soleil brille La premi re expression il fait beau est vraie s il fait vraiment beau La seconde expression le soleil brille est vraie si le soleil brille vraiment Si les deux expressions sont vraies alors l expression globale est vraie Par contre Il a neig et il fait beau S il a neig cette premi re expression est vraie Cependant s il ne fait pas beau la seconde expression est fausse L ensemble est donc faux dans le cas contraire chaussez vos skis Les trois op rateurs logiques ET OU et NON peuvent tre simplement compris l aide de petits tableaux appel s parfois tables de v rit Expi et Exp2 sont des expressions bool ennes vraies ou fausses Par exemple l expression a 1 est vraie si a vaut vraiment 1 ENI Editions All rigths reserved Table de v rit ET Ce tableau est comprendre ainsi si Expi est vraie et Exp2 est vraie alors l ensemble est vrai On dit plus g n ralem
222. leau d j correctement dimensionn tout comme il est impossible de d passer le nombre d l ments d clar s Pour obtenir un tableau plus grand il faut alors en cr er un autre ou utiliser le m canisme des pointeurs tel qu il sera pr sent au chapitre Notions avanc es 2 PHP et les tableaux a Tableaux classiques n dimensions PHP sait g rer des tableaux de 1 n dimensions Le principe est presque le m me que pour les variables et vous n tes donc pas oblig de d clarer un tableau si un de ses l ments est utilis le tableau se met exister Les indices ne d marrent pas 1 mais 0 il faudra donc adapter le programme en cons quence lors du passage de l algorithme en PHP Vous devez utiliser les crochets lors de l affectation des valeurs et lors de la r cup ration de celles ci Ceux ci se placent soit apr s le nom du tableau soit avant accol s au type du tableau Vous pouvez aussi affecter des valeurs un tableau avec une fonction chapitre Les sous programmes appel e array Une dimension Vous pouvez d clarer un tableau avec des valeurs pr d finies comme ceci St array 2 7 9 10 11 14 17 18 20 22 ou encore affecter des index diff rents St array 1 gt 2 2 gt 7 4 gt 9 6 gt 10 8 gt toto ref gt ref01 ou alors donner une valeur chaque l ment ind pendamment les uns des autres Vous acc dez au contenu de chaque l ment exactement comme pr vu savoir en mett
223. les r f rences l autre sur les objets ouvrent les portes de la programmation dans des langages volu s et puissants comme le C le C JAVA et PHP La plupart des algorithmes de ce livre sont traduits en PHP et les sources directement utilisables sont disponibles en t l chargement sur cette page S bastien ROHAUT a d but comme Ing nieur de d veloppement en C Aujourd hui Ing nieur Syst me il intervient sur des missions r guli res pour de grands comptes et continue d enseigner le d veloppement des classes d ing nieur et masters MTIC Ce livre num rique a t con u et est diffus dans le respect des droits d auteur Toutes les marques cit es ont t d pos es par leur diteur respectif La loi du 11 Mars 1957 n autorisant aux termes des alin as 2 et 3 de l article 41 d une part que les copies ou reproductions strictement r serv es l usage priv du copiste et non destin es une utilisation collective et d autre part que les analyses et les courtes citations dans un but d exemple et d illustration toute repr sentation ou reproduction int grale ou partielle faite sans le consentement de l auteur ou de ses ayants droit ou ayant cause est illicite alin a 1er de l article 40 Cette repr sentation ou reproduction par quelque proc d que ce soit constituerait donc une contrefa on sanctionn e par les articles 425 et suivants du Code P nal Copyright Editions ENI ENI Editions
224. lle l arbre Il vous faut trouver le chemin jusqu au n ud p re La fonction rech2 peut tre modifi e en ce sens si l l ment ajouter n est pas trouv alors le dernier l ment qui vaut alors NIL doit tre remplac par la nouvelle feuille et tre raccord la bonne branche au p re Il faut donc conserver l adresse du p re La fonction inserer prend trois arguments la valeur ajouter l adresse de l arbre et l adresse du n ud auquel ajouter la valeur droite ou gauche selon le cas Fonction inserer v entier pArbre pPrec pointeurs sur noeud Var pNouveau pointeur sur noeud D but Si pArbre NIL Alors pNouveau nouveau noeud pNouveau valeur v pNouveau pGauche NIL pNouveau pDroite NIL Si pPrec lt gt NIL Alors Si v gt pPrec Valeur Alors pPrec pDroite pNouveau Sinon pPrec pGauche pNouveau FinsSI Finsi Sinon Si pArbre valeur lt gt v Alors Si v gt pArbre valeur Alors ins rer v pArbre pArbre pDroite Sinon ins rer v pArbre pArbre pGauche Finsi Finsi Finsi FinFonc d Suppression d un n ud Pour le dernier point de ce chapitre c est vous qui allez crire l algorithme de la fonction n cessaire la suppression du n ud Il y a trois cas traiter e La suppression d un n ud sans fils une feuille c est le cas le plus simple Le pointeur correspondant droite ou gauche du p re doit tre plac NIL ENI Editions All rigths reserved e La suppression d un n ud ay
225. lle est un programme g n ralement un interpr teur qui permet d isoler l application qu il doit faire tourner du mat riel et m me du syst me d exploitation Le programme n a th oriquement aucun acc s aux sp cificit s du mat riel l ensemble de ses besoins lui tant fourni par la machine virtuelle Ainsi tout programme con u pour cette machine virtuelle pourra fonctionner sur n importe quel ordinateur du moment que ladite machine virtuelle existe pour cet ordinateur C est en quelque sorte une couche d abstraction ultime G n ralement le programme fonctionnant depuis la machine virtuelle a d j subi une premi re phase de compilation pour le transformer non pas en langage machine propre l ordinateur mais dans un langage machine virtuelle pour ainsi dire que l on nomme bytecode Ce bytecode pourra tre interpr t par la machine virtuelle ou plut t et ceci de plus en plus r guli rement compil la vol e juste au moment de son utilisation technologie JIT Just in Time Ainsi dans certaines circonstances le programme fonctionne presque aussi vite qu un programme compil pour une machine cible Un exemple de langage utilisant une machine virtuelle est Java ENI Editions All rigths reserved Code Source java Pr compilation javac Bytecode class identique pour tous Machine Virtuelle pour Linux Machine Virtuelle pour MacOS Machine Virtuelle pour Windows G n ration e
226. loie plus volontiers la notion d expression et d valuation de cette expression Une expression peut tre d crite comme tant tout ce qui peut fournir une valeur que l ordinateur peut d terminer stocker valuer Par exemple l affirmation a gt b selon laquelle a est sup rieur b Si a vaut 3 et b vaut 2 l affirmation est vraie Si maintenant a vaut 1 et b vaut 2 l affirmation est fausse Dans les deux cas a gt b est une expression qui vaut soit vrai soit faux C est le cas le plus simple mais aussi le plus courant et le plus pratique comme vous le verrez lors des tests et des conditions Comment l ordinateur d termine t il ce qui est vrai et faux C est le r le dans l architecture de Von Neumann de l UAL Sous quelle forme l ordinateur se repr sente t il ce qui est vrai ou faux Sous forme num rique comme toujours Tout ce qui retourne un r sultat diff rent de z ro 0 est consid r comme tant vrai donc si le r sultat vaut z ro 0 alors il sera consid r comme faux Avant de consid rer cette d finition comme exacte renseignez vous tout de m me car certains langages comme l interpr teur de commande Unix font l inverse Cependant dans des langages comme Java ou le C 1 est vrai 0 est faux Pour repr senter les valeurs vrai et faux il suffit de deux chiffres O et 1 Combien faut il de place pour stocker ces deux valeurs Un seul bit En pratique les langages g rent les bool ens de plusieurs mani res Ce
227. mais tout seul il doit tre appel depuis le programme principal Cependant un sous programme peut parfaitement faire appel un autre sous programme Par exemple un sous programme charg de calculer une racine carr e peut appeler le sous programme charg des valeurs absolues 2 D claration et d finition a Dans un algorithme Avant de pouvoir utiliser un sous programme il faut le d finir ou le d clarer c est dire indiquer au programme principal qu il existe son nom et son contenu bloc d instructions En algorithmique les sous programmes sont d clar s et enti rement crits au tout d but avant le mot cl PROGRAMME C est g n ralement le cas dans les langages de programmation car le programme principal ne peut pas utiliser un sous programme s il ne sait pas qu il existe lt SOUS PROGRAMME 1 gt lt SOUS PROGRAMME 1 gt PROGRAMME XYZ ENI Editions All rigths reserved VAR DEBUT FIN Si dans votre algorithme vos sous programmes sont crits en dessous du programme principal il est fort probable quand vous passerez la programmation que vous obteniez des erreurs Un langage comme le C autorise cependant la d claration du nom du sous programme en haut du programme et sa programmation en dessous Pour le PHP peu importe l endroit o le sous programme est crit Quant Java la probl matique est diff rente du fait de sa conception objet dernier chapitre Le sous programme a une structure
228. mais uniquement du c t du navigateur et des donn es locales Pour des traitements plus lourds n cessitant l acc s une base de donn es un formatage de tableau en fonction de r sultats une recherche pouss e du graphisme il faut passer par des pages dynamiques et par un langage qui sera ex cut du c t du serveur ASP sur les serveurs Microsoft IIS Perl PHP PHP est un langage Server Side ou c t serveur Lors du chargement d une page PHP c est le serveur qui va lire interpr ter et ex cuter le code Puis il renvoie le r sultat au navigateur sous la forme de code HTML Ainsi le navigateur et l utilisateur ne voient jamais le v ritable code PHP ex cut De plus le r sultat tant une page web classique en HTML pas besoin d installer sur le client des composants sp cifiques java Il n y a donc pas de notion de vitesse d ex cution du c t du client mais celle du serveur est pr pond rante e Installer le n cessaire PHP ne sert pas seulement faire des pages dynamiques C est un langage interpr t qui au m me titre que Perl ENI Editions All rigths reserved Python ou TCL est capable de lancer des scripts interactifs ou non On peut m me utiliser PHP pour cr er des interfaces graphiques extension GTK Le minimum n cessaire et vital pour apprendre PHP est donc l interpr teur PHP lui m me sur un environnement support Unix Windows Mac Si on parle de LAMP on voit bien la r f rence
229. mation travers le point ou la fl che si l enregistrement est une r f rence La structure code donc toutes les propri t s d un objet r el ou abstrait Cependant tous les traitements associ s sont dans des sous programmes part Regardez ces lignes issues de l exemple en PHP sur les structures class tarticle public ref public libelle public prix public fab Sarticle new tarticle article gt ref Art001 O1 La variable article est en principe une structure Pourtant ce n est pas le cas C est une variable objet une instance Vous acc dez une propri t une donn e de l objet avec la fl che gt Vous acc dez non pas des enregistrements mais des attributs associ s la variable Voici une d finition de l objet Dans les langages objets les donn es et les traitements qui manipulent ces donn es sont regroup s au sein d une m me entit appel e objet En PHP les objets sont d crits avec le mot cl class En algorithmique ils le sont avec le mot cl classe Quelles sont les propri t s d une cha ne de caract res e La cha ne elle m me compos e d une suite de caract res Quels sont les traitements applicables une cha ne e Le calcul de sa longueur e le d coupage en sous cha nes e la concat nation avec une autre cha ne ENI Editions All rigths reserved e la recherche d une autre cha ne dedans e l clatement de la cha ne selon un d l
230. mbre d it rations ne peut tre pr vu Vous ne savez plus quand vous allez sortir de la boucle ni m me la nouvelle valeur du compteur chaque it ration Selon les langages vous aurez au mieux un fonctionnement peu pr s conforme ce que vous attendiez au pire du grand n importe quoi Or en informatique sauf travailler pour un diteur peu scrupuleux sur la qualit un peu pr s est inacceptable Ne modifiez jamais un compteur de boucle Pour au sein de celle ci Si cela s av re vraiment n cessaire modifiez votre boucle pour utiliser une structure Tant Que ou R p ter 5 Quelques exemples a De nouveau trois boucles Promis devenir un grand classique puisque c est la troisi me fois que vous le voyez sous trois formes diff rentes donc voici l exemple des trois boucles preuve s il en est que le Pour Fin Pour est bien pratique mais totalement optionnel L int r t est videmment ici de produire un code plus succinct et encore plus lisible Variables a b c nbl nb2 en Num rique D but Pour a de 1 10 Faire Pour b de 1 10 Faire Pour c de 1 10 Faire nbl a 100 b 10 c nb2 a3 b3 c3 Si nbl nb2 Alors Ecrire nb1l a b c FinsSI Fin Pour Fin Pour Fin Pour Fin Ce qui en PHP donne lt html gt lt head gt lt meta gt lt title gt Trois boucles lt title gt lt head gt lt body gt lt php for x 1 x lt 10 x for y 1 y lt 10 y for z 1 z lt 10 Sz
231. me des objets tout ce qui est d clar avec new En PHP il est possible de convertir un tableau en objet Ainsi il sera automatiquement affect et pass en param tre comme r f rence sans utiliser de amp pr alable lt html gt lt head gt lt meta gt lt title gt R f rence avec ArrayObject lt title gt lt head gt lt body gt lt php function tableau tab tab 1 12345 t array 2 7 9 10 11 14 17 18 20 22 o_t new ArrayObject t copie o_t echo o_t 2 lt br gt n Scopiel 2 5 echo fo_t 2 lt br gt n tableau o_t echo o_t 1 lt br gt n 2 gt lt body gt lt html gt Les r f rences fonctionnent aussi sur des types quelconques lt html gt lt head gt lt meta gt lt title gt R f rence sur types quelconques lt title gt lt head gt lt body gt lt php function modif_int var Svar 10 return var function modif_int2 amp var Svar 20 aucun effet modif_int v echo S Sv lt br gt n par retour de valeur Sv modif_int v ENI Editions All rigths reserved cho NE veb e gt ns par reference modif_int2 v echo S Sv lt br gt n gt lt body gt lt html gt c R f rences sur structures Dans la suite vous allez avoir manipuler des pointeurs sur des structures C est extr mement simple car dans PHP toutes les soi disant structures sont en fait des objets jusq
232. me en Java d finit des m thodes de base qui sont red finies dans les classes d riv es en fonction des nouvelles propri t s de celle ci Un exemple classique est un jeu d checs et ses pi ces Chaque pi ce du jeu a un nombre plus ou moins limit de mouvements autoris s Une classe pi ce va d finir une m thode mouvement Les classes d riv es pion fou tour cavalier roi et reine vont contenir aussi une m thode mouvement qui d terminera leurs mouvements propres Classe Pi ce m thodes publiques Proc dure mouvement D but Afficher Mouvement de Pi ce FinProc FinClasse Classe Tour h rite de Pi ce m thodes publiques Proc dure mouvement D but Afficher Mouvement de Tour FinProc FinClasse Quand vous allez d clarer un objet de type tour et que vous allez acc der la m thode mouvement c est la m thode mouvement de Pi ce qui va tre appel e et c est donc le message correspondant Mouvement de Tour qui s affiche Programme obj5 var matourl Tour D but Appel de mouvement de l objet matourl matourl mouvement Fin ENI Editions All rigths reserved Vous pouvez explicitement faire appel la m thode de la superclasse Pi ce dont Tour d rive l aide du mot cl super pour superclasse au sein de la ou des m thodes concern es Dans l exemple suivant la m thode mouvement de la classe Tour a t modifi e pour appeler la m thode mouvement de Pi ce l
233. mme suppr Var txt cha ne D but txt abcdefgh txt suppri itxt 4 len txt 3 Affiche txt reste abc Fin Fonctions math matiques Tous les langages proposent souvent un grand nombre de fonctions math matiques Dommage pour vous la plupart des exemples des derniers chapitres ont des quivalents sous forme de fonctions C est le cas des racines carr es des puissances des factorielles des fonctions trigonom triques comme les sinus cosinus et tangente etc e racine x donne la racine carr e de x e puissance x y donne x la puissance y e sin x sinus de x e cos x cosinus de x e tan x tangente de x Certaines conventions algorithmiques ne reconnaissant pas les ou MOD comme op rateurs modulos alors que les langages eux si vous pouvez trouver parfois la fonction mod x y qui quivaut x MOD y et la fonction entier x y qui quivaut x DIV y Une fonction tr s sympathique est la fonction al atoire Elle d termine un nombre al atoire Utilis e sans param tre elle trouve un r el entre 0 et 1 Utilis e avec un param tre entier elle trouve une valeur entre 0 et n Id al pour un lancer de d Programme d Var d saisie entiers D but d al atoire 5 1 entre 1 et 6 R p ter Afficher Quelle est la valeur du d Saisir saisie Si d lt gt saisie Alors ENI Editions All rigths reserved Afficher Rat essayez encore Finsi Jusqu d saisie Afficher
234. montant 50 FinTantQue Tant Que montant gt 20 Faire nb20 nb20 1 montante montant 20 FinTantQue Tant Que montant gt 0 02 Faire nb002 nb002 1 montantemontant 0 02 FinTantQue Tant Que montant gt 0 01 Faire nb001 nb001 1 montante montant 0 01 FinTantQue Si nb500 gt 0 Alors Ecrire nb500 billets de 500 euros FinsSI Si nb200 gt 0 Alors Ecrire nb200 billets de 200 euros FinsSI Si nb002 gt 0 Alors Ecrire nb002 pi ces de 2 centimes FinsSI Si nb001 gt 0 Alors Ecrire nb001 pi ces de 1 centime FinsSI Fin Cet algorithme est d sesp rant Il est parfait en terme de fonctionnement et de logique mais il est pouvantablement long proportionnel au nombre de coupures disponibles dans chaque pays Tellement long d ailleurs que certaines parties totalement videntes ont t remplac es par des Est il possible de faire plus court Il est videmment possible de faire plus court Vous verrez comment faire au prochain chapitre avec les tableaux puis dans le suivant encore avec les fonctions g Trois boucles Un dernier exemple de boucle Tant Que va vous montrer une int gration avec trois boucles Le but de cet anodin algorithme est de trouver pour quelles valeurs de A Bet C ABC A3 B3 C3 A repr sentant les centaines B les dizaines et C les unit s La recherche sera limit e pour chaque valeur enti re comprise entre 1 et 10 bien entendu vous pouvez augmenter l intervalle mais celui ci n a pas t choisi au
235. n ayez pas besoin tout de suite de cr er une r f rence sur un enregistrement mais que vous vouliez viter d y acc der par inadvertance Dans ce cas au lieu de cr er une r f rence avec new vous pouvez lui affecter une valeur appel e null Cette valeur signifie que la variable a t d clar e mais n a pas d objet instanci terme expliqu dans le chapitre suivant vous ne lui avez pas encore affect d enregistrement Ainsi vous pouvez d j tester la variable elle m me avant de tester les champs qu elle contient Dans l exemple suivant modifi tarticle contient toujours une variable de type tfabricant Mais elle ne recevra un enregistrement que plus tard dans le programme En attendant le champ fab re oit une valeur nulle signifiant que l article n a pas encore de fabricant r f renc Html gt lt head gt lt meta gt lt title gt R f rence structures 2 lt title gt lt head gt lt body gt lt php class tfabricant public ref class tarticle public ref public fab null Sarticle new tarticle ENI Editions All rigths reserved ff 12 article gt ref ArtO001 O1 if article gt fab null echo article gt fab gt ref lt br gt n else echo Pas de fabricant pour cet article lt br gt n 2 gt lt body gt lt html gt ENI Editions All rigths reserved Les listes cha n es 1 Listes cha n es simples a Principe Dans la vie quotidienn
236. n enregistrement dans le fichier qui sera compos de tous les champs du type structur Comme la taille exacte est pr cis e tout le texte est d j correctement format Du travail en moins e Lire lit un enregistrement complet soit tous les champs du type structur d un coup Apr s la lecture chaque champ contient la bonne valeur Dans les deux cas le type structur doit correspondre exactement au contenu du fichier et r ciproquement sinon gare aux mauvaises surprises L algorithme suivant crit un enregistrement structur dans un fichier puis relit ce m me fichier et y r cup re l enregistrement dans une autre variable de m me type Programme FicEnreg Var maligne recup enrpwd fic fichier s quentiel D but maligne login toto pwd x uid 1001 gid 415 Ecriture ENI Editions All rigths reserved Ouvrir passwd dans fic en Ajout Ecrire fic maligne Fermer fic Relecture Ouvrir passwd dans fic en Lecture Lire fic recup Fermer fic On Obtient la m me chose Afficher recup login Afficher recup uid Fin Dans le m me ordre d id e vous pouvez parfaitement utiliser un tableau d enregistrements pour lire tout le fichier et placer tous les enregistrements en m moire Programme litout Var lignes tableaul 1 50 de enrpwd fic fichier s quentiel i sentier D but i l Ouvrir passwd dans fic en Lecture Tant que NON EOF fic Faire Lire fic lignes i isiti FinTant
237. n peu tordues g n r es par l h ritage multiple si deux m thodes de m me nom sont d finies dans les deux superclasses et pas dans la classe d riv e quelle m thode doit tre appel e si son nom est appel dans celle ci Les langages proposent des astuces pour g rer ce genre de cas mais cela devient tr s complexe L h ritage multiple a t impl ment dans le langage C mais pas en Java ou PHP tout au moins pas directement une classe ne d rive que d une seule classe Avant de vous lancer dans de l h ritage multiple tentez de voir s il est possible de transformer la hi rarchie en h ritage simple d utiliser des classes instanciant comme attributs d autres classes ou d utiliser les interfaces Il n y a quasiment jamais d obligation utiliser l h ritage multiple 10 Le polymorphisme a Principe Quand vous h ritez d une classe vous pouvez depuis un objet de la nouvelle classe acc der directement aux m thodes des superclasses de fait elles font toutes partie de la classe d riv e Pourtant il est probable que si vous avez d riv de la superclasse c est que vous avez trouv un avantage ajouter des nouveaux attributs et des nouvelles m thodes Certaines de ces nouvelles m thodes remplacent peut tre les m thodes de la superclasse ou y font appel Le polymorphisme des m thodes est un autre concept essentiel de la programmation objet Polymorphisme signifie qu une m me chose peut prendre plusieurs formes
238. nateurs programmables Alan Turing avait d fini en 1936 le 28 mai exactement ce qu on appelle la Machine de Turing Cette machine abstraite qui n existe pas r ellement est en fait une m thode de mod lisation du fonctionnement d un ordinateur ou plut t l origine d un calculateur m canique Comment faire pour depuis un postulat de base arriver un r sultat donn En respectant des proc dures donn es C est l un des principes de l algorithmique Une machine de Turing n tant pas une vraie machine au sens mat riel il suffit pour s en servir soit de se servir de sa t te r flexion et m moire soit d un crayon qui fera office de t te de lecture d une longue bande de papier d compos e en cases qu on appelle ruban et d une table de symboles et de proc dures li e l tat de la case respecter quand on tombe sur une case contenant un symbole donn On se place sur la premi re case on v rifie son symbole et son tat associ s on ex cute la proc dure associ e changement de valeur symbole avancer reculer et on continue d rouler ce programme jusqu ce que la proc dure v rifiant qu on a obtenu le r sultat final soit v rifi e On vient de d rouler un programme et l ensemble symboles proc dure d crit ce programme C est l anc tre de l algorithme Alan Turing cr ateur de la machine abstraite du m me nom Il existe des livres complets sur la machine de Turing notamment un de Alan Turing lui m me e
239. ncore vous disposez de tout le n cessaire Pour ajouter un l ment entre deux autres l ments d une liste vous devez conna tre l adresse de l l ment pr c dent et l adresse de l l ment courant sachant que le nouvel l ment sera ins r entre les deux La proc dure ajout_ milieu re oit donc trois arguments le nouvel l ment pNouveau l l ment pr c dent pPrec et l l ment actuel pEncours Proc dure ajout _milieu ES pNouveau pPrec pEncours pointeurs sur element D but pPrec pSuiv gt pNouveau pNouveau pSuiv gt pEncours FinProc G n ralisation Le but est de g n raliser les ajouts en un grand sous programme unifi Pour cela il faut savoir o placer l l ment ajouter L algorithme de recherche d un l ment retourne deux pointeurs celui de l l ment trouv et de l l ment pr c dent Supposez que vous souhaitez ins rer votre nouvel l ment juste avant l l ment recherch cela devient plut t simple Quatre cas de figure se pr sentent e pPrec contient NIL pas d l ment avant et pEncours contient NIL il n y a aucun l ment dans la liste le nouveau sera le premier et seul l ment e pPrec contient NIL pas d l ment avant et pEncours pointe sur l l ment trouv qui est le premier le nouveau se place avant en premier e pPrec pointe sur un l ment pr c dent et pEncours pointe sur l l ment trouv le nouveau se place au milieu des deux e pPrec point
240. ndante C est ce qu elle est puisqu un type structur est un ensemble de variables d un type donn e De ce fait un champ peut recevoir une valeur comme une autre e Enfin le seul cas o un enregistrement peut recevoir une valeur en globalit c est quand on lui affecte un autre enregistrement du m me type b Un enregistrement dans une structure Un type structur d finit un nouveau type de variable appel enregistrement Un enregistrement est d clar comme une Variable Il semble donc logique qu un enregistrement puisse faire lui m me partie d un autre type structur ENI Editions All rigths reserved Chaque article dispose d un fabricant Ce fabricant peut tre d crit par une structure typ e Structure tfabricant ref cha ne nom cha ne adresse cha ne tel cha ne FinStruct Vous voulez maintenant associer un fabricant chacun de vos articles Rien de plus simple incorporez un enregistrement de type tfabricant votre type structur tarticle Structure tarticle ref cha ne libelle cha ne prix cha ne fab tfabricant FinStruct Maintenant d clarez un enregistrement de type article VAR art article Dans votre programme vous allez acc der aux champs de l enregistrement art comme vu ci dessus mais vous allez aussi ajouter les informations sur le fournisseur Pour cela il suffit de respecter la syntaxe avec des points nom_enregl nom_ enreg2 nom_ champ Soit comme exemple D but
241. nde va aussi de 1 n Au total vous obtenez n fois n boucles donc n boucles La complexit est donc f n n2 et vous la noterez O n Le co t de l algorithme augmente au carr du nombre d informations Si vous ajoutez en plus une quelconque op ration dans la premi re boucle cette op ration a aussi un co t que vous pouvez tenter de prendre en compte Si vous ajoutez une multiplication et que celle ci a un co t de 1 alors la complexit finale est de n n 1 soit n2 n Cependant si vous faites une courbe pour de grandes valeurs de n et que vous comparez avec la courbe simple n2 vous remarquerez que le rajout devient n gligeable Au final l algorithme conserve une complexit O n 2 Si la complexit peut parfois tre calcul e assez finement il en existe plusieurs pr d finies ENI Editions All rigths reserved e O 1 complexit constante e Olog n complexit logarithmique e O n complexit lin aire e O n log n complexit quasi lin aire e O n2 complexit quadratique e O n complexit cubique e O nP complexit polynomiale e O nlo9 n complexit quasi polynomiale e O 21 complexit exponentielle e O n complexit factorielle Ces complexit s ne sont pas forc ment faciles appr hender aussi voici un graphique repr sentant quelques unes de celles ci En abscisse est indiqu le nombre de donn es traiter et en ordonn e la complexit associ e le nombre d o
242. ne et sert v rifier si les deux valeurs droite et gauche sont identiques c est dire qu elles ont la m me valeur Dans cet exemple l expression a b est vraie mais a c est fausse PROGRAMME EGALE VAR a b c entiers DEBUT a 5 b 5 c 10 Afficher a b Afficher a c FIN Il ne faut surtout pas confondre tant en algorithmique que dans les langages de programmation l op rateur d affectation et l op rateur d galit En math matique et en langage courant a b peut avoir deux significations soit a re oit la valeur de b soit on cherche v rifier si a et b sont gaux Laquelle est la bonne Dans un langage comme le BASIC l interpr tation du signe d pend du contexte Avec une variable avant et hors contexte de condition c est une affectation Dans une expression conditionnelle c est une comparaison Dur de s y retrouver C est pour cela que certains langages comme C C Java ou encore PHP utilisent l op rateur d galit deux fois gal pour ne pas le confondre avec l op rateur d affectation Dans ces langages a b c est une expression valable qui signifie que a re oit la valeur de b qui elle m me re oit la valeur de c La variable b est affect e en premier puis a Les trois variables disposent de la m me valeur la fin a b c est aussi une expression valable Le est prioritaire sur le et b c est faux car 5 et 10 sont diff rents Faux vaut 0 La variable a re
243. ne instruction Selon que peut tre convertie facilement en Si imbriqu s Les conditions sont v rifi es les unes apr s les autres dans l ordre indiqu Quand une condition est vraie le bloc d instructions associ est ex cut puis l algorithme continue apr s le Fin Selon Si aucune condition n est v rifi e c est le bloc final du Sinon qui est ex cut Voici une application simple qui permet de placer dans une variable le nom d un mois en fonction de son num ro entre 1 et 12 Variable mois en Num rique Variable libelle mois en Alphanum rique D but mois 11 Selon que mois 1 libelle_ mois janvier mois 2 libelle_ mois f vrier mois 3 libelle_ mois mars mois 4 libelle_ mois avril mois 5 libelle mois mai mois 6 libelle_mois juin mois 7 libelle _ mois juillet mois 8 libelle_ mois ao t mois 9 libelle_mois septembre ENI Editions All rigths reserved mois 10 libelle_mois octobre mois 11 libelle_mois novembre mois 12 libelle_mois d cembre Fin Selon Fin En PHP la structure quivalente est le switch case switch variable case valeurl lt instructions gt break case valeur2 break default lt instructions gt Chaque valeur case correspond une valeur possible de la variable du switch Si plusieurs instructions sont pr sentes il est pr f rable de les placer entre accolades Le break est pour une fois utile et fort
244. ne prend que deux valeurs Une unit binaire s appelle un bit binary digit Ce mot a t invent par Claude Shannon en 1948 Comme il y a plusieurs pistes sur les circuits plusieurs valeurs 0 et 1 donc plusieurs bits circulent en m me temps En associant ces valeurs on obtient des valeurs plus grandes En passant des donn es sur un fil la Valeur maximale est de 1 Si on prend deux fils soit deux bits la valeur maximale en binaire est 11 soit 3 en d cimal Pourquoi Voici une d monstration par tapes Courant Fil 1 Courant Fil 2 Binaire D cimal Ne passe pas Ne passe pas Ne passe pas Passe Passe Ne passe pas Passe Passe Une analogie fort ancienne en informatique ancien peut signifier un laps de temps tr s court des ann es 1980 expliquait le fonctionnement des nombres binaires en associant des fils transportant du courant des ampoules lectriques Chaque ampoule repr sente une valeur Si le courant passe l ampoule s allume et prend la valeur associ e Le binaire comme son nom l indique utilise une base deux 2 tout comme le d cimal utilise une base dix 10 En d cimal tous les nombres peuvent tre repr sent s l aide de puissances de 10 Prenez le nombre 1234 1 103 2 102 3 101 4 100 1234 L unit est repr sent e par 100 la dizaine par 101 la centaine par 102 et ainsi de suite Pour convertir le binaire en une valeur d cimale plus lisible il faut utiliser les puissances de 2 l
245. ne seule superclasse appel e Object Cette classe sert de prototype de base pour toutes les autres Toutes les classes propos es par d faut par Java toutes les API du SDK d rivent de la classe Object La classe Object propose des m thodes qui sont toutes r impl ment es dans les classes d riv es La classe Object est donc la superclasse de toutes les classes Java Si vous reprenez l exemple des r gimes alimentaires du r gne animal vous obtenez une arborescence de ce genre Herbivore cheval ENI Editions All rigths reserved H ritage et hi rarchies des classes d Simple ou multiple N classes peuvent d river d une superclasse c est ce que vous avez vu jusqu pr sent Si vous regardez la hi rarchie actuelle il serait ventuellement possible de modifier quelque chose Un omnivore mange la fois de l herbe fruits et l gumes et de la viande Il est donc la fois Herbivore et carnivore Pourrait on alors cr er une classe Omnivore d rivant des classes Carnivore et Herbivore C est possible Dans ce cas la nouvelle classe h rite des membres des deux classes p res Classe omnivore h rite de Herbivore Carnivore FinClasse La hi rarchie devient Herbivore Carnivore Omnivore H ritage multiple attention la complexit C est possible mais cela pose souvent plus de probl mes que cela n en r sout Les avis sont partag s sur ce sujet Mais voici un bref exemple des implications u
246. ne variable qui existait d j par affectation Il est aussi possible de r server un emplacement m moire pour une donn e point e directement Dans ce principe vous pouvez cr er un pointeur sur un entier par exemple et r server un espace m moire qui contiendra cet entier sur lequel la variable pointeur pointera C est le principe de l allocation dynamique de m moire Il vous faut employer la syntaxe suivante pointeur nouveau type Le type doit bien entendu tre celui de la valeur qui sera contenue l emplacement m moire r serv Apr s cette instruction le pointeur re oit l adresse m moire de la zone r serv e En cas d chec plus de m moire disponible par exemple il re oit la valeur NIL Dans l exemple suivant un pointeur sur un entier est d clar Voulant placer une valeur enti re dans la zone m moire point e il faut d abord r server l emplacement n cessaire Puis via l utilisation de l toile devant le nom du pointeur on y place un entier Programme alloc Var pEntier pointeur sur entier D but pEntier nouveau Entier pEntier 12345 Afficher pEntier Fin Dans la plupart des langages disposant de pointeurs il est possible de pr ciser la taille de la m moire allou e par exemple allouer un espace pour dix entiers Dans ce cas c est l quivalent d un tableau d entiers et l adresse retourn e sera celle du premier entier Ajouter 1 au pointeur d calera celui ci d un l ment Cette syntaxe n est pas
247. news bin bash uucp x 10 14 Unix to Unix CoPy system etc uucp bin bash Les plus perspicaces d entre vous auront reconnu un morceau du fichier etc passwd qui contient quelques informations sur les comptes des utilisateurs du syst me Unix Chaque ligne est un enregistrement dont la structure est la suivante e Un s parateur d limite les diff rents champs e Il y a sept champs num rot s par convention de 1 7 e 1 champ nom de l utilisateur son login e 2 ME champ indicateur de mot de passe ici stock ailleurs e 3 me champ UID identifiant num rique unique de l utilisateur e 4 M champ GID identifiant du groupe de l utilisateur stock ailleurs e 5 ME champ commentaire libre e 6 champ dossier personnel de l utilisateur e 7 champ l interpr teur de commandes shell de connexion Vous voyez bien qu il est possible de placer des informations tr s importantes dans un fichier texte La manipulation d un tel fichier est assez vidente il suffit de lire une ligne puis de d couper celle ci champ par champ ce qui est plut t simple car il suffit d s lors de trouver les d limiteurs La plupart des langages proposent des fonctions qui permettent de d couper une cha ne selon des d limiteurs Ce type de fichier a aussi bien des avantages que des inconv nients e Du fait que les champs soient coll s les uns aux autres et que chaque champ ne prend pas plus d espace que sa donn e
248. ngement d ann e e les ann es bissextiles pour le mois de f vrier Pour information une ann e est bissextile si elle v rifie int gralement deux r gles e l ann e est divisible par 4 et e l ann e est divisible par 400 mais pas par 100 L algorithme pour indiquer si une ann e est bissextile ou non est le suivant Notez que dire qu une ann e est divisible par n consiste dire que le reste de la division par n est nul PROGRAMME BISSEXTILE VAR Annee entier DEBUT Afficher Entrez l ann e Saisir annee Si annee 4 0 ET annee 400 0 OU annee 100 gt 0 Alors Afficher annee est bissextile Sinon Afficher annee n est pas bissextile Finsi FIN En PHP lt html gt lt head gt lt meta gt lt title gt bissextile lt title gt lt head gt lt body gt lt php if lisset _GET annee gt lt form method GET gt Ann e lt input type text size 4 name annee gt lt input type submit name 0K gt lt form gt lt php else annee GET annee l if annee 4 0 amp amp annee 400 0 annee 100 gt 0 echo annee est bissextile else echo annee n est pas bissextile gt lt body gt lt html gt Ce test d ann e bissextile n intervient que lors des calculs sur le dernier jour de f vrier pour savoir si le lendemain du 28 est le 29 ou le 1 mars De m me il faut g rer les cas o les mois ont 30 ou 31 jours ainsi
249. nir Les variables se d clarent au d but de l algorithme avant le programme lui m me mais apr s le mot VAR VAR Variablel type Variable2 variable3 type 3 Les types Une case m moire contient g n ralement un octet c est dire une valeur de 0 255 Mais une variable peut tr s bien contenir le nombre 214862 le r el 3 1415926 le texte bonjour etc Donc une variable n est pas uniquement d finie par la valeur qu elle contient mais aussi par la place que cette valeur occupe et par la mani re dont l algorithme va la repr senter et l utiliser nombre texte etc C est le type de la variable Que pouvez vous mettre comme valeur dans une variable En principe tout ce que vous voulez Cependant vous devez tout de m me pr ciser quel type la valeur repr sente Est ce un nombre Si oui un entier sans virgule ou un r el avec virgule Est ce du texte Est ce un tableau Et ainsi de suite Vous entendrez parfois parler du codage de la variable selon le type et la taille de la valeur celle ci est encod e de mani re diff rente dans la m moire utilisant plus de cases a Les nombres Placer des nombres dans la variable est le plus vident et souvent le plus courant Une case m moire peut contenir un octet c est dire une valeur comprise entre 0 et 255 28 1 Mais si elle doit contenir une valeur n gative Alors sur les 8 bits un sera r serv au signe et la case m moire pourra contenir des valeurs d
250. nix echo Hello world En Basic originel 10 PRINT Hello world 20 END En COBOL IDENTIFICATION DIVISION PROGRAM ID HELLO WORLD ENVIRONMENT DIVISION DATA DIVISION PROCEDURE DIVISION DISPLAY Hello world STOP RUN En langage C include lt stdio h gt int main int argc char argv printf Hello world n return 0 En langage C include lt iostream gt ENI Editions All rigths reserved int main std cout lt lt Hello world lt lt std endl return 0 En PHP lt php print Hello world gt En Java public class HelloWorld public static void main Stringl args System out println Hello world En Visual Basic Sub Main MsgBox Hello world End Sub En Pascal program Bonjour begin WriteLn Hello world end 2 Classifications des langages Que remarquez vous Il y a autant de syntaxes diff rentes qu il existe de langages Cependant vous constatez que les langages C C Java ou PHP ont de nombreuses ressemblances alors que l assembleur ou le COBOL semblent sortis d ouvrages de Science Fiction C est que les premiers ont quelques liens familiaux tandis que les autres sont radicalement oppos s a Haut niveau bas niveau Puisqu il existe des centaines de langages de programmation lequel choisir pour impl menter vos algorithmes Il n y a pas de r ponse simple cette question Chaque langage a t g n ralement con
251. ns All rigths reserved Tout comme une variable retourne une valeur une fonction retourne aussi une valeur ce qui veut dire qu une fonction peut tre utilis e appel e partout o une variable pourrait l tre dans une expression dans un calcul un affichage une affectation etc Dans un seul cas la fonction ne peut pas tre utilis e une fonction fournit une valeur elle ne peut pas se voir affect e une valeur Ceci est interdit equationex INTERDIT mais ceci est autoris x equation x recevra alors la valeur retourn e par la fonction equation via l instruction Retourne PROGRAMME EQ1 Var result r el D but result equation Afficher result Fin 2 L instruction Retourne ne retourne pas une variable mais une valeur Cette valeur peut tre le contenu d une variable mais aussi une autre fonction auquel cas c est le r sultat de cette autre fonction qui sera retourn ou n importe quelle expression pouvant tre valu e La fonction equation peut donc tre crite ainsi Fonction equation r el Var a b c x r els D but Retourne a x x b xtce FinFonc Voici le m me exemple en PHP Cette fois la m thode va retourner un entier ce qui est pr cis lors de sa d claration function equation il faudrait initialiser les variables ici x a x x b x c return x 5 Variables locales et globales a Locales L exemple de la proc dure RepeteCar a soulev un p
252. nt Avant 48 17 25 9 34 Apr s 9 17 25 34 48 echo t i echo t i on n e r ENI Editions All rigths reserved 17 Les sous programmes r cursifs 1 Principe Un sous programme peut appeler un autre sous programme quel qu il soit Donc un sous programme peut s appeler lui m me Un sous programme est dit r cursif s il est tout au moins en partie d fini par lui m me Autrement dit si dans une fonction ou une proc dure vous faites appel cette propre fonction ou proc dure celles ci sont dites r cursives L exemple le plus simple est la factorielle nl n n 1 Il existe deux types de r cursivit e Simple ou rapide le sous programme s appelle lui m me e Crois e ou indirecte deux sous programmes s appellent l un l autre le premier appelle le second qui appelle le premier etc La r cursivit peut tre appliqu e tant aux fonctions qu aux proc dures Pour une r cursivit simple Proc dure recursive D but instructions recursive instructions Fin Pour une r cursivit crois e Proc dure recurl D but instructions recur 2 instructions Fin Proc dure recur2 D but instructions recurl instructions Fin La suite ne va exposer que les sous programmes r cursifs simples 2 Un premier exemple la factorielle Une factorielle est l exemple r v d application d un algorithme r cursif Cet exemple
253. nt l arbre binaire donn en exemple n a pas t choisi au hasard Il s agit d un arbre binaire ordonn construit de sorte qu avec un parcours infix les valeurs des diff rents n uds sont tri es Fonction infixe pNoeud pointeur sur noeud D but Si pNoeud lt gt NIL Alors infixe pNoeud pGauche sous arbre gauche Afficher pNoeud valeur racine infixe pNoeud pDroite sous arbre droit Finsi Fin 4 Arbre binaire ordonn a Principe Un arbre binaire est ordonn si pour une valeur d un n ud donn la valeur du fils de gauche lui est inf rieure et la valeur du fils de droite lui est sup rieure pGauche valeur lt pEncours valeur lt pDroite valeur Imaginez que vous voulez ajouter la valeur 15 dans l arbre e Comparez 15 la racine 12 c est sup rieur direction le n ud de droite e Comparez 15 au n ud 14 c est sup rieur direction le n ud de droite e Comparez 15 au n ud 16 c est inf rieur direction le n ud de gauche e Il n y a pas de n ud gauche placez 15 dans ce nouveau n ud Tous les parcours sont possibles et le parcours infix vous donne toutes les valeurs d j tri es b Recherche d un l ment Pour rechercher un l ment vous avez deux solutions utiliser une solution it rative ou une solution r cursive En effet les deux sont possibles et assez simples Il suffit de comparer la valeur recherch e la valeur de chaque n ud Si elle est inf rieure alor
254. nt dit D crocher Sonnerie ET volont de r pondre OU envie d appeler quelqu un D crocher est VRAI si votre t l phone sonne VRAI ET que vous voulez r pondre VRAI OU si vous voulez appeler quelqu un VRAI b La v rit Vous avez vu ci dessus une table de v rit Pour tablir celle ci vous avez besoin de variables logiques qui ne prennent que deux valeurs VRAI ou FAUX qu on appelle les valeurs de v rit Ces valeurs forment un ensemble appel B VRAI et FAUX ne n cessitent que deux chiffres pour tre repr sent s 1 et 0 L ensemble B se note ainsi B 1 0 En math matiques vous connaissez probablement d autres ensembles comme par exemple l ensemble N des entiers naturels Sur ces ensembles s appliquent des lois des th or mes des transformations C est pareil pour l ensemble B qui est r git par des lois et des transformations De celles ci peuvent tre d duites une grande quantit de propri t s et de d rivations c La loi ET Vous la connaissez d j depuis le chapitre Les variables et op rateurs et l op rateur logique associ La loi ET est aussi appel e la conjonction Elle s nonce ainsi ENI Editions All rigths reserved a ET b est VRAI si et seulement si a est VRAI et b est VRAI La loi ET utilise une notation particuli re diff rente selon le champ d application e le point a b e amp amp amp ou AND en programmation selon les langages La suite du ch
255. nt en lecture qu en criture cf section Variables locales et globales de ce chapitre b Les fonctions En math matique vous avez probablement rencontr la notion de fonction Dans le cadre de la r solution d une quation du second degr l quation s crit g n ralement ainsi f x ax 2 bx c Le r sultat de f x ou fonction de x est le r sultat du contenu de la fonction c est dire l quation La valeur de f x est ce r sultat C est pareil en algorithmique une fonction est un sous programme qui retourne une valeur Un fonction se d crit ainsi Fonction nom type Var variables D but bloc d instructions Retourne valeur FinFonc e Une fonction se d clare avec le mot cl Fonction suivi de son nom et du type de valeur qu elle retourne Ce peut tre n importe quel type entier r el cha ne e Une fonction peut contenir une zone de d claration de variables et de types structur s e Le bloc d instructions est encadr par D but et FinFonc e La valeur de la fonction est retourn e par l instruction Retourne La valeur retourn e doit tre du m me type que celle attendue par la d claration de la fonction Fonction equation r el Var a b c x r els D but xX a x x b x c retourne x FinFonc Il existe une diff rence tr s importante entre une proc dure et une fonction e La proc dure est vue comme une instruction e La fonction est vue comme une valeur ENI Editio
256. nt que dans ce cas pr cis le mot cl class peut tre utilis pour d clarer des sortes de structures Il est aussi possible de cr er des tableaux d objets lt html gt lt head gt lt meta gt lt title gt Structures 2 lt title gt lt head gt lt body gt lt 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 lt 3 i Sarticle i l new tarticle Sarticle i gt fab new tfabricant Sarticle Sarticle Sarticle Sarticle gt ref Art001 O1 gt fab gt ref Fab1l234 gt ref Art002 02 gt fab gt ref Fab4321 ES echo article 0 gt ref echo lt br gt echo article 0 gt fab gt ref echo lt br gt echo article 1 gt ref echo lt br gt echo article 1 gt fab gt ref gt lt body gt ENI Editions All rigths reserved lt html gt ENI Editions All rigths reserved Pr sentation 1 Principe Lors de la pr sentation de la structure d un algorithme il a t bri vement abord la possibilit d ajouter une partie suppl mentaire en d but de programme avant les d clarations des variables Cette partie n avait pas encore t abord e alors qu ce niveau vous savez si vous avez bien compris les chapitres pr c dents d j tr s bien programmer Or peut tre avez vous remarqu quelqu
257. nt que i lt 10 et noms i l lt gt rech Faire i i 1 FinTantQue Tersi Si nom i Rech Alors Afficher Trouv Sinon Afficher Absent Finsi FIN Il y a la possibilit de faire diff remment avec un drapeau PROGRAMME RECHERCHEZ VAR Tableau noms tableaul 1 10 Rech cha ne i entier trouve bool en DEBUT dl trouve FAUX de cha nes Tant que i lt 10 et trouve FAUX Faire Si nom 1 srech Alors trouve VRAI Finsi i i 1 FinTantQue Si trouve Alors Affiche Trouv Sinon Affiche Absent FinSi FIN En PHP lt html gt lt head gt lt meta gt lt title gt Recherche lt title gt lt head gt lt body gt lt php t array 10 20 14 25 17 8 10 12 15 5 41 19 2 6 21 i 0 trouve false rech 15 ENI Editions All rigths reserved while i lt count t amp amp S Strouve if t i rech trouve true Si if trouve echo Trouv la position i 1 n gt lt body gt lt html gt 2 Le plus grand petit moyenne Dans le chapitre pr c dent vous avez eu l occasion de d terminer la plus petite et la plus grande d une s rie de notes saisies par l utilisateur Il s agit cette fois de faire la m me chose avec les tableaux Le principe est le m me sauf que la donn e ne vient pas d une saisie de l utilisateur mais du tableau Voici un exemple pour un tableau de dix l ments PROGRAMME MINMAXMOY VAR Notes tableau 1 10 de r els min max moy r els i en
258. occupe fournit un r el avantage en terme d occupation d espace disque et de m moire e Cependant le traitement de d coupage de la cha ne en fonction de la position forc ment al atoire d un ENI Editions All rigths reserved d limiteur est plus complexe qu il n y para t Certes les langages peuvent fournir des fonctions appropri es mais comment feriez vous vous m me Sur ce dernier point c est assez facile formaliser sous forme d algorithme Une fonction split re oit trois param tres une cha ne de caract res le d limiteur et une position de d part Elle retourne le champ partir de cette position qui est le num ro de caract re de la cha ne d marrant un Si la fonction retourne une cha ne vide c est qu il n y a plus rien Fonction split txt cha ne delim caract re pos entier cha ne Var l i sentiers tmp cha ne D but l longueur delim tmp i pos Tant que i lt 1l et milieu txt i 1l delim Faire tmp tmp emilieu txt i 1l un seul caract re concat n iei 1 FinTantQue Retourne tmp FinFonct Pour exploiter cette fonction voici un petit programme qui recherche successivement tous les champs d une ligne Il suffit de boucler tant que la fonction split ne retourne pas de cha ne vide chaque passage dans la boucle il faut incr menter la position de la longueur de la cha ne trouv e plus 1 le d limiteur pour se trouver sur l ventuel nouveau champ Programme decoupe
259. od GET gt Votre saisie lt input type text size 15 name txt gt lt br gt lt input type submit name OK gt lt br gt lt form gt lt php else Stxt _GET txt l echo Vous avez saisi txt lt br gt n gt lt body gt ENI Editions All rigths reserved 10 lt html gt 6 Les constantes Vous pouvez d cider de donner une valeur une variable et que cette valeur ne doit pas changer elle doit rester fixe dans le temps et inalt rable pour toute la dur e du programme Sa valeur doit rester constante D o son nom Une constante est une valeur repr sent e tout comme une variable par une valeur qui ne peut pas tre modifi e apr s son initialisation Elle est immuable Un exemple de constante pourrait tre la valeur de PI Une constante se d clare g n ralement avant les variables sous le mot cl CONST Elle est aussi d un type donn Certains langages de programmation passent parfois outre du type de la constante PROGRAMME CONSTANTE CONST PI 3 1415927 r el VAR R 5 entier Aire r el DEBUT Aire 2 PI R Afficher Aire FIN Une constante s utilise exactement comme une variable sauf qu elle ne peut pas recevoir de valeur En PHP une constante est d clar e avec un sous programme define La premi re valeur est le nom de la constante la seconde est la valeur associ e Notez qu il n y a pas de devant le nom d une constante ni sa d claration ni lors de son
260. ode plus math matique est l algorithme de H ron d Alexandrie Cet homme aussi appel H ron l Ancien tait un math maticien m canicien et ing nieur grec n Alexandrie au 1er si cle de notre re Il a crit de nombreux trait s et laiss quelques formules dont l une permettant de calculer l aire d un triangle en fonction de la longueur de ses c t s et une autre permettant d approcher la valeur d une racine carr e de mani re r cursive Voici comment trouver la formule ENI Editions All rigths reserved 2 donc 2x x a 2 x a donc 2 x 2 x a donc x s7 2x a x x y donc x 2x a X X donc x 2 on obtient enfin la suite x gt xX Aj Formule de H ron d Alexandrie La suite finale permet de calculer la racine carr e en fonction d une valeur initiale arbitraire Xo En principe on utilise la valeur enti re approch e de la racine carr e la formule permettant initialement d obtenir rapidement les nombres situ s apr s la virgule Donc si vous cherchez la racine carr e de 40 sachant que 6x6 vaut 36 et que 7 7 vaut 49 la racine carr e est comprise entre les deux vous devriez mettre 6 Cependant dans la pratique n importe quelle valeur peut convenir avec un nombre important d it rations vous obtiendriez toujours le r sultat attendu autant en pla ant 1 que 10000 Il est cependant tr s int ressant de pouvoir optimiser le calcul en r cup rant l entier le plu
261. ogin trim milieu ligne 1 8 uid chnum milieu ligne 10 5 Afficher login uid Fermer fic Fin Que faire cependant quand on ne conna t pas l avance le nombre de lignes du fichier Comment savoir si la fin du fichier a t atteinte Vous avez deux possibilit s e Selon certains formalismes algorithmiques Lire est une fonction qui retourne un bool en donc vrai ou faux Si vous tentez de lire un enregistrement et qu il n y en a plus Lire retourne FAUX Autrement dit tant que Lire est VRAI on peut continuer lire les lignes suivantes e La fonction EOF parfois appel e aussi FinFichier retourne un bool en qui indique si la fin du fichier a t atteinte ou non Cette fonction prend en param tre le nom logique du fichier Elle retourne VRAI si la fin du fichier a t atteinte donc s il ne reste plus d enregistrements lire 2 La fonction algorithmique EOF va retourner VRAI si le fichier que vous ouvrez ne contient pas d enregistrements donc si la fin de fichier est atteinte d s l ouverture Or dans quelques langages le programme ne le sait pas tant qu il na pas tent de lire un enregistrement et donc une fonction de ce type retournerait FAUX tant qu aucune lecture n aurait eu lieu Prudence Le programme suivant va lire tout le fichier des mots de passe et placer les logins et UID dans des tableaux Comme on ne conna t pas l avance le nombre d l ments on se limitera arbitrairement 100 lignes Pr
262. ogramme LIREFIC Var fic fichier s quentiel nom cha ne ligne cha ne itentier login tableaul1 100 de cha nes uid tableaul1 100 d entiers D but nom passwd 10 Ouvrir nom dans fic en lecture Tant que NON EOF fic Faire Lire fic ligne II login i trim milieu ligne 1 8 uid i chnum milieu ligne 10 5 FinTantQue Afficher i enregistrements lus Fermer fic Fin b criture 2 ENI Editions All rigths reserved Lire est une chose crire dans un fichier en est une autre L criture utilise l instruction Ecrire une fonction qui prend comme param tre le nom logique du fichier et l enregistrement la ligne crire Vous trouverez tout comme l instruction de lecture une instruction EcrireFichier strictement identique Ecrire nom_logique enregistrement Comme vous devez crire des enregistrements largeur fixe c est vous de v rifier que les enregistrements sont la bonne longueur S ils sont trop longs vous avez mal dimensionn vos enregistrements l origine un cas r gulier est une adresse rallonge ou un nom de ville compos S ils sont trop courts vous devrez leur ajouter des espaces en fin de cha ne Par exemple toujours dans l exemple des logins que faire si celui ci est trop court par exemple toto donc quatre caract res alors qu il devrait en faire huit L astuce consiste rallonger le login avec des espaces Ce n est pas un probl me pour le relire puisque la fonc
263. ois valeurs entre parenth ses une cha ne une position de d but et une longueur Elle est parfois nomm e sschaine sous cha ne s utilisant de la m me mani re Les deux autres ne prennent que deux param tres une cha ne et une longueur Dans le cas de gauche c est le nombre de caract res d couper en partant de la gauche pour droite depuis la droite et pour milieu depuis la position indiqu e Les positions d marrent 1 Le programme suivant va tout d abord afficher tous les caract res d une cha ne les uns apr s les autres puis le premier mot puis le dernier Programme decoupe Var txt cha ne result cha ne i sentier D but txt Salut les amis Pour i de 1 longueur txt Faire resultemilieu txt i 1 Afficher result les lettres une une Fin ENI Editions All rigths reserved 2 492 14 Affiche gauche txt 5 Salut Affiche droite txt 4 amis Fin La fonction pos position d termine la position d une cha ne de caract res dans une autre Elle trouve donc une sous cha ne de caract res donn e et retourne sa position le cas ch ant z ro sinon Programme trouve Var ch cha nes position entier D but txt abcedefghik position pos def txt Si pos 0 Alors Afficher Pas trouv sinon Afficher A la position pos FinsSI Fin La fonction suppr permet de supprimer une sous cha ne d une cha ne de caract res en fonction de sa position initiale et de sa longueur Progra
264. omme les logarithmes les inversions les racines les vecteurs les calculs trigonom triques etc Certaines documentations lui rajoutent quelques registres petites cases m moires int gr es l UAL et lui donnent le nom de processeur CPU e L Unit de Contr le UC CU en anglais ne pas confondre avec Unit Centrale contr le le s quen age des op rations autrement dit le d roulement du programme Elle prend ses instructions dans la m moire et donne ses ordres l UAL Les r sultats retourn s peuvent influer sur le s quen age L UC passe alors l instruction suivante ou une autre instruction telle que le programme lui ordonne d effectuer e La m moire peut tre d crite comme une suite de petites cases num rot es chaque case pouvant contenir une petite information petite dans le sens o la taille de chaque case est fixe Cette information peut tre une instruction ou un morceau d instruction du programme une instruction peut occuper plusieurs cases ou une donn e nombre caract re ou morceau de ceux ci C est l UC qui a comme r le central de contr ler l acc s la m moire pour le programme et les donn es Chaque num ro de case est appel une adresse Pour acc der la m moire il suffit de conna tre son adresse Les instructions du programme pour l UC et les donn es pour l UAL sont plac es dans des zones diff rentes de la m me m moire physique e Les Entr es Sorties E S 1 0 en anglais p
265. on f d ratrice d ajout dans une grande fonction de suppression Supprimer le seul l ment C est facile si l l ment est le seul donc la t te de la liste il suffit de placer son pointeur NIL Pas de pr c dent pas de suivant c est termin Proc dure suppr_unique ES pTete pointeur sur element D but pTete NIL FinProc Supprimer le premier l ment C est aussi simple c est l l ment suivant qui devient la t te de la liste Proc dure suppr_premier ES pTete pointeur sur element D but pTete pTete psSuiv FinProc Supprimer le dernier l ment ENI Editions All rigths reserved 7 Toujours aussi simple l l ment pr c dent re oit NIL comme valeur de pointeur suivant Proc dure suppr_dernier E pPrec pointeur sur element D but pPrec pSuiv e NIL FinProc Supprimer un l ment au milieu Il faut raccorder l l ment pr c dent avec l l ment suivant Proc dure suppr_milieu E pPrec pEncours pointeurs sur element D but pPrec pSuiv pEncours psSuiv FinFonc Simplification Contrairement l ajout vous pouvez tout de suite voir s il est possible de simplifier avant d aller plus loin selon le m me principe Ainsi dans la fonction suppr_premier pTete recevra NIL si l l ment supprim est le seul car pTete gt pSuiv vaut NIL Idem pour suppr_milieu et suppr_dernier Dans suppr_milieu pEncours gt pSuiv vaut NIL si l l ment est le dernier Les fonctions
266. ondant peu ou pas du tout du texte qui s appellent des fichiers binaires b Le fichier binaire Comment reconna tre ces fichiers les uns des autres C est tr s facile Prenez un diteur de texte simple notepad sous Windows et ouvrez le fichier sur lequel vous avez des doutes Si vous obtenez ceci l diteur est kWrite sous Linux ENI Editions All rigths reserved s ballistics demo Kwrite Fichier dition Affichage Signets Outils Configuration dde 484 0 DIRIS SA c oobxozotOuioj oc P n G o oo o lt oioooE Pv vis o o o oioon y P E 002 00 0 p o 0i000 P D ooi on i o oo po ooui PS sis on vioooi yP ts o o o ooi y oo 1s v o 00 P000pSS PO0NpYP N YY002 9S00 lt p 00 000Hp S00 Y00LpY 00 Y F00Pp 08000 Y00 v SooSh FR oul o v no nioon P 1s s v co oou P nis ov oiooo P nis oo ooog oo is eovdoioooopy P sis oo so ooopyyou lis o oGo ooo o o0 o 030 0D6p S g s D oSoiooni S oR D OShui 000Hb S00T o osoohp P o S n0 oio00Hp P Uis DAD 00Hp on sis o0 oo 0R 004 o oioiooo P 00R o o qo 00 OZ ooHp oiowoog amp aql 0 0o o00PS R I08p 00 S G on oioonkp P s o v oo o ookp oo o s o oo u Go ooo pi oo9 oox yoiooog y upl
267. ose de lisible via les codes ASCII ou Unicode mais n ayant aucun rapport Pour r sumer les donn es d un fichier binaire y sont crites exactement comme si elles sortaient de la m moire c est la m me repr sentation e La structure des enregistrements est d pendante de l interpr tation du programme Les enregistrements peuvent tre de longueur fixe mais coll s les uns apr s les autres sans retour la ligne e De ce fait un fichier binaire ne doit pas tre ouvert ou enregistr depuis un diteur de texte il est souvent illisible Seul le programme sachant le manipuler est apte l utiliser Vous pouvez cependant utiliser un diteur h xad cimal e Le fichier peut tre lu octet par octet ou par bloc ou enti rement depuis n importe quelle position puisque c est vous qui d finissez sa structure Idem pour les enregistrements 5 Les acc s aux fichiers a S quentiel Le fichier s quentiel permet d acc der aux donn es dans leur ordre d criture Vous acc dez aux donn es les unes apr s les autres Pour pouvoir acc der au milli me enregistrement vous devez d abord lire les 999 premiers ce qui ne veut pas dire que vous devez les interpr ter Les fichiers texte sont g n ralement des fichiers s quentiels chaque enregistrement tant repr sent par une ligne Un fichier binaire peut tr s bien tre s quentiel puisque encore une fois c est vous qui d terminez sa structure Vous pouvez d cr ter que le
268. ositif 1 40x10 4 3 40x1038 R el double pr cision double N gatif 1 79x10308 4 94x107324 Positif 4 94x107324 1 79x10308 Sous PHP c est encore plus simple PHP est un langage non typ Une variable peut contenir n importe quelle valeur de n importe quel type puis la m me variable peut changer de contenu d un autre type De plus dans la plupart des cas la Variable n a pas besoin d tre d clar e Elle se met exister sa premi re affectation voire utilisation si PHP est param tr en ce sens Dans ce dernier cas l acc s une Variable qui n a jamais eu de valeur retourne une valeur nulle vide fausse selon le cas O En PHP il n est pas tout fait exact de dire que les variables ne sont pas typ es Elles le sont implicitement en fonction de leur contenu et de leur utilisation Si vous affectez la valeur 32 une variable ce peut tre un entier mais aussi les deux caract res 32 selon le contexte Vous devez choisir quel type num rique utiliser selon vos besoins La voie de la facilit consiste prendre le type le plus lev comme un entier long ou pire un r el en double pr cision afin d tre tranquille En informatique comme dans beaucoup de m tiers il faut choisir la formule la plus conomique On parle ici d conomie de moyens Qu un programme donne le r sultat attendu n est pas suffisant il faut aussi qu il le fasse vite bien et en consommant le moins de ressources possibles
269. our acc der plus facilement aux bases de donn es telle API pour aider au d veloppement d un logiciel de gestion de cabinet m dical etc Vous trouverez sur Internet des sites sp cialis s dans la diffusion souvent gratuite de classes tr s pratiques Si la classe de base de PHP pour la gestion des tableaux ne vous suffit pas vous pourrez en trouver d autres qui proposeront tous les types de tri de reconstituer une cha ne d allouer dynamiquement des l ments suppl mentaires qui g reront les listes cha n es votre place etc Tout est possible En une phrase la grande force de l objet est d tre r utilisable acc l rant ainsi le d veloppement d applications par l utilisation de composants d j test s et valid s c Hi rarchie Quand une classe h rite d une autre on dit que c est une classe fille et l objet r sultat un fils Il y a donc une relation hi rarchique reprise sur la g n alogie Il y a des objets p re grand p re etc jusqu une classe de base Comme plusieurs classes distinctes peuvent d river d une superclasse et que d autres encore peuvent d river en cascade des nouvelles classes vous obtenez un hi rarchie entre les classes un arbre des classes et objets associ s comme un arbre g n alogique une classe de base a tant de fils qui ont eux m mes tant de fils et ainsi de suite Cette hi rarchie d crit une arborescence C est flagrant en Java o toutes les classes h ritent la base d u
270. p rations effectu es pour n donn es Pour des complexit s d ordre O 21 l algorithme effectue d j 1024 op rations et plus de 3 5 millions pour O n Exemples de complexit 1100 1000 900 800 700 E 600 500 y riL A Complexit 400 300 200 ooo 100 ANA 1 2 3 4 5 6 7 8 9 10 Quantit de donn es trait es Courbes de complexit Comment se repr senter r ellement une complexit en terme de temps pass par l ordinateur traiter les donn es Chaque microprocesseur est capable de traiter un certain nombre d op rations par seconde Le plus long tant g n ralement les calculs sur les r els flottants le crit re souvent retenu pour d terminer la puissance brute d un processeur est le FLOPS Floating Point Operations Per Second Un Intel Pentium 4 3 2 GHz tourne une moyenne de 3 1 GFLOPS GigaFlops soit 10 FLOPS ou encore un milliard d op rations sur r els par seconde Si vous traitez 20 donn es dans un algorithme de complexit O n la vitesse de calcul se chiffre en millioni mes de seconde Le m me nombre de donn es dans un algorithme de complexit O n doit effectuer 2432902008176640000 op rations ce qui prendra 784807099 secondes ou encore une fois converti autour de 25 ans Bien entendu une complexit O n est la pire qui puisse exister Avec une complexit inf rieure O 2 le traitement prendrait un dixi me de seconde tout de m me ce qui est norme et relativise fortem
271. p rieure sup rieure ou gale la valeur de droite PROGRAMME INFSUP VAR a b c entier DEBUT a 10 b 10 c 20 Afficher a lt c Afficher a lt b Afficher c gt b Afficher c gt c Afficher NON c lt a Afficher c gt a FIN Les quatre premi res expressions d crivent parfaitement les r sultats attendus elles sont toutes vraies Les deux derni res sont fausses et parfaitement quivalentes Si la valeur de c n est pas inf rieure ou gale a elle lui est forc ment sup rieure C est encore ici une propri t de l alg bre de Boole 5 Le cas des cha nes de caract res Vous pouvez en pseudo code algorithmique utiliser les op rateurs de comparaison avec des cha nes de caract res La comparaison s effectue alors en fonction de l ordre alphab tique des cha nes de caract res Cet ordre est tabli en fonction de la num rotation des caract res dans la table ASCII ou la page Unicode Dans cet exemple txt2 est sup rieur txt1 dans le sens o dans un tri alphab tique des deux le b est situ apr s le a PROGRAMME TXT VAR txt1 txt2 cha nes DEBUT txtie a txt2 b Ecrire Etxt2 gt txtl FIN Ces op rateurs appliqu s des cha nes de caract res sont un bon exemple de ce qui peut se passer si par hasard vous vous trompez dans les types et les affectations Dans l exemple suivant les deux cha nes 1111 et 2 sont compar es ainsi que les deux entiers de m me valeur Lesquelles sont les plus grandes PROG
272. p4 p5 cha nes La proc dure RepeteCar se pr te bien un param tre Comment en effet utiliser une variable globale pour sp cifier le nombre de caract res r p ter Autant passer ce nombre en param tre Voici le programme modifi en cons quence Proc dure RepeteCar E nbcar entier E c caract re VAR itentier DEBUT Pour i de 1 nbcar Faire Afficher c FinPour FinProc PROGRAMME LIGNES VAR i entier DEBUT Pour i de 1 10 Faire RepeteCar i FinPour FIN Vous r cup rez une ventuelle valeur en sortie via la ou les variables E ou ES Voici une proc dure qui convertit un nombre de secondes en heures minutes et secondes Elle prend quatre param tres dont un en entr e le nombre de secondes et trois en sortie heures minutes et secondes Proc dure sec_to_hms E nbsec entier S h m s entiers D but h nbsec DIV 3600 nbsec nbsec 3600 m nbsec DIV 60 s nbsec MOD 60 FinProc dure PROGRAMME convert _sec Var nb_secondes entier heures minutes secondes entiers D but nb_secondes 3950 sec_to_hms nb_secondes heures minutes secondes Afficher heures minutes secondes Fin Passer un enregistrement comme param tre La proc dure pr c dente fonctionne certes merveille mais avec un peu plus de r flexion pourquoi ne pas utiliser une seule structure pour repr senter toutes les composantes d une heure Struct hms heures entier minutes entier secondes entier Finstr ct Un enregist
273. peu de lobbying dans ce cas pr cis n est pas du superflu il existe de nombreux formats de fichiers dit ouverts dont l organisation des donn es qui y sont contenues est connue et document e Tout format de fichier ouvert est reconnu g n ralement de la m me mani re par les programmes sachant les utiliser Le PDF pour certains documents est un format ouvert invent par Adobe le format OGG Vorbis en est un autre concurrent du MP3 Il existe encore une diff renciation entre les formats propri taires et les formats libres Tous les formats libres sont ouverts mais seulement tr s peu de propri taires le sont Un format libre ouvert et r pandu est un gage de p rennit et de compatibilit de vos donn es OGG Vorbis est libre PDF ne l est pas Si demain Adobe en d veloppe une nouvelle version elle pourrait tre incompatible avec les pr c dentes et payante On a vu des documents Word ne plus pouvoir tre ouverts d une version une autre Tout ce qui peut tre formalis peut tre stock dans un fichier Il y a cependant des diff rences videntes et flagrantes entre un fichier qui doit stocker une photo et un autre qui stocke une page HTML d un site web Deux cat gories de fichiers sont distinguables e Les fichiers organis s sous forme de lignes de texte successives qui s appellent des fichiers texte e Les fichiers bruts contenant des donn es vari es dont des nombres repr sent s sous forme binaire ne corresp
274. pl t dans le prochain chapitre consacr aux tests Les r sultats d une quation du second degr sont appel s les racines Pour les calculer il faut utiliser les op rations suivantes SDENA y bA Xx e l A3 2a 2a Pour la racine carr e vous utiliserez dans l algorithme la syntaxe racine x o racine est une fonction math matique qui calcule la racine carr e de x C est un peu l quivalent des fonctions d un tableur vous verrez dans ce livre comment cr er vos propres fonctions PROGRAMME EQUATION VAR a b c delta x1 x2 r els DEBUT a 3 b 6 c 10 deltae PA bb 4 a c xle p racine delta 2 x2 b racine delta 2 a Afficher les r sultats sont Afficher xl x1 Afficher x2 x2 FIN En PHP notez l utilisation de fonctions math matiques int gr es comme sqrt racine carr e lt html gt lt head gt lt meta gt lt title gt Equation du second degr lt title gt lt head gt lt body gt lt php a 3 b 6 Sc 10 Sdelta b Sb 4 a Sc x1 b sqrt Sdelta 2 a x2 b sqrt Sdelta 2 a echo les r sultats sont echo xil xl lt br gt echo x2 x2 lt br gt gt lt body gt ENI Editions All rigths reserved lt html gt Quelques langages admettent des op rateurs arithm tiques unaires c est dire qui ne prennent qu une valeur e x incr mente de 1 la variable x e x idem mais apr s l ut
275. plus basse la plus haute ou des r sultats d un tirage du loto pour le rendre plus lisible Imaginez un tirage du loto de cinq num ros videmment tous diff rents dont les valeurs s talent entre 1 et 49 Voici l tat initial du tableau suite au tirage au sort e kb b P Po Il existe plusieurs m thodes permettant de trier ces diff rentes valeurs Elles ont toutes leurs qualit s et leurs d fauts Ainsi une m thode sera lente l autre sera plus gourmande en m moire et ainsi de suite C est leur complexit qui d termine leur usage notamment pour de grandes plages de valeurs Dans les algorithmes suivants la variable Cpt contient le nombre d l ments du tableau initial et t est le tableau Il est int ressant de prendre en compte la complexit de ces divers algorithmes bien que cette notion pr sent e au premier chapitre ne soit g n ralement pas ou peu abord e dans les premi res ann es d tudes en informatique Les algorithmes ont souvent une complexit proche Pourtant l usage un tri shell est plus rapide qu un tri par s lection tout d pendant du nombre d l ments et l ventuel ordre de ceux ci au d part b Le tri par cr ation Le tri par cr ation ne sera abord que du point de vue th orique En effet si cette m thode semble simple elle est en fait lourde et compliqu e Si on demande un d butant en programmation comment trier un tableau il vous proposera tr s certainement de cr er un d
276. portent pas forc ment le m me nom Ils sont r cup r s au sein du sous programme comme des variables locales au sous programme Il est cependant possible de passer comme param tre toute expression retournant une valeur que ce soit un scalaire une variable un tableau un enregistrement une table ou encore une fonction qui sera substitu e par son r sultat a Proc dures La syntaxe de passage des param tres est la suivante Proc dure nom_proc E paraml type ES param2 type S param3 type Les param tres d une proc dure sont de trois cat gories e Ceux en entr e qui correspondent aux valeurs que vous souhaitez transmettre la proc dure Entre les parenth ses ils sont pr c d s d un E comme Entr e car ce sont les valeurs en entr e de la proc dure e Ceux en sortie qui correspondent aux valeurs retourn es par la proc dure au programme ou au sous programme l ayant appel Ils sont pr c d s d un S comme Sortie car ce sont les valeurs en sortie de la proc dure Ces param tres sont des variables qui doivent tre d clar es dans le programme ou sous programme appelant ENI Editions All rigths reserved e Ceux en entr e et en sortie pr c d s de ES Quand vous avez plusieurs param tres en entr e il suffit de tous les mettre apr s le E et m me de les regrouper selon leur type Cette proc dure prend cinq param tres trois entiers et deux cha nes Proc dure proc E pl p2 p3 entiers
277. pour chaque enregistrement Dans le format d limit la taille est variable mais la premi re ligne n utilisait que 32 octets e Cependant la r cup ration de tels enregistrements est bien plus simple car vous connaissez l avance la taille de chaque champ et donc toutes les positions pour d couper vos enregistrements Par contre il faudra penser supprimer les ventuels espaces en trop en supprimant les espaces finaux Les langages proposent souvent une fonction appel e trim qui le fait pour vous Nul besoin donc de faire des recherches comme pr c demment Cette praticabilit compense l utilisation de la m moire d autant plus qu elle co ncide fortement avec les types structur s abord s dans le chapitre Les tableaux et structures La lecture et l criture dans les fichiers se trouvent ainsi facilit es Un fichier format fixe a aussi un autre avantage il est possible de choisir parmi les deux formats texte ou binaire pour l enregistrer Autrement dit soit ligne ligne soit contigus Comme vous connaissez la taille exacte d un enregistrement il suffit de dire que les octets 1 64 repr sentent le premier 65 129 le deuxi me 130 194 le troisi me et ainsi de suite Vous devrez cependant faire attention avec les valeurs num riques un entier occupant g n ralement quatre octets un r el double pr cision huit etc Connaissant l avance les positions de chaque champ vous utiliserez les sous programmes pr
278. pour quelques octets mais s il s agit de manipuler de grosses images ou des films cela compte e La m moire inutilis e peut tre lib r e d s qu elle n est plus n cessaire Avec les m thodes dites statiques elle l est uniquement la fin du programme ou d un bloc d instructions e L allocation m moire est la plus grande source d erreurs dans un programme pouvant occasionner du simple dysfonctionnement au plantage complet du programme voire m me de graves probl mes de s curit piratage dans des applications critiques Partant du principe qu un langage de haut niveau ne doit pas emb ter le programmeur avec une quelconque gestion du mat riel PHP g re la m moire votre place et donc vous n avez pas vous soucier de lib rer la m moire de mani re si complexe en apparence ENI Editions All rigths reserved Les tests et conditions 1 Principe Dans le pr c dent chapitre vous avez pu vous familiariser avec les expressions mettant en place des op rateurs qu ils soient de calcul de comparaison l galit ou bool ens Ces op rateurs et expressions trouvent tout leur sens une fois utilis s dans des conditions qu on appelle aussi des branchements conditionnels Une expression valu e est ou vraie le r sultat est diff rent de z ro ou fausse Suivant ce r sultat l algorithme va effectuer une action ou une autre C est le principe de la condition Gr ce aux op rateurs bool ens l expression peu
279. que le changement d ann e lors du mois de d cembre L algorithme utilise des structures Selon Que et Si PROGRAMME LENDEMAIN VAR annee mois jour entiers DEBUT Afficher Date initiale Saisir jour mois annee Selon que mois 1 OU mois 3 OU mois 5 OU mois 7 OU mois 8 OU mois 10 Si jour 31 Alors jour 1 ENI Editions All rigths reserved 10 mois mois l Sinon Jour jour i FinSi mois 4 OU mois 6 OU mois 9 OU mois 11 Si jour 30 Alors jour 1 moisemois 1 Sinon jour jour 1 FinSi Mois 2 Si annee 4 0 ET annee 400 0 OU annee 100 gt 0 Alors Si jour 29 Alors jour 1 mois mois l1 Sinon jour jour i FinSi Sinon Si jour 28 Alors jour 1 mois mois li Sinon jour jour i Finsi Finsi Mois 12 Si jour 31 Alors jour 1 mois 1 annee annee l Sinon jour jour i Finsi Fin Selon Afficher Le lendemain est le jour mois annee Fin Le programme PHP associ refl te ce qui a d j t expliqu ci dessus un case sans break continue l ex cution jusqu au break suivant ou jusqu la fin Aussi une suite de case sur la m me ligne est possible c est comme si vous les mettiez les uns sous les autres Pour le reste le code est tr s proche de l algorithme lt html gt lt head gt lt meta gt lt title gt Annees mois jours lendemain lt title gt lt head gt lt body gt lt php if lisset _GET jour gt lt form method GET gt jour lt input type text size 4 name jour
280. r des syntaxes l g rement diff rentes elles sont cependant toutes quivalentes Pour variable Allant De d but fin PAS pas Faire Bloc d instructions Fin Pour Ou encore Pour compteur d but fin Pas pas Bloc d instructions compteur suivant Dans cette derni re forme il est int ressant de constater qu il est plus simple dans le cas de boucles contenant un gros bloc d instructions de s y retrouver la variable tant r p t e dans la syntaxe de fin de boucle Enfin il est possible de trouver des syntaxes alternatives d rivant de ces trois derni res 2 mais pas indispensable Vous aurez rapidement compris que cette boucle ne sert que pour des compteurs Autrement dit tout ce qu elle propose est d j int gralement possible avec les structures Tant Que et R p ter Simplement avec le Pour vous n avez pas faire vous m me le calcul du compteur C est donc une simplification O Il n existe aucun cas o la structure Pour Fin Pour est strictement n cessaire Elle ne fait que simplifier les autres structures it ratives lors de l utilisation de compteurs 3 Quelle structure choisir Mais alors quand utiliser telle ou telle structure On emploie une structure Pour lorsqu on conna t l avance le nombre d it rations n cessaires au traitement Ce nombre peut tre fixe ou calcul par avance avant la boucle peu importe La boucle Pour est d terministe son nombre d it rations est fi
281. r peut recevoir une adresse statique c est dire une adresse en hexad cimal que vous rentrez vous m me C est une affectation directe En pratique cette m thode n est que tr s rarement utilis e sauf cas ENI Editions All rigths reserved SA sp cifiques si on sait qu telle ou telle adresse se trouve toujours la m me donn e en toute circonstance et vous pr f rerez passer l adresse d une variable connue pointeur adresse de variable Avec les variables du petit exemple cela donne D but txt Hello World ptxt adresse de Ext cpt 10 pilnt adresse de cpt Tout comme en C vous utiliserez l toile pour acc der au contenu de la variable point e tant en lecture qu en affectation Suite du programme Afficher ptxt ptxt Salut tout le monde Afficher txt pint 20 cpt cpt 1l Afficher cpt la fin que contiennent txt et cpt Respectivement Salut tout le monde et 21 Il se peut qu un pointeur n ait pas encore re u d adresse et donc pointe sur nulle part C est emb tant car c est le plantage assur si vous tentez de l utiliser Pour viter ce probl me vous lui affecterez une valeur g n rique qui ne repr sente rien mais qui pourra cependant tre test e C est la valeur NIL Not Identified Link En C c est NULL et en PHP null NIL est une sorte d quivalent de z ro mais qui est reconnue telle quelle si vous comparez NIL et z ro vous aurez un retour faux pinteNIL Fin Attention c
282. re fus e Ariane 5 a provoqu sa destruction apr s 40 secondes de vol Le programme en question contr lait les gyroscopes qui indiquent l orientation de la fus e Il venait d Ariane 4 et n avait pas t test ni modifi pour Ariane 5 En gros un nombre de 64 bits a t converti en 16 bits videmment cela ne rentre pas et les valeurs retourn es par ce programme sont devenus aberrantes Or ce programme tait critique et n aurait jamais d retourner de valeurs impossibles Les donn es retourn es n taient pas test es et v rifi es par le programme central de calcul de vol qui les prenaient pour argent comptant et les ENI Editions All rigths reserved interpr taient telles quelles Sur un nombre sign le dernier bit correspond au signe Lorsque les 16 bits ont t remplis le dernier bit est pass un Le programme a re u une indication comme quoi la fus e avait chang de sens pointait vers le bas et a orient les tuy res des r acteurs en les braquant fond pour rectifier une situation totalement fausse La fus e a donc subi un moment donn de par la pouss e et sa position des forces a rodynamiques telles que sa destruction est devenue in vitable Le comble Le programme des gyroscopes ne devait tre utilis que durant le compte rebours et uniquement sur les mod les Ariane 3 Autrement dit il n aurait jamais d tre pr sent ni fonctionner en vol b Mars Climate Orbiter L autre exemple touc
283. re m thode ne doit avoir le m me nom que la classe b Appel implicite La classe Ecran se voit compl t e de deux constructeurs le premier ne re oit aucun param tre et sera utilis lorsque l objet ne re oit aucune valeur lors de sa cr ation Le second prend trois param tres type marque mod le pour les initialiser la cr ation de l objet Un constructeur qui ne re oit aucun param tre est appel le constructeur par d faut Il est appel quand aucune valeur n est pass e l objet lors de sa cr ation Classe Ecran attributs priv s type cha ne marque cha ne mod le cha ne m thodes publiques Constructeur Ecran D but Afficher Constructeur par d faut this type Inconnu this marque Inconnu this mod le Inconnu Fin Constructeur Ecran t mq mdl cha nes D but Afficher Constructeur avec 3 arguments this type t this marque mq this mod le mdl Fin FinClasse ENI Editions All rigths reserved Comment savoir quel constructeur va tre appel la cr ation de l objet C est vous de passer les bonnes valeurs l objet d s son instanciation d claration ou cr ation Dans l exemple suivant deux objets Ecran sont cr s Le premier l est comme d habitude c est le constructeur par d faut sans param tres qui sera appel Le second prend trois param tres entre parenth ses comme si vous passiez des param tres une m thode c est le constructeur associ qui sera appel
284. rement peut tre pass en param tre d une proc dure tout comme une variable en entr e ou en sortie La proc dure et le programme peuvent tre convertis comme ceci Types Struct hms ENI Editions All rigths reserved heures entier minutes entier secondes entier Fin truet Proc dure sec_to_hms E nbsec entier S duree hms D but duree heures nbsec DIV 3600 nbsec nbsec 3600 duree minutes nbsec DIV 60 duree secondes nbsec 60 FinProc dure PROGRAMME convert _sec Var nb_secondes entier heures hms D but nb_secondes 3950 sec_to_hms nb_secondes heures Afficher heures heures heures minutes heures secondes Fin b Les fonctions Les fonctions ne retournent qu une seule valeur via l instruction Retourne Aussi il n y a pas besoin de sp cifier si les param tres sont en entr e ou en sortie Ils sont forc ment en entr e Par contre la valeur de la fonction peut tre de n importe quel type Voici une fonction qui fait l inverse de la proc dure pr c dente elle re oit des heures minutes et seconde et en contrepartie elle retourne le nombre de secondes total Fonction hms_ to _sec heures minutes secondes entiers entier Var total entier D but total heures 3600 minutes 60 secondes Retourne total FinFonc Une fonction peut parfaitement r cup rer un enregistrement comme param tre Voici une bonne occasion de r utiliser le type structur pr c demment d fini Fonction hms_to_sec duree hms entier
285. remonte au n ud 9 ENI Editions All rigths reserved s 92 e Branche droite 10 c est une feuille e On remonte au n ud 9 puis la racine 12 e Branche droite 14 e Branche gauche 13 feuille e On remonte au n ud 14 e Branche gauche 16 e La sortie finale est donc 12 9 8 10 14 13 16 Pour le repr senter il faut utiliser une fonction ou proc dure r cursive Fonction prefixe pNoeud pointeur sur noeud D but Si pNoeud lt gt NIL Alors Afficher pNoeud valeur racine prefixe pNoeud pGauche sous arbre gauche prefixe pNoeud pDroite sous arbre droit Finsi Fin Il existe deux autres types de parcours Le parcours postfix qui traite dans cet ordre e Le sous arbre gauche e Le sous arbre droit e La racine L ordre de sortie est 8 10 9 13 16 14 12 Fonction postfixe pNoeud pointeur sur noeud D but Si pNoeud lt gt NIL Alors prefixe pNoeud pGauche sous arbre gauche prefixe pNoeud pDroite sous arbre droit Afficher pNoeud valeur racine Finsi Fin Et le parcours infix appel aussi parcours sym trique ou hi rarchique canonique Ce parcours sera tr s utile par la suite L ordre est le suivant e Le sous arbre gauche e La racine e Le sous arbre droit Cette fois l ordre de sortie est le suivant e Sous arbre gauche 8 9 10 e Racine 12 e Sous arbre droit 13 14 16 ENI Editions All rigths reserved Vous obtenez la s quence 8 9 10 12 13 14 16 C est tr s int ressa
286. rgule plus ou moins apr s Il faut prendre le probl me l envers ne serait ce pas plut t la virgule qui se d place Ensuite est ce possible de repr senter un nombre r el sous forme de r sultat d une manipulation de nombres entiers Prenez un exemple simple 1 2 1 2 12x0 1 12x10 l1 12E 1 En v ritable notation scientifique on crit 1 2E0 soit 1 2x100 Voil qui est tr s int ressant Les nombres 12 10 et 1 pourraient parfaitement tre cod s directement en binaire Certains ordinateurs sp cialis s dits calculateurs fonctionnent de cette mani re V rifiez avec une valeur plus importante 182 1957 3 182 195 182195x0 001 182195x10 182195E 3 ENI Editions All rigths reserved En v ritable notation scientifique on crit 1 82195E2 soit 1 82195x102 C est le principe de la notation scientifique qu il Va falloir retenir mais en binaire pas en d cimal Le microprocesseur ne manipule pas de puissances de 10 mais de 2 Aussi il faut trouver selon le m me principe un moyen de transformer tout ceci en binaire Dans la partie avant la virgule ce sont des puissances de 2 positives 29 21 22 etc Apr s la virgule il faut passer en puissances de 2 n gatives 27t 272 273 etc La premi re partie ne pose aucun probl me 182 10 5101101103 La seconde partie est plus d licate Elle se base sur les puissances n gatives de 2 Pour rappel math matique 27 1 1 21 272 1 22 etc 0 195x2 0 3
287. rnier chapitre Pour cr er un objet PHP il faut crire une classe c est la description ou une sorte de type d objet Une classe peut contenir des variables les attributs et des bouts de programme les m thodes Par mauvaise analogie une classe qui ne contiendrait que des variables pourrait tre apparent e une structure Voici un exemple succinct lt html gt lt head gt lt meta gt lt title gt Structures lt title gt lt head gt lt body gt lt php class tfabricant public ref public nom public adresse public tel class tarticle public ref public libelle public prix public fab ENI Editions All rigths reserved Sarticle 0 J new tarticle Sarticle new tarticle Sarticle 0 gt fab new tfabricant Sarticle 1 gt fab new tfabricant Sarticle 0 gt ref Art001_ O1 Sarticle 1 gt ref Art002 02 Sarticle 0 gt fab gt ref Fab1l234 Sarticle gt fab gt ref Fab4321 echo article 0 gt ref echo lt br gt echo article 0 gt fab gt ref echo lt br gt echo article 1 gt ref echo lt br gt echo article 1 gt fab gt ref gt lt body gt lt html gt Il est fortement probable que vous ne compreniez pas certaines instructions comme public new pourquoi class et pas struct etc Ne vous inqui tez pas tout ceci sera expliqu au dernier chapitre consacr l objet Pour l instant remarquez seuleme
288. rogramme Lignes Il n y a aucun risque d acc der la valeur ou de modifier celle ci par accident de l un vers l autre programme Du c t de la m moire le contenu de ces deux variables est cloisonn et distinct des adresses diff rentes En PHP une variable d clar e dans le programme principal ou dans une m thode est locale au programme principal c est dire non visible depuis les autres fonctions sauf si c est explicitement pr cis b Globales Il serait pourtant tr s pratique de pouvoir acc der une variable depuis n importe quel endroit du programme qu il soit principal ou un sous programme Ce m canisme permettrait d utiliser son contenu et d en modifier la valeur partout dans le programme La port e d une telle variable s tendrait tout le code Ce type de variable s appelle une variable globale et elle existe tant en algorithmique que dans la plupart des langages Une variable globale est d clar e en dehors des sous programmes et du programme principal avant ceux ci c est dire en premier dans l algorithme tant globale elle est accessible de partout tant en acc s lecture du contenu qu en modification affectation d une nouvelle valeur Les variables globales sont d clar es de cette mani re Var globales nbcar entier c caract re Proc dure RepeteCar VAR i entier D but Pour i de 1 nbcar Faire Afficher g FinPour FinProc PROGRAMME LIGNES VAR i entier DEBUT ce x Pour nb
289. rs xex cpte10 Pour i de 1 cpt Faire x 0 5 x a x Fin Pour Finsi Ecrire La valeur de PI est x Fin ENI Editions All rigths reserved Question Combien faut il d it rations pour obtenir sept chiffres corrects apr s la virgule Voici le programme PHP correspondant qui devrait vous fournir une petite id e du r sultat lt html gt lt head gt lt meta gt lt title gt PI lt title gt lt head gt lt body gt lt php Scpt 100000000 Sa 1 for i 2 i lt cpt i a a 1 i i a a 6 x 1 cpt 10 while x x lt a x if x x a SxX for i 1 i lt cpt i x 0 5 x a S x echo x 2 gt lt body gt lt html gt ENI Editions All rigths reserved Pr sentation 1 Principe et d finition a Simplifier les variables Jusqu pr sent les types de donn es que vous avez rencontr s sont des scalaires sauf pour les cha nes de caract res Pour rappel un scalaire est un type de donn e qui ne repr sente qu une seule variable la fois Un entier un caract re un r el un bool en etc sont des scalaires Une cha ne de caract res non il s agit d une suite ou liste de caract res les uns apr s les autres Une cha ne est donc une liste ordonn e par vos soins de scalaires Les langages proposent souvent un type pour les cha nes de caract res mais c est une facilit offerte par ceux ci Un langage comme le C n en propose p
290. rtains cr ent des champs de bits dans un m me octet d autres utilisent un octet complet etc Cependant plusieurs langages ENI Editions All rigths reserved proposent le type bool en tr s pratique Dans la pratique ces langages proposent des constantes des variables qui prennent une valeur une fois pour toutes sp ciales pour repr senter les valeurs vrai et faux e TRUE pour Vrai e FALSE pour faux Ces constantes peuvent m me tre utilis es directement pour valuer une expression Telle expression est elle vraie telle autre est elle fausse Suivant le langage il faudra faire attention si les constantes existent et sont en minuscules ou majuscules VAR Test bool en PHP dispose ne dispose videmment pas de type sp cial pour les bool ens mais accepte cependant deux valeurs true et false l ex cution les valeurs associ es 1 pour true rien pour false sont affich es lt html gt lt head gt lt meta gt lt title gt PHP et booleens lt title gt lt head gt lt body gt lt php bi true Sb2 false echo Vrai bl lt br gt echo Faux b2 lt br gt gt lt body gt lt html gt 4 Affectation a Affectation de valeurs Dans le programme Pour donner une valeur une variable il faut passer par un processus d affectation l aide d un op rateur En pseudo code on utilise le symbole d affectation gauche de ce symbole vous placez le nom de la variable
291. s trap zes losanges etc doivent disposer de ces m thodes Comment d crire ceci en objet La solution consiste crire une classe de base qui deviendra la superclasse de toutes les figures g om triques et qui va contenir tous les attributs de base comme la position de d part x y du trac de la figure ses couleurs mais aussi toutes les m thodes non seulement de base mais qui doivent aussi obligatoirement tre impl ment es dans toutes les classes qui en d rivent Les m thodes de calcul de surface et de p rim tre doivent tre d clar es dans cette classe Pourtant elles ne contiendront rien comme code ce sera la classe d riv e de les programmer Cette classe de base contenant des m thodes sans impl mentation ne pourra pas tre instanci e vous ne pourrez pas cr er d objet partir d elle car elle est de fait inutilisable et ne sert que de base pour les m thodes d riv es Une classe non instanciable et contenant des m thodes non impl ment es uniquement destin e tre d riv e est appel e une classe abstraite Les m thodes non impl ment es qu elle contient sont appel es m thodes abstraites e Pour cr er une classe abstraite vous ajoutez le mot cl abstraite apr s le nom de la classe e Pour cr er une m thode abstraite vous ajoutez le mot cl abstraite avant son nom Classe figure abstraite attributs priv s x r el y r el c_contour cha ne couleur contour c_remp cha ne
292. s 1 ENI Editions All rigths reserved e My la taille maximale de la premi re dimension La position p en m moire est p m x My y Prenez d apr s le tableau ci dessus l l ment d indice 3 4 x vaut 2 y vaut 3 Mx vaut 5 et m vaut 143 p 143 2 5 3 156 Soit un nouveau tableau note2 1 21 1 2 1 3 il pourrait tre repr sent ainsi Adr 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 Pour calculer la position d un l ment d indice x y z avec les m mes pr requis qu au dessus avec Mz la taille maximale de la dimension z et My la taille maximale de la dimension y on obtient la formule suivante p m x My Mz y Mz z b Repr sentation par r f rence La repr sentation lin aire ci dessus est bien pratique pour votre imagination mais montre ses limites dans certains cas Notamment que se passe t il avec les types qui ne sont pas des scalaires Prenez l exemple le plus simple un tableau de cha nes de caract res Dans la m moire et comme vu pr c demment une cha ne de caract res est repr sent e par une suite de valeurs num riques les codes ASCII ou unicode selon le cas Le mot Bonjour est repr sent ainsi Sachant qu on ne conna t pas forc ment l avance la longueur d une cha ne de caract res celle ci se termine souvent suivant les langages par un caract re nul Aussi en m moire vous obtiendrez ceci 1616 1617 1618 1619 1620 1621 1622 1623
293. s d clarerez les types structur s hors du programme et des sous programmes c est dire tout en haut de celui ci La structure est d clar e dans une section particuli re sous le mot cl Type entre les mots cl s Structure et FinStruct Type Structure nom_type champl type_champl champ2 type _champ2 Champn type_champn FinsStruct e Chaque structure porte un nom Ce nom sera utilis pour d clarer des enregistrements e Une structure peut contenir 1 n champs du m me type ou de types diff rents Une structure un seul champ est en soi totalement inutile La structure pour d crire un article serait donc quelque chose comme Type Structure tarticle ref cha ne libelle chaine prix r el FinStruct b Enregistrement ENI Editions All rigths reserved Un enregistrement est une variable d un type structur donn Il se d clare exactement comme une variable au m me endroit sous le mot cl VAR Un enregistrement peut donc tre consid r comme une variable un peu sp ciale cependant VAR nom_enreg nom_ type Dans le cadre de l exemple pr c dent vous d clarez des articles ainsi VAR articlel article2 article3 tarticle En m moire les divers l ments d un enregistrement peuvent g n ralement tre repr sent s comme tant dans des zones contigu s article 1 ref article 1 libelle article 1 prix article article 1 ref article 1 libelle article 1 prix article2 article 1 ref artic
294. s des param tres de celles ci ne soient pas identiques Soit une classe calcul qui red finit des op rations sur divers types de variables entiers r els mais aussi cha nes de caract res pour les concat ner par exemple Dans cette classe vous voulez que quand vous appelez la m thode addition l addition des deux valeurs pass es en param tres soit effectu e sans se soucier de leur type Cela ne repr sente aucun probl me L exemple suivant impl mente ces trois m thodes et le programme principal y fait appel Classe calcul m thodes publiques Addition de deux entiers Fonction addition x y entiers entier D but Retourne x y FinFonc Addition de deux r els Fonction addition x y r els r el D but Retourne x y FinFonc Concat nation de deux cha nes Fonction addition x y cha nes cha ne D but Retourne x amp y ENI Editions All rigths reserved 2 492 14 FinFonc FinClasse Programme obj7 Var oCalc Calcul D but Deux entiers Afficher oCalc addition 10 20 Deux r els Affichier oCalc addition 3 1415927 14 984 Deux cha nes Afficher oCalc addition Bonjour les amis Fin ENI Editions All rigths reserved Manipuler les objets 1 Les constructeurs a D claration Quand vous instanciez une classe c est dire quand vous cr ez un objet du type de classe donn il vous faut bien souvent appeler diverses m thodes pour remplir ses attributs
295. s indices vont de valeur 1 valeur 10 e Si la num rotation commence 0 les indices vont de valeur 0 valeur 9 C est le cas du langage C du Java ou du PHP Certaines notations algorithmiques sont encore plus surprenantes pour ne pas tre m chant la valeur indiqu e entre crochets peut correspondre au nombre maximal d indices en partant de z ro C est ainsi que le tableau valeurs contiendrait onze l ments Ce ne sera pas le cas ici Dans la suite les indices commenceront 1 pour aller jusqu n n tant le nombre d l ments du tableau Le tableau valeurs 1 10 aura donc bien dix l ments num rot s de 1 10 Comme il ne s agit pas d une r gle absolue dans tous les langages vous prendrez bien soin de v rifier ce qu il en est lorsque vous crirez vos programmes Si vous tes tudiant suivez la repr sentation fournie par vos professeurs ventuellement pr cisez les r gles que vous appliquez aux indices Dans tous les cas n accusez pas l auteur de cet ouvrage e Utilisation Un l ment de tableau re oit une valeur comme une variable se lit comme une variable et s crit comme une variable Ce sont dans les structures it ratives que les tableaux prennent toutes leurs significations En effet les indices des dimensions peuvent tre repr sent s l aide de variables PROGRAMME UTIL VAR notes tableaul 1 10 de r els i entier DEBUT Pour i de 1 10 Faire Ecrire Note i Lire notelil
296. s la recherche continue gauche sinon elle continue droite tant qu une feuille n a pas t atteinte et que la valeur n a pas t trouv e La fonction rech1 prend deux arguments la valeur recherch e et la racine de l arbre Elle retourne un bool en VRAI si la valeur a t trouv e FAUX sinon Elle utilise une simple boucle Fonction rech1 vrech entier pArbre pointeur sur noeud Bool en Var trouve bool en pEncours pointeur sur noeud D but pEncours pArbre trouve FAUX Tant que pEncours lt gt NIL ET trouve FAUX Faire Si pEncours valeur vrech Alors trouve VRAT Sinon Si vrech lt pEncours valeur Alors pEncours pEncours pGauche Sinon pEncours pEncours pDroite Finsi Finsi FinTantQue Finfonc ENI Editions All rigths reserved La fonction rech2 est r cursive Elle prend trois arguments la Valeur recherch e la racine de l arbre et l adresse du n ud contenant la valeur trouv e Si la valeur n est pas trouv e l adresse contient NIL Fonction rech2 vrech entier pArbre pEncours pointeurs sur noeud D but Si pArbre NIL Alors pEncours NIL Sinon Si pArbre valeur vrech Alors pEncours pArbre Sinon Si pArbre valeur gt vrech Alors rech2 valeur pArbre pGauche pEncours Sinon rech2 valeur pArbre pDroite pEncours Finsi Finsi Finsi FinFonc c Ajout d un l ment Quand vous ajoutez un l ment vous devez respecter la structure de l arbre ordonn L ajout d un l ment ajoute une feui
297. s n premiers octets sont la description d une figure g om trique de n faces puis que les n autres enregistrements repr sentent la longueur des faces les angles etc Il n est pas possible de modifier directement l enregistrement d un fichier s quentiel Vous pouvez ajouter un enregistrement la fin Pour supprimer vous pourrez utiliser un diteur b Acc s direct L acc s direct est aussi appel al atoire Il n y a rien de sp cialement al atoire de votre c t mais contrairement l acc s s quentiel vous pouvez sauter directement l endroit que vous d sirez Pour un fichier texte cela pourrait tre le num ro d enregistrement de ligne Pour un fichier binaire c est la position de l octet souhait c Index Dans un fichier index les enregistrements sont identifi s par un index qui peut tre un num ro ou une valeur quelconque un identifiant La connaissance de cet identifiant permet d acc der directement l enregistrement qu il r f rence Les enregistrements sont souvent plac s les uns la suite des autres dans le fichier comme en s quentiel Les index sont eux plac s dans un tableau d index avec pour chaque index la position de l enregistrement correspondant dans le fichier Un fichier index est donc un super m lange des deux pr c dents Les index peuvent tre totalement ind pendants auquel cas il ny a pas forc ment de moyen de lire les enregistrements sans conna tre son index Mais bien so
298. s proche L algorithme sera extr mement pr cis Celui ci contiendra deux boucles La premi re de type Tant Que charg e de calculer l entier x le plus proche de la racine carr e de a La seconde de type Pour calculera les d cimales Le nombre d it rations permettra de d terminer une pr cision D ailleurs inutile d ex cuter cette seconde boucle si le r sultat de la premi re correspond la racine recherch e Variables i x a cpt en Num rique D but Wel a 39 cpt s Tant Que x x lt a Faire x x 1 Fin Tant Que Si x x l a Alors X x 1l Pour i de 1 cpt Faire x 0 5 x a x Fin Pour Finsi Ecrire La racine de a est x Fin Vous allez tre tonn de la pertinence et de la pr cision des r sultats Ainsi en seulement trois ou quatre it rations la pr cision est suffisante pour la plupart des applications Malheureusement vous le verrez dans la suite de l ouvrage c est beaucoup de travail pour pas grand chose les langages sont fournis avec des instructions particuli res permettant d effectuer ces calculs d autant plus que les fameux FPU coprocesseurs arithm tiques disposent d une instruction en dur rien que pour cela FSQRT par exemple sur un vieux Motorola MC68881 En attendant voici la transcription de ce calcul avanc en PHP lt html gt ENI Editions All rigths reserved lt head gt lt meta gt lt title gt racine lt title gt lt head gt lt body gt lt php x 1 a 31 cpt
299. s seulement son nom logique Aussi le d but d un ventuel programme ressemblerait ceci Programme OUVRE Var fic fichier s quentiel nom cha ne D but nom toto txt Ouvrir nom dans fic en lecture traitements Fermer fic Fin 2 Lire et crire des enregistrements a Lecture Pour simple rappel les enregistrements sont ici les lignes d un fichier texte un enregistrement tant quivalent une ligne La lecture d une ligne se fait via l instruction Lire Lire lit l enregistrement pr sent la position actuelle du fichier puis se place sur l enregistrement suivant l ouverture du fichier Lire lit la premi re ligne Un nouveau Lire lira la deuxi me et ainsi de suite jusqu la fin C est pour cela que la lecture est dite s quentielle Vous trouverez aussi la m me instruction sous le nom LireFichier c est la m me chose La syntaxe est la suivante Lire nom_logique variable ENI Editions All rigths reserved La variable en second param tre re oit l enregistrement la ligne lue Dans l exemple suivant un enregistrement du fichier des mots de passe de l exemple ci dessus est lu partant du principe que la largeur est fixe puis l enregistrement est d coup pour r cup rer le login et l uid converti en entier Programme OUVRE Var fic fichier s quentiel nom cha ne ligne login cha ne uid entier D but nom passwd Ouvrir nom dans fic en lecture traitements Lire fic ligne l
300. s structur es e Ces donn es peuvent tre du texte des nombres du moment que tout est converti en texte lisible e Ces donn es structur es sont des enregistrements e Les enregistrements d un fichier texte sont repr sent s sous forme de lignes s par es les unes des autres par une s quence CRLF Windows ou LF Unix Mac e Chaque ligne repr sente une structure d enregistrement selon un format pr tabli fixe ou d limit e Un fichier texte est lisible et modifiable par n importe quel diteur de texte e L interpr tation des enregistrements d pend bien entendu de sa finalit e Un fichier texte ne peut tre lu que ligne ligne e Un enregistrement s ajoute uniquement la fin du fichier Pour modifier ou ins rer un enregistrement il faudra probablement tout r crire Fichier binaire Comme pour les fichiers texte voici quelques propri t s d un fichier binaire ENI Editions All rigths reserved e Un fichier binaire peut stocker n importe quoi que ce soit structur ou non e Les fichiers binaires n ont pas de structure apparente ils repr sentent une suite de donn es octets crites les unes apr s les autres e Toutes les donn es sont repr sent es sous forme binaire Les nombres sont convertis et s il y a du texte il appara t comme tel mais non structur De m me si on y voit un caract re il se peut que ce soit un effet de bord la conversion d un nombre donnant par hasard quelque ch
301. s un sens et dans l autre Dans le monde virtuel un canal permet de faire transiter un flux d information les donn es d un programme vers un fichier d un fichier vers un programme d un programme un autre entre deux fichiers entre un programme et un p riph rique etc Par exemple il existe un canal qui fait transiter ce que vous tapez au clavier vers le ENI Editions All rigths reserved programme qui attend une saisie un autre canal pour transf rer vers l affichage ce que le programme doit afficher Certains canaux fonctionnent dans les deux sens d autres non Chaque canal porte un num ro unique certains ont des noms pr d finis Celui rattach par d faut au clavier appel canal d entr e standard porte le num ro 0 si tant est que 0 soit un nombre et s appelle STDIN Celui qui fait transiter les informations afficher vers l cran ou plut t le pilote ou sous syst me d affichage appel canal de sortie standard porte le num ro 1 et s appelle STDOUT Il en existe un troisi me appel STDERR et portant le num ro 2 charg de v hiculer les messages d erreur La notion de canal est flagrante avec certains syst mes d exploitation surtout Unix qui en use et en abuse Windows h rite lui m me de cette notion exploitable simplement au travers de l interpr teur de commandes d origine DOS En C il est possible d utiliser les fonctions de lecture et d criture de fichiers avec ces trois canaux Vous disposez de
302. s valeurs sont les plus lev es et ainsi de suite Il est donc possible d optimiser l algorithme en d cr mentant de 1 la boucle Pour chaque nouvelle passe DEBUT Permut vrai Cpt s TantQue Permut Faire Pour dedes La CpE l FinPour Cpt Cpt 1 FinTantQue FIN La complexit de cet algorithme est un peu moins lev e En effet on effectue une boucle de moins chaque passage La complexit est cependant toujours en O n au premier passage il y a n 1 comparaisons au deuxi me passage n 2 au troisi me n 3 et ainsi de suite On obtient donc une complexit de n 1 n 2 n 3 1 soit n n 1 2 et donc n2 n 2 C est identique au tri par s lection Le code PHP correspondant est le suivant lt html gt lt head gt lt meta gt lt title gt tri bulle lt title gt lt head gt lt body gt lt php t array 14 13 12 11 10 9 8 7 6 5 4 3 2 1 SPermut true cpt count t 1 while Permut for si 0 SIL lt count St SRE echo SELS MS ENI Editions All rigths reserved echo lt br gt echo gt Permut false for i 0 i lt cpt Si if St il gt t i 1 temp t i t il t iFt1 t i 1 temp SPermut true Scpt for i 0 i lt cou unt St Sir echo SCISL T3 cho lt br gt gt lt body gt lt html gt e Le tri par insertion Le tri par insertion consiste s lectionner un l ment du tableau et l ins rer direc
303. saisie 2 gt lt form method GET gt Entrez un nombre entier lt input type text size 4 name saisie gt lt br gt lt input type submit name OK gt lt form gt lt php k lse Snombre 63 Ssaisie _GET saisie l l Secart nombre saisie if ecart lt 0 ecart ecart if ecart 0 echo Bravo else if ecart lt 5 echo Bouillant else if ecart lt 10 echo Chaud else if ecart lt 15 echo Tiede else echo Froid 2 gt lt body gt lt html gt Quelle conomie de place pour plus de clart et de concision Maintenant vous disposez de tout le n cessaire pour r soudre une quation du second degr dans tous les cas de figure II manque deux cas e Si A 0 il n y a qu une seule solution qui vaut Xo aT 2a e Si A lt 0 l quation n a pas de solution PROGRAMME EQUATION2 VAR a b c delta xl x2 r els DEBUT a 3 b 6 c 10 delta b b 4 a c Si delta gt 0 Alors xle b racine delta 2 x2 b racine delta 2 Afficher Les deux solutions sont x1 x1 x2 x2 SinonSi delta 0 Alors zle b 2 a Afficher L unique solution est x1 Sinon Afficher L quation n a pas de solution Finsi FIN En PHP le programme a t modifi l g rement pour autoriser la saisie de a b etc lt html gt lt head gt lt meta gt lt title gt equation du second degre lt title gt lt head g
304. se En programmation objet pure il ny a plus de notion de programme principal et de sous programmes tous les traitements se font au sein des m thodes et m me le bloc d instructions principal est une m thode au sein d une classe comme en Java Comme tous les composants d un programme sont des objets il s tablit une communication entre les objets En pratique c est videmment vous qui initiez cette communication quand on dit qu un premier objet demande quelque chose un second c est que l une des m thodes du premier objet appelle l une des m thodes du second Puisque tout est objet vous pouvez cr er une instance du second objet comme attribut du premier ou m me passer des objets en arguments de m thodes Dans l exemple pr c dent l objet de type Ecran peut recevoir le message modifie type qui modifie l attribut type Il est possible de d crire programmer une m thode en dehors de la d finition de la classe en algorithmique Dans ce cas dans la d finition de la classe vous crivez le prototype de la m thode nom param tres et en dessous vous d finissez la m thode Vous devez respecter la syntaxe suivante avec les doubles points entre le nom de la classe et la m thode Proc dure classe methode params ENI Editions All rigths reserved Par exemple Classe Ecran m thodes Proc dure modifie _type E t cha ne FinClasse Proc dure Ecran modifie type E t cha ne D but this typ
305. se la ligne Sous Unix et ses d riv s dont MacOS seul le caract re LF est n cessaire une conversion est n cessaire pour convertir du texte de Windows vers Unix et r ciproquement Nul besoin ici de vous montrer une capture d un diteur ouvrant un fichier texte D o une qualit essentielle du fichier texte ENI Editions All rigths reserved 92 Un fichier texte est directement lisible par l utilisateur et son organisation devient vidente Dans un fichier texte m me les nombres sont repr sent s sous forme de caract res ASCII ou unicode selon le cas Le nombre 1234 sera repr sent exactement sous cette forme caract re soit la suite ASCII 31 32 33 34 h xad cimal 49 50 51 52 d cimal ou encore 0011001 0011010 0011011 0011100 en binaire Le m me nombre dans un fichier binaire serait repr sent en 04D2 h xad cimal ou 10011010010 en binaire une grosse diff rence Cela veut dire que quand vous allez crire des nombres dans un fichier texte vous devrez utiliser des fonctions de conversion de nombres vers des cha nes R ciproquement vous devrez utiliser une autre fonction quand vous lirez ces cha nes pour les convertir en nombres Vous pouvez utiliser les fonctions pr d finies pour cela e x chnum txt convertit la cha ne txt en valeur num rique e txt numch x convertit la Valeur num rique x en cha ne Vous avez pu voir dans quelques exemples des chapitres pr c dents que PHP dispose d
306. ser un texte explicatif la recette Dans les deux cas la syntaxe pour le texte ou les symboles pour les sch mas doivent r pondre des r gles strictes voire normalis es Il faut que chacun connaisse leur signification et sache donc les interpr ter C est pour cela que toutes les repr sentations algorithmiques suivent peu de choses pr s le m me formalisme Si les sch mas sont possibles ils sont cependant moins utilis s que les algorithmes sous forme textuelle C est que si vous construisez un algorithme il est plus facile de le corriger quand il est saisi au clavier sous forme de texte que lorsqu il est dessin sous forme d organigramme dans un logiciel de dessin vectoriel ou de pr sentation a La repr sentation graphique Les algorithmes peuvent tre construits l aide de symboles d organigrammes Les tudiants en informatique BTS DUT connaissent bien cette tablette en plastique permettant de dessiner des organigrammes Ils l utilisent en algorithmique en base de donn es en m thode Merise etc dans chaque cas la signification est diff rente Voici un exemple d algorithme sous forme d organigramme qui simule un lanc de d et qui demande une personne de deviner la valeur ENI Editions All rigths reserved Lancer d Saisir valeur oui Afficher Bravo Un formalisme qui occupe trop de place Dans cet exemple simplifi les traitements sont dans des rectangles les prises de d c
307. served Tant Que 1 Structure g n rale La boucle de type Tant Que permet la r p tition d un bloc d instructions tant que la condition test e est v rifi e donc vraie Sa syntaxe est la suivante Tant Que bool en Faire Bloc d instructions FinTantQue Lors de l ex cution du programme celui ci arrive sur l instruction Tant que Il value l expression bool enne une ou plusieurs conditions ou une seule variable Si l expression retourne VRAI alors le programme ex cute les instructions suivantes jusqu ce qu il arrive au FinTantQue Arriv ici il remonte au Tant Que et value de nouveau l expression bool enne si c est VRAI alors il ex cute de nouveau les instructions et ainsi de suite tant que l expression retourne VRAI Si l expression devient fausse alors le programme saute l instruction situ e juste apr s le FinTantQue Voici un simple exemple qui compte de 1 10 PROGRAMME TQUE1 VAR Cpt entier DEBUT Tant que Cpt lt 10 Faire Afficher Cpt Cpt Cpt 1l FinTantQue FIN En PHP la boucle Tant Que est repr sent e par while avec l expression bool enne entre parenth ses while booleen bloc d instructions Si une seule instruction est pr sente au sein de la boucle les accolades sont inutiles while bool en instruction Voici le code PHP correspondant l algorithme TQUE1 lt html gt lt head gt lt meta gt lt title gt tquel lt title gt lt head gt lt body gt
308. ses de vingt l ves Devez vous utiliser trois tableaux Ce qu il y a de bien avec les tableaux c est que l on peut ajouter des indices aux indices C est tr s facile appr hender avec deux indices Note 1 10 17 ENI Editions All rigths reserved Ceci pourrait au conditionnel car soumis aux contraintes de la num rotation des l ments se traduire par la 10 me note de la 1 re classe Ajouter un indice un tableau s appelle ajouter une dimension un tableau Avec une dimension le tableau peut tre repr sent sur une ligne Avec deux dimensions le tableau peut tre repr sent en lignes et colonnes comme dans un tableur ou une grille quelconque Et avec trois dimensions Sous forme de cube avec un axe de profondeur Au del c est plus difficile repr senter aussi il faut parfois utiliser des analogies avec des choses de la vie courante Ainsi pour trois dimensions imaginez un grand casier avec x cases en largeur y cases en hauteur et dont chaque tiroir est d compos en z petites cases Ces repr sentations restent totalement virtuelles une vue de l esprit De nombreux tableaux n ont absolument pas pour but de repr senter des lignes et des colonnes Un tableau deux dimensions peut parfaitement repr senter un jeu de morpion une matrice une classe et les notes des tudiants associ es Le pi ge avec les tableaux plusieurs dimensions c est la taille qu ils occupent en m moire Imaginez dix coles
309. simple de convertir les programmes Java en PHP La suite vous pr sente des notions d objet en PHP Elle se limitera aux notions que vous avez rencontr es depuis le d but de ce chapitre 2 D claration des classes et objets Inconsciemment ou non vous utilisez l objet depuis la pr sentation des structures en PHP pour lesquelles il a t question de tricher Les structures programm es en PHP sont des objets Une classe ses attributs et ses membres se d clarent ainsi class nom classe liste des attributs public attl1l protected att2 private att3 liste des m thodes public function methodeli code m thodel private function methode2 code m thode2 Vous remarquez que cela ressemble tr s fortement aux structures du chapitre Les tableaux et structures Et pour cause il a fallu tricher en PHP pour utiliser une classe comme une structure La structure est en fait une classe uniquement compos e d attributs publics d o l expression courante qui dit qu une classe est une structure avec des fonctions Voici un exemple simplifi d impl mentation de la classe Ecran faisant un constructeur avec trois param tres pass s la valeur null par d faut et une m thode modif type appel e par l un des constructeurs ou d o vous voulez puisque la m thode est publique Cet exemple fait aussi appara tre l utilisation d une variable statique et son utilisation depuis le programme principal
310. soit conome Est ce le cas Cet algorithme effectue neuf calculs additions divisions et modulos Si on ajoute des tests on ajoute des instructions et l algorithme devient plus long Or vous aurez l occasion de le voir dans les chapitres suivants la complexit des algorithmes n est pas li e leur longueur Certains sont tr s courts comme celui ci et pourtant tr s gourmand en ressources Inversement d autres sont longs et semblent compliqu s pour un r sultat de grande rapidit Un test bien pos peut viter des calculs inutiles Un calcul est gourmand en temps machine le microprocesseur travaille plus longtemps en faisant des divisions et des modulos qu en comparant deux valeurs elles sont gales ou non et dans le cas de nombres il suffit de faire un ET pour voir si cela retourne la m me valeur une op ration l mentaire tr s rapide bien plus que le moindre calcul Autrement dit vous avez tout int r t faire des tests quand ceux ci peuvent permettre d viter des calculs lourds PROGRAMME HEURE2 VAR jours heures minutes secondes nbsec entier DEBUT heures 17 minutes 55 secondes 48 Afficher Combien de secondes en plus Saisir nbsec secondes secondes nbsec ENI Editions All rigths reserved 2 492 14 Si secondes gt 59 Alors minutese minutes secondes 60 secondes seconde 60 Si minutes gt 59 Alors heures heures minutes 60 2 minuteseminutes 60 Si heures gt 23 Alors jours heur
311. souvent lourdes Programme libere Var pEntier pointeur sur entier D but pEntier nouveau Entier suite du programme lib rer pEntier pEntier NIL Fin 4 PHP et les r f rences a Diff rences entre le C et PHP ENI Editions All rigths reserved Le langage C est le roi des pointeurs force d en parler on en oublierait presque PHP Du fait de l utilisation d un interpr teur PHP ne conna t pas les pointeurs au sens propre Il est cependant possible qu une variable r f rence l autre Cela ressemble un peu aux pointeurs Cependant il existe des diff rences essentielles e Un pointeur contient l adresse r elle en m moire d une variable Une r f rence PHP appel e handle poign e en anglais ne contient qu une information virtuelle permettant d acc der la ressource et fournie par l interpr teur e Les manipulations de pointeurs peuvent vite devenir tr s complexes en C C risque de d passement des adresses allocations m moires compliqu es risque de confondre les types etc Il n y a pas de risque de ce genre en PHP o la m moire est g r e par l interpr teur e Le seul op rateur pr sent en PHP est le amp permettant de r f rencer une variable Ne croyez pas que l absence des pointeurs en PHP soit une limitation c est m me tout le contraire Tout d abord PHP est un langage volu de haut niveau dont le r le n est pas la manipulation bas niveau d adresses physiques De ce fait
312. st le principe de l ASCII American Standard Code for Information Interchange norme de codage des caract res la plus connue et la plus utilis e La table ASCII invent e par les am ricains contient l origine les 128 caract res utiles pour crire en anglais Par d faut elle ne contient pas les accents Or la table ASCII peut contenir 256 caract res Les 128 autres huiti me bit un contiennent des caract res semi graphiques et des caract res sp cifiques certaines langues typiquement le fran ais pour les caract res accentu s On parle alors de page de code ou de charset Ces pages font l objet d une normalisation par exemple la norme ISO 8859 15 qui est la page d Europe de l Ouest avec le caract re de l euro Dans la plupart des langages ce codage sur un octet suffit et ainsi une cha ne de caract res de 50 caract res occupe 50 octets En pseudo code algorithmique les cha nes de caract res sont plac es entre guillemets pour deux raisons 1 viter une ambigu t entre les nombres sous forme de cha ne de caract res et les nombres au format num rique Certains langages ne font certes pas directement la diff rence c est selon le contexte d utilisation mais avec d autres c est catastrophique La suite de caract res 1 2 3 repr sente t elle le nombre 123 et stock e ainsi en m moire sous forme binaire dans un octet de la m moire ou la cha ne 123 stock e ainsi en m moire sous forme de codes ASCII soit
313. ste est toujours le point d entr e pour la plupart des fonctions tant donn qu il sera repr sent par la suite par un pointeur ne perdez JAMAIS l adresse de ce premier l ment il serait impossible de retrouver le d but de la liste d autant plus qu avec l allocation dynamique de m moire il est plus que possible que les zones m moires allou es chaque l ment ne soient pas contigu s Conservez toujours l adresse du premier enregistrement dans un pointeur pr vu cet effet dont vous ne modifierez pas la valeur tout au long du programme sauf si vous supprimez le premier l ment ou toute la liste b Cr ation ENI Editions All rigths reserved Pour cr er une liste il faut commencer par son premier l ment Le premier l ment est un pointeur auquel vous allez allouer dynamiquement une zone m moire Il prendra la valeur que vous voulez et son pointeur d enregistrement suivant recevra NIL La fonction retourne un pointeur vers le premier l ment de la nouvelle liste Fonction cree_liste pointeur sur element Var pTete pointeur sur element D but pTete nouveau element pTete pSuiv NIL pTete pSuiveNIL Retoune pTete FinFonc 2 Rappel pTete gt pSuiv lt NIL se lit ainsi pTete pSuiv NIL c est dire que le champ pSuiv de l enregistrement point par pTete re oit la valeur NIL Cette fonction am ne un premier commentaire Dans le chapitre Les sous programmes vous avez appris la diff
314. stocke les dates de diverses mani res la plus commune tant sous la forme d un timestamp une valeur signifiant le temps coul depuis une date pr cise Ce timestamp est souvent celui du syst me Unix qui repr sente le nombre de secondes coul es depuis le 1er janvier 1970 minuit UTC exactement C est donc un entier et le langage doit fournir des instructions pour convertir cette valeur en date r elle c Les caract res Si un ordinateur ne savait manipuler que les nombres vous ne seriez pas en train de lire ce livre crit l aide d un traitement de texte OpenOffice org qui lui manipule toute sorte de caract res chiffres lettres caract res sp ciaux etc Une variable peut aussi contenir des caract res Suivant les livres et sites Internet vous trouverez les types Alphanum rique Caract re Cha ne String Ainsi une variable peut stocker votre nom une ligne compl te de texte ou tout ce que vous voulez qui n cessite une repr sentation alphanum rique On appelle d ailleurs une suite de caract res alphanum rique une cha ne de caract res Si vous devez repr senter un seul caract re utilisez le type caract re Pour une cha ne utilisez le type cha ne VAR texte cha ne ENI Editions All rigths reserved car caract re Quelle place occupe une cha ne de caract re En principe un caract re occupe un octet chaque valeur comprise entre 0 et 255 est associ un caract re C e
315. structeur appel __destruct Le destructeur est rarement employ en algorithmique car les professeurs qui l enseignent ont souvent le langage Java l esprit comme langage d impl mentation et pas le C par exemple Pourtant il peut tre important dans des langages o l allocation de la m moire est dynamique Un attribut d un objet peut tre un pointeur allou dynamiquement Quand vous n avez plus besoin de l objet et que vous le lib rez que se passe t il pour ce pointeur Il faut lib rer aussi la zone allou e Le destructeur ressemble beaucoup au constructeur sauf que e Il n y a qu un seul destructeur e Il ne prend pas de param tres e Son nom est compos d un tilde suivi du nom de la classe e Vous le faites pr c der du mot Destructeur Il dispose des m mes propri t s pour les classes d riv es Vous devez ventuellement l appeler vous m me en cascade Classe B h rite de A ENI Editions All rigths reserved Constructeur Bi Destructeur B D but Appel explicite du destructeur de A super A Fin FinClasse Programme obj11 Var p_ol pointeur sur B D but p_ol nouveau B appel implicite au constructeur Lib rer p_ol appel implicite au destructeur Fin 3 Les membres statiques a Attributs Quand vous cr ez une instance de classe un objet chaque objet r sultant dispose de son propre espace m moire et chaque attribut donn dispose donc de sa propre valeur totalement ind pendan
316. suivante Si bool en Alors Blo d instructions Finsi Notez ici que le bool en est la condition Comme indiqu pr c demment la condition peut aussi tre repr sent e par une seule variable Si elle contient 0 elle repr sente le bool en FAUX sinon le bool en VRAI ENI Editions All rigths reserved Que se passe t il si la condition est vraie Le bloc d instructions situ apr s le Alors est ex cut Sa taille le nombre d instructions n a aucune importance de une ligne n lignes sans limite Dans le cas contraire le programme continue l instruction suivant le FinSi L exemple suivant montre comment obtenir la valeur absolue d un nombre avec cette m thode PROGRAMME ABS VAR Nombre entier DEBUT nombre 15 Si nombre lt 0 Alors nombre nombre FinsSi Afficher nombre FIN En PHP c est le if qui doit tre utilis avec l expression bool enne entre parenth ses La syntaxe est celle ci if boolean code Si le code PHP ne tient que sur une ligne les accolades peuvent tre supprim es comme dans l exemple de la valeur absolue Cet exemple montre une seconde possibilit par les m canismes offerts par les biblioth ques de fonction de PHP lt html gt lt head gt lt meta gt lt title gt ABS lt title gt lt head gt lt body gt lt php nombre 15 if nombre lt 0 nombre nombre echo nombre echo lt br gt seconde possibilitit Snombre2 32 nombre
317. sur element FinStruct Cette d claration initiale du type structur element contient un pointeur pSuiv pour Pointeur sur Suivant sur une structure du m me type Par d faut il est initialis la valeur NIL il n y a pas encore d enregistrement suivant Que pouvez vous faire de cette structure Tout d abord vous d placer d un l ment un autre de la liste Pour cela il suffit de partir du premier l ment et de r cup rer en boucle le pointeur de l l ment suivant jusqu tomber sur NIL Quelles sont les op rations l mentaires possibles sur une liste e Cr er une liste c est cr er le premier enregistrement celui de t te qui permettra d acc der aux autres e Parcourir une liste c est balayer tous les l ments un par un jusqu au dernier e Rechercher un l ment dans la liste soit indiquer s il existe soit retourner un pointeur vers sa position e Ajouter un l ment n importe o dans la liste au d but au milieu la fin Une fonction d ajout pourrait aussi reprendre la premi re op ration de cr ation de liste e Supprimer un l ment n importe o dans la liste e Supprimer la liste Toutes ces actions peuvent se faire au travers de sous programmes rendant l usage de la liste beaucoup plus simple Pour se rapprocher des langages fonctionnels les sous programmes devant le plus souvent retourner un pointeur vers un l ment de la liste Une derni re chose le premier l ment de la li
318. t lt body gt lt php if lisset _GET a ENI Editions All rigths reserved E y ax xtbc c lt br gt lt form method GET gt a lt input type text size 4 name a gt lt br gt b lt input type text size 4 name b gt lt br gt c lt input type text size 4 name c gt lt br gt lt input type submit name 0K gt lt br gt lt form gt lt php lse Sa _GET a b _GET b c _GET c Sdelta b Sb 4 a Sc if S Sdelta gt 0 xl S Sb sqrt Sdelta 2 a x2 S Sb sqrt Sdelta 2 a echo Deux solutions echo xl x1l echo x2 x2 else if delta 0 xi b 2 a echo Une seule solution xl x1 else echo Pas de solution gt lt body gt lt html gt l 5 Choix multiples Si les tests imbriqu s facilitent parfois la vie ils deviennent parfois trop lourds lorsque le nombre de tests devient trop important Certains langages ont trouv une int ressante parade ce probl me en proposant des structures de tests selon que telle expression est vraie ou telle autre et ainsi de suite Au lieu de faire des Si imbriqu s ou des SinonSi il suffit alors d indiquer quoi faire quand telle ou telle valeur est rencontr e En algorithmique cela se traduit par la pseudo instruction Selon que Selon que Conditi n 1 bloe 1 Condition 2 bloc 2 Condition n bloc n Sinon bloc final Fin Selon U
319. t le microprocesseur Le microprocesseur de votre ordinateur est une puce facilement reconnaissable car c est souvent la plus grosse celle qui dispose du plus de pattes et est g n ralement surmont e d un gros bloc d aluminium ou de cuivre accompagn d un ventilateur pour le refroidir Il contient l UAL l UC et divers autres organes des registres sp cialis s donn es compteurs adresses tats etc un s quenceur qui synchronise tous les composants une horloge interne une unit d entr e sortie qui g re la communication avec la m moire ne pas confondre avec l E S des p riph riques clavier cran etc Le microprocesseur dispose selon son mod le d un jeu ensemble d instructions pr d fini S il tait tout seul le microprocesseur ne pourrait pas faire grand chose Au sein de l architecture de Von Neumann seuls sont ENI Editions All rigths reserved repr sent s les composants logiques de base Autour de ce sch ma logique se raccordent bien d autres organes lectroniques comme les contr leurs Ces puces lectroniques qu on appelle aussi parfois chipsets sont aussi des sortes de microprocesseurs qui disposent souvent d un jeu d instructions pour les contr ler justement Ces instructions sont souvent moins nombreuses et pas g n ralistes Les contr leurs ont un r le pr cis selon leur genre g rer un certain type de p riph rique ex un contr leur de carte graphique un contr leur pour les disques durs e
320. t tre compos e plusieurs expressions sont li es entre elles l aide d un op rateur bool en ventuellement regroup es avec des parenth ses pour en modifier la priorit a 1 OU b 3 6 ET c gt 10 est une expression tout fait valable Celle ci sera vraie si chacun de ses composants respecte les conditions impos es Cette expression est vraie si a vaut 1 et c est sup rieur 10 ou si b vaut 2 2 3 6 et c est sup rieur 10 Reprenez l algorithme du pr c dent chapitre qui calcule les deux r sultats possibles d une quation du second degr L nonc simplifi disait que pour des raisons pratiques seul le cas o l quation a deux solutions fonctionne Autrement dit l algorithme n est pas faux dans ce cas de figure mais il est incomplet Il manque des conditions pour tester la valeur du d terminant celui ci est il positif n gatif ou nul Et dans ces cas que faire et comment le faire Imaginez un second algorithme permettant de se rendre d un point A un point B Vous n allez pas le faire ici r ellement car c est quelque chose de tr s complexe sur un r seau routier important De nombreux sites Internet vous proposent d tablir un trajet avec des indications C est le r sultat qui est int ressant Les indications sont simples allez tout droit tournez droite au prochain carrefour faites trois kilom tres et au rond point prenez la troisi me sortie direction B Dans la plupart des cas si vous suivez c
321. t FinTantQue Afficher resultat FIN Ce qui donne en PHP lt html gt lt head gt lt meta gt lt title gt Factorielle lt title gt lt head gt lt body gt lt php if lisset _GET cpt gt lt form method GET gt Factorielle de lt input type text size 4 name cpt gt lt input type submit name 0K gt lt form gt lt php t else Scpt _GET cpt l resultat cpt while Scpt gt 2 Scpt Sresultat resultat Scpt echo resultat gt lt body gt lt html gt c x la puissance y Il s agit cette fois d lever une valeur une puissance quelconque Pour rappel x est gal x x x x n fois C est donc tr s simple une boucle Tant Que qui va compter de 1 n dans laquelle le r sultat de la multiplication pr c dente va tre multipli par x PROGRAMME puissance VAR x n cpt resultat entiers DEBUT Afficher x n 7 Saisir x n cpt l resultat 1 Tant que cpt lt n Faire resultat resultat x cpt cpt l FinTantQue Afficher resultat FIN Cet algorithme fonctionne bien mais ne g re pas tous les cas En fait il fonctionne uniquement si la puissance est sup rieure ou gale z ro Si n vaut z ro le programme ne rentre m me pas dans la boucle et le r sultat vaut 1 Si n vaut 1 resultat vaut x Et pour les puissances n gatives x est gal 1 x Il s agit donc de d terminer le signe de la puissance et de faire une division Il fau
322. t php function tableau amp tab tab 1 12345 t array 2 7 9 10 11 14 17 18 20 22 copie amp t echo t 2 lt br gt n Scopiel 2 5 echo S t 2 lt br gt n tableau t echo S t 1 lt br gt n gt lt body gt lt html gt Vous reconnaissez l un des exemples du chapitre Les tableaux et structures Il lui a t ajout une fonction tableau qui prend comme param tre un tableau d entiers Le tableau t est pass en param tre de la fonction tableau Dans cette fonction le param tre est modifi l indice 1 du tableau tab re oit la nouvelle valeur 12345 Apr s la fin de la fonction le programme r affiche le contenu de l indice 1 du tableau pass en param tre il contient 12345 ENI Editions All rigths reserved En PHP tous les objets sont affect s et pass s en r f rence aux fonctions Par contre tous les types simples si on peut parler de types en PHP parlez plut t de scalaires sont affect s et pass s en copie Vous pouvez forcer le passage en r f rence en ajoutant un amp devant la variable dans la d claration de la fonction ou l affectation C est vous de faire tr s attention lorsque vous modifiez le contenu de ces types de variables dans la fonction Il est possible de d clarer certains types classiques comme des objets pour faire r agir PHP comme Java notamment avec les tableaux que Java consid re comme des objets Java consid re tous les types com
323. t aussi r cup rer la valeur absolue de la puissance ce que vous savez d j faire Dans l algorithme suivant un drapeau signe est utilis pour savoir si n est n gatif ou non afin d effectuer une division la fin Variables x n signe cpt resultat en Num rique D but ENI Editions All rigths reserved Signe 0 Ecrire x n 7 Lire x n Si n lt 0 Alors Signe l ne n FinsI cpt 1l resultat 1 Tant que cpt lt n Faire resultat resultat x cpt cpt l FinTantQue Si signe 1 Alors Resultat 1 resultat Finsi Ecrire resultat Fin Ce qui donne en PHP lt html gt lt head gt lt meta gt lt title gt Factorielle lt title gt lt head gt lt body gt lt php if lisset _GET x gt lt form method GET gt x y lt input type text size 4 name x gt amp nbsp lt input type text size 4 name y gt lt input type submit name OK gt lt form gt lt php pelse x _GET x n _GET y if n lt 0 n n signe true cpt 1 Sresultat 1 while cpt lt n resultat resultat x Scpt if signe resultat 1 resultat echo resultat gt lt body gt lt html gt d Toutes les tables de multiplication Tout comme les tests il est tout fait possible d imbriquer les boucles c est dire de mettre une boucle dans une autre boucle sur autant de niveaux que vous le souhaitez Vous pouvez envisager 1 2 3 n niveaux
324. t de Jean Yves Girard aux ditions Seuil Collection Points Sciences L informatique n est pas le seul domaine d application de la machine Elle permet de d terminer la complexit d un algorithme si quelque chose peut vraiment tre calcul a des domaines d applications dans la physique et notamment l optique etc Vous pouvez simuler une machine de Turing sur votre ordinateur via plusieurs langages dont un appel Brainf ck ENI Editions All rigths reserved tat action associ e selon la valeur de la case Ruban infini m moire T te de lecture criture Exemple de machine de Turing 3 Repr sentation interne des instructions et des donn es a Le binaire quoi ressemblent les instructions et les donn es valeurs utilis es r ellement par l ordinateur Celui ci ne comprend qu une chose des chiffres Si l tre humain a invent des repr sentations pratiques des chiffres avec le syst me d cimal soit une notation en base 10 en allant de z ro neuf un ordinateur ne manipule que deux valeurs 0 ou 1 En effet si vous pouviez tr s fortement agrandir un circuit int gr vous verriez que celui ci est compos de nombreuses pistes dans lesquelles passe un courant lectrique Dans ces circuits il n y a que deux possibilit s soit le courant passe et dans ce cas cela quivaut une valeur de un 1 soit le courant ne passe pas et dans ce cas c est la valeur z ro 0 qui est retenue C est du binaire qui
325. t ex cution de bytecode Java Pour impl menter vos algorithmes il vous faut trouver un langage simple de haut niveau g n raliste mais vous permettant d voluer vers des applications complexes et compl tes Il ne faut pas que vous ayez passer par des tapes longues et complexes de compilation et il faut que le langage propose une ouverture vers d autres langages Dans un esprit d ouverture et de compatibilit il serait int ressant que ce langage ne soit pas disponible uniquement sous Windows et que si possible le programme r sultant puisse fonctionner sur plusieurs syst mes d exploitation sans avoir le modifier ni le recompiler Plusieurs langages pourraient convenir Le mieux est de choisir un langage interpr t le PHP 4 PHP a Les avantages PHP PHP Hypertext Preprocessor dispose de toutes les qualit s n cessaires Il est disponible sur la plupart des architectures et syst mes d exploitation PHP est l origine un langage de script HTML ex cut du c t du serveur mais c est aussi un langage complet disposant de nombreuses fonctionnalit s lui permettant de faire fonctionner des programmes depuis la ligne de commande ou depuis un bureau Il est notamment possible de concevoir des applications graphiques compl tes en PHP directement sans passer par du HTML Sa syntaxe est largement inspir e du langage C de Java et de Perl avec des am liorations sp cifiques Le but initial du langage tait d crire r
326. t ref Fab1234 art 2 article echo art2 gt ref lt br gt n echo art2 gt fab gt ref lt br gt n 2 gt lt body gt lt html gt 10 ENI Editions All rigths reserved d Le pi ge en PHP En PHP il faut faire tr s attention quand vous passez une r f rence en param tre vous pouvez modifier le contenu de la r f rence et ce contenu sera modifi directement dans la zone m moire c est parfait Mais vous ne pouvez pas modifier la r f rence elle m me Si vous modifiez au sein d une m thode la valeur de la r f rence elle m me elle retrouve sa valeur initiale en sortie Par exemple class element public valeur function modif pl S p2 pl p2 Si dans le programme principal vous avez pl new element p2 new element pl gt valeur 10 p2 gt valeur 15 modif p1 p2 echo pl gt valeur La sortie sera 10 En effet dans la m thode modif pi contient bien la r f rence vers l emplacement m moire de l objet p1 mais la variable p1 est elle m me locale la m thode Donc en affectant p2 p1 p1 re oit la r f rence de p2 mais la nouvelle valeur est perdue la sortie de modif Il faut donc proc der ainsi function modif p1 p2 pl gt valeur p2 gt valeur Cette fois c est le contenu des valeurs dans la zone m moire r f renc e qui est affect et vous obtenez le r sultat attendu e La valeur null Il se peut que vous
327. t vous finiriez soit par vous lasser d une criture trop complexe soit cela prendrait trop de place C est pourquoi il faut utiliser une syntaxe pr cise et concise Commentaires ce programme affiche bonjour PROGRAMME HelloWorld D clarations variables constantes types etc VAR de entier valeur entier ENI Editions All rigths reserved D but du programme DEBUT de al atoire 6 valeur 0 Tant que valeurde Faire Lire valeur FinTantQue Afficher Bravo FIN Si vous comprenez d j le programme ci dessus alors cet ouvrage vous sera encore plus agr able lire Sinon la suite vous donnera de toute fa on toutes les explications n cessaires la compr hension de chaque ligne de cet algorithme Il reprend de mani re tr s d taill e toutes les tapes suivre Sous cette forme il est presque possible d impl menter l algorithme ligne ligne dans un langage de programmation volu C est sous cette forme textuelle que les algorithmes seront repr sent s dans ce livre Ce texte programme ou pseudo code algorithmique est d compos en plusieurs parties e Le nom du programme qui n am ne pas de commentaires particuliers situ apr s le mot PROGRAMME e Une zone de d claration des donn es utilis es par le programmes variables constantes types structures tableaux etc Si la signification de ces mots vous chappe ceux ci seront expliqu s au fur et mesure des diff rents chap
328. taient tous livr s soit avec un langage BASIC inclus directement dans la machine en ROM soit sur une cartouche cassette ou disquette annexe Le Basic de Microsoft Qbasic Quickbasic tait livr avec le DOS du PC Les Amstrad avaient le basic Locomotive les Atari ST l Atari Basic et surtout le GFA Basic un langage de grande classe etc Une g n ration compl te d utilisateurs s est lanc e dans la programmation l aide de ces langages et de la documentation fournie qui bien souvent fournissait non seulement les r f rences du langage mais aussi les m thodes de base de programmation Avec plus ou moins de succ s Le r sultat tait souvent un inf me bidouillage mais qui marchait Or le but n est pas que le programme fonctionne mais qu il fonctionne vite et bien bref le mieux possible Le meilleur ordinateur au monde et le meilleur langage au monde ne vous y aideront pas 2 D finition l algorithme est une recette Avez vous d j eu l occasion de programmer un magn toscope en voie de disparition ou un enregistreur de dvd Qu avez vous fait la premi re fois que vous avez allum votre poste de t l vision pour r gler la r ception des cha nes Nul doute que vous avez ouvert le mode d emploi et suivi la s quence d instructions indiqu e appuyer sur la touche Menu de la t l commande se d placer sur Enregistrement et appuyer sur OK se d placer sur une ligne puis indiquer la cha ne l heure etc Avez vous d j eu
329. tatiques son ex cution a comme r sultat direct l affichage d une page HTML qu il a mis en forme Le SQL est un langage de base de donn es il permet de g rer des enregistrements de donn es Le Javascript est un langage qui permet de programmer des pages web dynamiques du c t du navigateur web tandis que le PHP bien que devenu g n raliste ou ASP permettent de programmer des sites web dynamiques mais cette fois du c t du serveur Certains langages peuvent faire appel d autres langages Vous pouvez parfaitement faire du SQL dans du PHP si votre site doit acc der une base de donn es c Compil ou interpr t Une autre distinction prendre en compte est la diff rence entre un langage interpr t et un langage compil Un langage est dit compil quand le programme source sous forme de texte est tout d abord lu et trait par un autre programme appel compilateur qui le convertit en langage machine directement compr hensible par l ordinateur Vous tapez votre programme vous lancez la commande de compilation et enfin vous obtenez un fichier ex cutable un exe sous Windows par exemple que vous pouvez le cas ch ant lancer comme n importe quel autre programme en langage machine Un programme en langage interpr t n cessite pour fonctionner un interpr te ou interpr teur qui est un autre programme qui va traduire directement au fur et mesure de son ex cution votre programme en langage machine un peu comme
330. tc ou de transfert de donn es ex les contr leurs des bus de m moire et de donn es les contr leurs USB PCI etc Tous ces composants sont int gr s sur un circuit imprim principal appel la carte m re Arithmetic Logical Unit CONTROL UNIT OUTPUT Architecture de Von Neumann Pour r sumer l architecture de Von Neumann est simple comprendre et r partit les fonctionnalit s d un ordinateur en quatre entit s logiques Ces entit s logiques se retrouvent pour deux d entre elles UC et UAL dans le microprocesseur Les autres et les composants additionnels se retrouvent sur la carte m re ou sur les cartes d extension la m moire n est plus soud e sur une carte m re mais fournie sous forme de carte additionnelle appel e barrette le contr leur E S graphique est sur une carte graphique additionnelle reli e un bus PCI AGP ou PCI E Les programmes sont ex cut s par le microprocesseur qui est aid dans le sens o celui ci acc de aux fonctions propos es par divers contr leurs Les microprocesseurs actuels sont tr s complexes Il n est pas rare de trouver au sein de ceux ci plusieurs UAL pour acc l rer les traitements De m me on trouve souvent une m moire interm diaire appel e m moire cache ou ant m moire celle ci tant souvent sp cialis e une m moire cache pour les instructions et une autre pour les donn es 2 La machine de Turing Avant m me l apparition des premiers vrais ordi
331. te de celle du m me attribut d un autre objet Pourtant il peut y avoir des cas o vous voudrez partager un attribut commun tous les objets de ce type de classe Le cas d cole est celui o vous voulez conna tre le nombre de fois o la classe a t instanci e Dans le cas de la classe Ecran vous voudriez par exemple savoir combien d objets de type Ecran ont t cr s Pour cela l attribut doit tre commun tous les objets et chaque objet doit pouvoir modifier la valeur de cet attribut valeur qui sera ensuite la m me pour tous les objets C est le r le de l attribut statique Un attribut statique est un attribut qui n est cr qu en un seul exemplaire et qui est commun tous les objets de la classe Vous le d clarez comme n importe quel attribut sauf que vous lui ajoutez le mot cl statique apr s son type L attribut statique peut tre priv ou public Il peut tre important d initialiser une valeur par d faut pour un attribut statique Classe Ecran attributs priv s nb_ecrans 0 entier statique FinClasse Plut t que d utiliser this pour y acc der vous utilisez le nom de la classe elle m me tant depuis l ext rieur de l objet si l attribut est public que de l int rieur L exemple suivant montre les possibilit s associ es avec deux objets le constructeur ajoute 1 le destructeur soustrait 1 Les tapes interm diaires affichent l tat de l attribut statique nb_ecrans Classe Ecran attri
332. tement la bonne position dans la partie du tableau d j tri e On proc de en trois tapes e On place l l ment trier dans une variable temporaire e Tant que les l ments du tableau qui pr c dent l l ment trier lui sont sup rieurs on d cale ces l ments d une position en r cup rant l espace vide laiss par l l ment trier e On ins re ensuite la variable temporaire la nouvelle position laiss e vacante par le d calage Voici les diff rentes tapes pour le tableau exemple e tape 1 le deuxi me l ment 17 est plac dans une variable temporaire qui est compar e aux l ments qui le pr c dent Chacun est d cal tant qu il est sup rieur l l ment trier s pps Re Es PE eoa 17 en temporaire D calage de 48 17 la nouvelle position e tape 2 25 est compar aux l ments qui le pr c dent et chacun est d cal jusqu ce que l l ment ne soit plus sup rieur au troisi me o fe E e e CREER Pen 25 en temporaire D calage de 48 25 la nouvelle position e tape 3 9 est compar aux l ments qui le pr c dent Ici comme dans l tape 1 on s arr te forc ment au premier l ment 9 en temporaire D calage de 17 25 et 48 9 la nouvelle position e tape 4 34 est compar aux l ments qui le pr c dent Seul 48 lui est sup rieur ENI Editions All rigths reserved SIDE 9 17 25 48 9 17 25 48 34 en temporaire i D calage de
333. tes l aide d un pointeur Prenez une cha ne bonjour Chaque caract re occupe un octet et en m moire la cha ne se termine par un caract re nul En C une cha ne de caract res est en fait un tableau de caract res l l ment d indice 0 contenant le premier caract re l l ment d indice 1 le second etc jusqu au dernier l ment contenant le caract re nul de fin de cha ne Placez un pointeur sur le premier l ment du tableau Si vous incr mentez le pointeur de 1 vous vous d placez de la longueur d un caract re en m moire vous vous trouvez sur le second caract re et ainsi de suite O Ajouter 1 un pointeur ne d place pas forc ment l adresse de un octet en m moire mais de la longueur du type du pointeur Si vous ajoutez 1 un pointeur de type long vous ajoutez quatre octets l adresse l aide de ce principe il devient tr s simple de calculer la longueur d une cha ne de caract res en C tant que la valeur contenue l adresse du pointeur n est pas nulle vous incr mentez de 1 le pointeur Ce qui donne char chainel bonjour un tableau de caract res une cha ne char p_c un pointeur de type caract re int n va contenir le nombre de caract res le pointeur p_c contient l adresse du premier l ment p_c amp chaine 0 tant que p_c ne contient pas 0 nul while p_c 0 p_c on d cale d un char l adresse n t on incr mente le compteur
334. tez que l adresse de la variable i correspond maintenant exactement au contenu du pointeur p_i Le pointeur p_i pointe sur la variable i dont il contient l adresse Mais que faire de ce pointeur Le pointeur sert m moriser l adresse l emplacement m moire d une autre variable Les utilisations sont multiples et la suite du chapitre vous proposera deux applications des pointeurs listes cha n es et arbres binaires En attendant depuis un pointeur vous pouvez aussi acc der au contenu de la variable point e Il suffit tant l affichage qu l affectation d ajouter une toile avant son nom Que provoque en C la ligne suivante printf Contenu de la variable point e via p_i d n p_i L affichage du contenu pr sent l adresse point e donc le contenu de la variable point e Contenu de la variable point e via p_i 123456 Le fait d acc der au contenu de la variable point e s appelle d r f rencer un pointeur Avec ce syst me il est possible de manipuler les variables et les pointeurs dans tous les sens Si vous modifiez le contenu de la variable point e l adresse du pointeur n est pas modifi e mais son d r f rencement affichera la nouvelle valeur R ciproquement vous pouvez modifier la valeur de la variable point e en passant par son pointeur avec l toile devant ENI Editions All rigths reserved 92 modification de la valeur de la variable point e par p_i p_i 987654 printf i contient m
335. tier DEBUT minenotes 1 max notes 1 moy 0 Pour i de 1 10 faire Moy moy tnotelil Si note i gt max Alors Maxenote i FinSi Si note i lt min Alors Minenote i FinSi FinPour Moy moy 10 Afficher min max moy Fin En PHP lt html gt lt head gt lt meta gt lt title gt Min max moy lt title gt lt head gt lt body gt lt php Snotes array 10 20 14 11 17 8 10 12 15 5 16 19 2 6 0 min notes 0 max notes 0 moy 0 for i 0 i lt count notes S Sitr moy notes i if notes i gt max max notes i if notes i lt min min notes i moy count notes echo min max moy 2e lt body gt lt html gt 2 ENI Editions All rigths reserved 3 Le morpion Le jeu du morpion ou tic tac toe consiste aligner des ronds ou des croix en ligne colonne ou diagonale sur un plateau de 3x3 cases Le premier joueur qui aligne ses pions a gagn Sans cr er ici une intelligence artificielle pour jouer l algorithme va demander chaque joueur tour de r le d indiquer les coordonn es x ligne et y colonne o mettre son pion puis va d terminer si le joueur gagne ou non Cet algorithme est un peu plus compliqu qu il n y para t e Le tableau dispose de deux dimensions 3x3 e Il faut au sein d une boucle permuter les joueurs e Si une position est d j occup e il faut de nouveau poser la question e Apr s chaque coup il faut v rifier toutes les li
336. tion cree_liste2 pointeur sur element Var pTete pEncours pPrec pointeurs sur element v Entier D but ler l ment pTete nouveau element Afficher Valeur du premier l ment Saisir pTete valeur Le premier l ment est le pr c dent de l l ment suivant pPrec pTete R p ter Afficher Valeur suivante 0 sortie 7 Saisir v Si v lt gt 0 Alors Allocation du nouvel l ment pEncours nouveau element pEncours valeur v ENI Editions All rigths reserved Cha nage pEncours est le suivant de pPrec pPrec pSuiv pEncours pPrec pEncours Finsi Jusqu v 0 Fin de liste pSuiv NIL pPrec pSuiv e NIL Retourne pTete FinFonc c Parcours de la liste Le parcours de la liste est maintenant possible puisque la fonction pr c dente vous a permis de remplir quelques enregistrements Comme toujours on part du pointeur de t te puis on passe d enregistrement en enregistrement jusqu rencontrer la valeur NIL La fonction parcours_liste re oit comme argument le pointeur de t te Une simple boucle va ensuite balayer toute la liste et afficher toutes les valeurs qui y sont contenues Fonction parcours_liste pTete pointeur sur element Var pEncours pointeur sur l ment D but pEncours pTete Tant que pEncours lt gt NIL Faire Afficher pEncours valeur pEncours pEncours pSuiv FinTantQue FinFonc d Recherche Deux types de sous programmes sont possibles le premier d termine si l
337. tion des fichiers r indexation suppression des lignes listes cha n es etc en passant probablement par des fichiers temporaires ou tout charger en m moire puis r crire seulement les bonnes valeurs ENI Editions All rigths reserved Fichier texte s quentiel 1 Ouvrir et fermer un fichier Vous devez tout d abord d clarer le nom logique du fichier la variable qui permettra associ e au fichier de travailler avec Ceci se place comme d habitude dans la section Var Vous indiquez ensuite le type d acc s s quentiel direct index etc Notez qu en acc s direct vous pouvez aussi travailler en mode s quentiel VAR fic fichier s quentiel Vous devez ensuite ouvrir le fichier en associant nom logique et nom du fichier avec le mode d ouverture souhait Ceci s effectue avec l instruction Ouvrir Ouvrir toto txt dans fic en lecture Vous trouverez aussi parfois cette syntaxe sous forme de fonction plus proche de certains langages fic Ouvrir toto txt lecture La premi re syntaxe est souvent pr f rable en algorithmique Pour fermer un fichier utilisez l instruction Fermer suivie du nom logique du fichier Fermer fic Il existe aussi une syntaxe fonctionnelle mais les m mes remarques s appliquent utilisez la premi re en cas de doute Fermer fic Ne placez pas le nom du fichier dans les instructions de lecture criture et de fermeture Le programme ne conna t pas le nom du fichier mai
338. tion m moire de vos variables et cha nes En Java ou encore en PHP non plus ces langages disposent de m canismes appel s ramasse miettes qui le font pour vous Mais en C par exemple ce serait vous de d clarer votre variable de mani re ce que son contenu puisse contenir jusqu 13 octets en d clarant en fait 13 cases m moires d un octet Voici la m thode dite statique char textel 13 ou encore la m thode dynamique char texte malloc 13 sizeof char Ce n est pas tout En effet avec cette derni re syntaxe le malheur veut que outre cette t che complexe d allocation m moire vous deviez lib rer vous m me la m moire sinon votre programme continuera consommer celle ci jusqu la fin de son ex cution Mais ce syst me de gestion de la m moire est il vraiment un inconv nient Prenez en compte ces quelques all gations e La gestion de la m moire de mani re dynamique n cessite une connaissance avanc e de la taille des Variables utilis es de la quantit de m moire n cessaire et de la m moire physique de la machine e L acc s la m moire passe par l utilisation de variables particuli res appel es pointeurs car elles ne repr sentent pas une valeur mais l adresse d une case Une fois ma tris es celles ci se r v lent tre tr s puissantes et pratiques e L allocation dynamique permet d utiliser uniquement la quantit de m moire n cessaire un instant donn C est certes insignifiant
339. tion trim restaurera son tat d origine Il est probable que votre langage de programmation propose une fonction qui remplit toute seule les morceaux manquants des fois il s agit m me de l instruction d criture le fprintf du C le fait tr s bien En attendant vous pouvez programmer vous m me cette fonction algorithmique Elle ressemble fortement la proc dure RepeteCar Appelez la Formate Elle prendra comme param tre le champ de l enregistrement et la longueur attendue Elle retournera ce m me champ mais reformat soit coup la bonne longueur soit avec des espaces ajout s la fin Fonction Formate champ cha ne longueur entier entier Var nbspaces len entiers D but len longueur champ Si len gt longueur Alors champ gauche cha ne longueur Sinon nbspaces longueur len Tant que nbspaces lt gt 0 Faire champ champ amp nbspaces nbspaces 1 FinTantQue FinSi Retourne champ FinFonct Quelques formalismes algorithmiques autorisent parfois de pr ciser l avance une longueur de cha ne la d claration de la variable Var login cha ne de 8 caract res Cela laisse entendre que vous n avez plus vous soucier que la cha ne soit trop courte ou trop longue C est vrai dans l algorithme mais attention dans un vrai langage Le langage COBOL anciennement au programme du BTS tait un r gal ce niveau mais en C ou en Java la taille n est pas pr cis e La fonction Formate fait bien votre
340. total duree gt heures 3600 duree gt minutes 60 duree gt secondes return Stotal function sec _to_hms nbsec Sduree new hms duree gt heures int nbsec 3600 nbsec nbsec 3600 duree gt minutes int nbsec 60 duree gt secondes nbsec 60 return duree exemple 1 nb_secondes 39450 Sheures sec_to_hms nb_secondes echo heures gt heures Sheures gt minutes heures gt secondes lt br gt exemple 2 nb_secondes1 3950 nb_secondes 2 hms_to_sec sec_to_hms nb_secondesl echo nb_secondes2 lt br gt rh lt body gt lt html gt d Petite application fonctionnelle Pour finir ces deux fonctions sont plus pratiques qu il n y para t Gr ce elles vous pouvez tr s facilement trouver le temps coul entre une premi re heure et une seconde heure Le principe est des plus simples e Vous saisissez deux horaires dans des enregistrements hms e Vous les convertissez en nombre de secondes e Vous faites la diff rence entre ces deux nombres e Vous convertissez le r sultat en enregistrement hms Dit comme ceci cela pourrait sembler un peu compliqu si les fonctions n existaient pas Vous avez donc besoin de la d finition du type structur hms et des deux fonctions nbsec to hms et hms to nbsec Vous n avez m me pas besoin de variables pour y placer les nombres de secondes Une seule ligne avec les bons param tres suffit s en passer voyez celle en gras T
341. ts t1 5 10 254 Pour initialiser le contenu d un tableau avec des valeurs pr d finies comme pour un tableau une dimension utilisez la fonction array Seulement ici vous devez imbriquer plusieurs niveaux un niveau par dimension comme ceci tl array 0 gt array 10 17 8 9 10 20 13 11 7 5 0 0 0 9 1 gt 9 14 2 0 18 10 16 19 18 6 7 7 1 0 1 9 2 5 17 8 9 7 10 1 11 14 11 Ji 2 0 2 6 La taille de chaque dimension d un tableau peut tre r cup r e avec la fonction count Cependant attention vous n obtiendrez pas le nombre total d l ments de tout le tableau mais pour chaque dimension L exemple suivant met ceci en lumi re pour un tableau deux dimensions Pour obtenir le nombre d l ments de chaque dimension r cup rez la fonction count pour chacune de ces dimensions La seconde partie de l exemple fait appel a une structure it rative propre au PHP foreach Son r le est de boucler sur chaque l ment du tableau du premier au dernier et d en isoler tant l index que la valeur Ici la valeur est un tableau puisque la seconde dimension d un l ment donn d un tableau deux dimensions est elle m me un tableau d une dimension lt html gt lt head gt lt meta gt lt title gt 2 dimensions lt title gt lt head gt lt body gt lt php total 0 St array 0 gt array a b c d 1 gt array Meri MEN Tgm MR MEN 2 gt array MM Tk TI mr ane oniy echo count t lt br gt
342. ttendrez que le t l phone arr te de sonner or ci dessus vous le faites quand m me Donc la table ci dessus n est pas correcte Une ligne est fausse Voici la bonne table ENI Editions All rigths reserved 9 10 Trouver l expression minimale La difficult consiste maintenant trouver comment depuis cette table de v rit d finir une expression bool enne qui retourne VRAI Vous constatez que seules quatre lignes de la table de v rit sont vraies c est dire que la personne va vraiment d crocher Le r sultat est 1 quand a b et c valent Vous pouvez aussi crire que d est vrai quand a b c 0 0 1 ou 0 1 1 ou 1 1 0 ou 1 1 1 Convertissez cet nonc en expression bool enne d 8 b ctrr8 b crs brc a b c Il est int ressant de remarquer que les deux premiers termes de l expression peuvent tre factoris s par a c et les deux derniers par a b selon la propri t de distributivit Le r sultat devient donc d a c b b a b c c De m me comme la propri t de compl mentarit indique que a a 1 les expressions b b et c c sont toujours vraies Elles peuvent tre supprim es Le r sultat final devient d a c a b Ce n est malheureusement pas toujours aussi vident Avec quatre cinq six termes les expressions deviennent beaucoup plus longues et complexes Il faut toujours chercher faire au plus simple avec le moins de termes et de variables possibles quitte
343. ty et effectuera de nombreux travaux sur les quations diff rentielles 4 L alg bre a tablir une communication George Boole a d velopp l alg bre qui porte son nom Il est utilis en math matique logique lectronique et informatique Il permet d effectuer des op rations sur les variables logiques Comme son nom l indique il permet d utiliser des techniques alg briques pour traiter ces variables logiques Prenez la phrase suivante absolument logique Une proposition peut tre vraie OU fausse mais ne peut pas tre vraie ET fausse Autrement dit une variable logique ne dispose que d un seul tat un moment donn vrai ou faux En prenant plusieurs propositions on peut appliquer entre elles des formules alg briques La premi re utilisation de cet alg bre l a t pour l tablissement de communications t l phoniques via la commutation t l phonique mise en place par Claude Shannon Prenez cet exemple simple de mise en place d une communication t l phonique entre deux interlocuteurs Une communication n cessite la fois un metteur qui met l appel et un r cepteur celui qui d croche On a donc Communication Emetteur ET r cepteur La communication est tablie si l metteur appelle et que le r cepteur d croche En d autres termes Communication est VRAIE si Emetteur est VRAI et r cepteur est VRAI Dans les autres cas la communication ne s tablira pas et sera donc FAUX Si vous appelez quelqu un
344. u pr sent volontairement tronqu s de la plupart de leurs fonctionnalit s Or comme tout objet la variable qui re oit un objet en re oit une r f rence Vous avez d j utilis ce principe sans le savoir toujours dans le chapitre Les tableaux et structures avec les structures tfabricant et tarticle Cet exemple est bien plus int ressant qu il n y para t vous le voyez probablement maintenant avec un il neuf puisque chaque d claration d une variable enregistrement de ces types est en fait une r f rence sur l enregistrement e article est une r f rence sur une structure un objet de type tarticle e article contenant une variable de type tfabricant on cr e dedans une r f rence fab sur un objet de ce type e art2 de type tarticle re oit la r f rence de article Ils r f rencent le m me enregistrement e Le contenu des champs de art2 est affich c est le m me que article Si vous modifiez les champs la modification se r percute sur toutes les r f rences sur cet enregistrement c est le m me pour tous lt html gt lt head gt lt meta gt lt title gt R f rence structures lt title gt lt head gt lt body gt lt php class tfabricant public ref public nom public adresse public tel class tarticle public ref public libelle public Sprix public fab Sarticle new tarticle Sarticle gt ref Art001 O1 Sarticle gt fab new tfabricant Sarticle gt fab g
345. u pour des usages diff rents et souvent sp cifiques bien qu en voluant la plupart des langages dits de haut niveau soient devenus de plus en plus g n ralistes Il existe plusieurs classifications des langages La plus ancienne d pend de l affinit du langage par rapport la machine On parle alors du niveau du langage Il est courant de parler d un langage de bas niveau ou de niveau z ro 0 quand celui ci n cessite des connaissances approfondies du fonctionnement de votre ordinateur m canismes de gestion de la m moire instructions du microprocesseur etc Un exemple de langage de tr s bas niveau est le langage machine sous sa forme binaire o de le la programmation en assembleur o ces m mes valeurs binaires sont repr sent es par des mots mn moniques en anglais Vu que les programmes sont directement compr hensibles par le mat riel vos programmes seraient alors les plus rapides Il est tout fait possible de programmer de grosses applications en assembleur et notamment des jeux c tait d ailleurs tr s courant jusqu l apparition des machines tr s rapides o leur vitesse a compens une plus faible vitesse d ex cution d un langage plus volu comme le C mais avec l avantage d une programmation plus simple l oppos des langages de bas niveau se trouvent les langages de haut niveau Il n y a pas d chelle pr cise Vous pourrez trouver dans quelques sources des niveaux allant de 0 4 mais les langages vol
346. uant tellement vite certains langages qui taient consid r s de haut niveau comme le C se sont vus d class s vers le bas Un langage de haut niveau permet de faire une abstraction presque compl te du fonctionnement interne de votre ordinateur Le langage ou plut t son compilateur ou son interpr teur se chargera de convertir vos ordres simples en apparence en langage de bas niveau en langage machine Ne vous fiez pas aux apparences l affichage d une ENI Editions All rigths reserved bo te de dialogue prend une ligne de langage de haut niveau mais des centaines en assembleur Parmi les langages de tr s haut niveau se trouvent Java C le PHP ou m me le C en faisant abstraction de certains m canismes L inconv nient d un langage de haut niveau est qu il n est pas toujours possible d aller dans les d tails les plus fins b Diverses classifications c t des niveaux tous les langages n ont pas le m me but Il n est pas possible de comparer le langage HTML dont le r le est de formater des pages web et le Visual Basic qui permet un d veloppement rapide d applications graphiques C est pourquoi il existe d autres classifications dont voici un bref chantillon e g n raliste ou sp cialis objet ou proc dural e typ ou non typ cf chapitre Les variables et op rateurs e interpr t ou compil e etc Certains langages sont sp cialis s Le HTML est sp cialis dans la conception de pages web s
347. ule dimension Soit un tableau note 1 3 1 5 deux dimensions qui repr sentent quinze valeurs Voici comment ceci pourrait tre repr sent en m moire nu as as us ue Le Fees ba fa fo fe Le EURE hp ht e e e e e e La premi re ligne repr sente l adresse de la case m moire associ e aux diff rents indices du tableau Cette valeur est bien entendu enti rement arbitraire et est connue du langage mettant en uvre le tableau La deuxi me ligne repr sente les indices des diff rents l ments du tableau Remarquez que dans cette repr sentation on commence par la premi re dimension puis par la deuxi me etc Un tableau n dimensions peut donc tre repr sent de mani re totalement lin aire Il est pratique en d butant de se repr senter un tableau deux dimensions en termes de lignes et de colonnes Mais cette vue de l esprit est totalement fausse la m moire en tant que telle ne peut tre repr sent e ainsi elle est lin aire le fameux ruban Un tableau s tale donc lin airement dans la m moire d une mani re ou d une autre Cette derni re remarque est sujette caution comme vous le verrez un peu plus bas Dans le cas du tableau deux dimensions comment un langage utilisant ce principe peut conna tre la position exacte d un l ment en m moire Soit e m la position connue du premier l ment e x l indice de la premi re dimension moins 1 e y l indice de la seconde dimension moin
348. un pour chaque caract re Les guillemets vitent les erreurs d interpr tation 2 Ne pas confondre le nom de la variable avec son contenu notamment lors d une affectation Ainsi quand vous affecterez un valeur une variable si celle ci est entre guillemets vous lui affecterez une cha ne de caract res si c est un nombre ce sera ce nombre sachant que le nom d une variable ne peut pas tre constitu uniquement de chiffres et enfin si ce n est ni une cha ne ni un chiffre c est une variable Dans ce cas la premi re variable recevra comme valeur celle de la seconde qui lui est affect e Ne pas respecter ce principe est une cause d erreur grave et n anmoins commune En PHP une variable n tant pas typ e vous lui affectez une cha ne directement Il est int ressant de savoir qu il est possible de concat ner deux cha nes avec le C est un op rateur Ils sont tudi s la section Op rateurs et Calculs de ce chapitre L exemple suivant contient deux affectations et affiche le r sultat concat n lt html gt lt head gt lt meta gt lt title gt Chaines de caract res lt title gt lt head gt lt body gt lt php texte Hello World text2 Bonjour les amis Stexte texte stext2 echo texte 2 gt lt body gt lt ntmi gt d Le type bool en Pour d terminer si une affirmation est vraie ou fausse l ordinateur doit se baser sur le r sultat de cette affirmation En informatique on emp
349. un seul sens et depuis un l ment vous ne pouvez pas retourner au pr c dent Une premi re m thode consisterait conserver l adresse de chaque l ment pr c dent ce qui serait possible avec l utilisation de fonctions r cursives mais ce serait tr s lourd L autre possibilit consiste utiliser des listes doublement cha n es chaque l ment ne contient non plus un seul pointeur mais deux un pour l l ment suivant un autre pour l l ment pr c dent Ainsi vous pouvez vous d placer dans les deux sens dans la liste soit vers la queue fin soit vers la t te Ces listes sont dites bilat res Les traitements doivent tre adapt s en cons quence Prenez le probl me l envers vous avez deux pointeurs mettre jour Si vous savez le faire dans un sens comme les listes simples vous savez le faire dans l autre vous changez juste de sens Il y a donc deux fois plus d op rations de cha nage Cha nage avant e pPrec psSuiv pNouveau e pNouveau pSuiv pSuivant Cha nage arri re e pSuivant pPrec pNouveau e pNouveau pPrec pPrec Les listes bilat res peuvent aussi tre circulaires et ou tri es d Files et piles Dans une file d attente dans un magasin un cin ma bref dans une queue le premier arriv est le premier servi En anglais cela se traduit par First In First Out soit FIFO en abr g ENI Editions All rigths reserved Une file d attente de type FIFO peut tre repr s
350. un vrai interpr te qui dans une interview traduit simultan ment l anglais en fran ais Le programme est souvent un fichier texte et l interpr te analyse la syntaxe de celui ci avant de le d rouler dynamiquement Un programme interpr t sera plus lent qu un langage compil cause de la conversion dynamique du programme alors que cette tape est d j effectu e l avance avec un langage compil Au contraire la correction des erreurs est plus simple avec un langage interpr t Comme la correction et le r sultat sont imm diats l interpr te va vite vous indiquer au cours de l ex cution o se trouve l erreur de syntaxe mais pas de logique lorsqu il va la rencontrer quelle ligne l instruction en cause ventuellement une aide suppl mentaire Alors qu avec un compilateur c est au moment de la compilation souvent longue qu apparaissent les erreurs Une fois compil d autres erreurs plus complexes comme les fuites m moire peuvent appara tre mais il devient difficile d en d terminer l origine il faut alors faire appel d autres programmes sp ciaux appel s d buggers ENI Editions All rigths reserved Code Source Compilation Code Objet dition de liens Biblioth ques Code ex cutable tapes de compilation et d dition des liens en C 3 La machine virtuelle Il existe une tape interm diaire entre l interpr t et le compil la machine virtuelle applicative La machine virtue
351. urait pas t pertinent c est correct Puis a re oit la m me chose Or a est un entier Suivant les langages de programmation vous obtiendrez soit une erreur soit cela fonctionnera mais pas parfaitement La variable a tant un entier il se peut que a ne contienne que la valeur enti re de b soit 3 Notez que certains langages autorisent une conversion explicite d un type vers un autre On parle de transtypage Quant la variable c elle doit contenir une cha ne de caract res d limit e par des guillemets absents ici ce qui provoquerait probablement une erreur Le code PHP suivant fonctionne parfaitement le transtypage est accept Il consiste indiquer entre parenth ses avant la valeur affecter le type final de celle ci La valeur sera convertie si possible dans ce type avant d tre affect e Le transtypage vers le bas d un type de grande taille vers une taille r duite risque de provoquer une perte de pr cision voire m me d un grand nombre d informations Dans cet exemple la variable f_a est explicitement convertie en entier PHP ne va donc conserver que la partie enti re de f_a et i_a contiendra 3 lt html gt lt head gt lt meta gt lt title gt Egalit avec transtypage lt title gt lt head gt lt body gt lt php f_a float 3 1415927 i_a int 3 1415927 echo f_a i_a 2 gt lt body gt lt html gt Ce qui retourne 3 1415927 3 Afin de ne pas vous faire taper sur les do
352. ure est en panne nous prendrons le train sinon s il y a gr ve alors nous ferons du stop sinon si tout va mal alors nous resterons la maison C est un peu lourd dit comme cela mais qui n a jamais chafaud des plans douteux devant v rifier plusieurs conditions avec des sc narios de secours Vous retrouverez parfois le m me probl me en programmation Les deux formes de Si ci dessus permettent de s en sortir assur ment mais la syntaxe peut devenir tr s lourde Vous pouvez en effet parfaitement imbriquer vos tests en pla ant des Si en cascade dans les blocs d instructions situ s apr s les Alors et les Sinon Prenez l exemple suivant il faut deviner si un nombre saisi au clavier est proche ou non d une valeur pr d finie Pour le savoir le programme affiche froid ti de chaud ou bouillant suivant l cart entre la valeur saisie et celle pr d finie Cet cart est calcul avec une simple soustraction puis en d terminant sa valeur absolue PROGRAMME IMBRIQUE ENI Editions All rigths reserved VAR nombre saisie ecart entiers DEBUT Nombre 63 Afficher Saisissez une valeur entre 0 et 100 Saisir saisie ecart nombre saisie Si ecart lt 0 Alors Ecart ecart Finsi Si ecart 0 Alors Afficher Bravo Sinon Si ecart lt 5 Alors Afficher Bouillant Sinon Si ecart lt 10 Alors Afficher Chaud Sinon Si ecart lt 15 Alors Afficher Ti de Sinon Afficher Froid Finsi FinSi FinSi FinSi FIN Peut tre trouvez
353. urs_liste pTete ENI Editions All rigths reserved 11 echo Saisir la valeur supprimer v int fgets STDIN SpTete suppr_element v pTete parcours_recursif pTete suppr_liste pTete pi 3 Autres exemples de listes 12 a Listes circulaires Une liste circulaire permet d acc der n importe quel l ment de la liste depuis n importe quel autre l ment sans passer par le pointeur de t te Pour mettre en place ce type de liste il suffit de faire pointer l l ment suivant du dernier l ment sur le pointeur de t te Dans une telle liste les fonctions d ajout et de suppression d l ments sont simplifi es et correspondent aux fonctions d ajout et de suppression au milieu Il y a un petit probl me pour la fonction de recherche qui ne s arr te jamais Il faut donc placer un drapeau pour arr ter la recherche quand on retombe sur l l ment de d part Il suffit de stocker l adresse de d part Si vous retombez dessus c est que vous avez parcouru toute la liste b Listes d l ments tri s Dans ce type de liste les l ments sont plac s selon un ordre d fini par vous m me au sein des valeurs contenues dans les l ments Ainsi vous tes assur de respecter cet ordre lors du parcours de la liste Vous devez adapter la fonction de recherche pour faire respecter cet ordre c Listes doublement cha n es Dans une liste cha n e simple le parcours ne s effectue que dans
354. us auriez plut t int r t mettre Sortir FAUX ou inverser la condition froid ou nu C est vident Mais l ordinateur s en fiche il n a aucun moyen de savoir que vous avez fait une erreur dans vos tests Le programme est math matiquement logique chaque test analys est correct et donc les conditions sont remplies pour passer la variable Sortir VRAI La suite aborde des points th oriques Le but n est pas de vous donner un cours magistral sur l alg bre de Boole mais de vous fournir des bases de compr hension du fonctionnement de la logique vu du c t de l informatique Si vous voulez aller plus loin il existe une litt rature cons quente ce sujet dans les biblioth ques et les librairies par exemple Alg bre de Boole chez Masson S il vous int resse un jour d aller largement au del et d explorer les m canismes de logique et de pens e humaine ou d intelligence artificielle il existe un gros ouvrage de r f rence r f rence de nombreux scientifiques informaticiens etc qui s appelle G del Escher Bach les brins d une guirlande ternelle par Douglas Hofstadter 2 Petites erreurs grosses cons quences Comprenez vous maintenant l importance de la logique formelle et de bien crire les tests et conditions dans un algorithme Pour vous conforter un peu voici deux exemples de programmes mal crits et de leurs d sastreuses cons quences a Ariane 5 Le 4 juin 1996 un bug d un programme de la premi
355. us connaissez les variables Comment affecter une valeur de 1 10 successivement une variable Avec une boucle Et si maintenant vous vouliez cr er l ensemble des tables de multiplication tables de 1 de 2 etc jusqu 10 ou plus Il vous faudra imbriquer deux boucles Si vous voulez calculer une puissance quelconque une factorielle sortir le plus grand des nombres parmi une liste de nombres saisis en attendant les tableaux etc il faudra encore utiliser les boucles Dans le chapitre pr c dent vous avez vu comment calculer les solutions d un polyn me du second degr Et si vous souhaitiez tracer sa courbe graphique via un programme en PHP ou Java par exemple Il vous faudra encore utiliser une boucle et quelques astuces Vous verrez qu avec les boucles vous pourrez m me extraire les racines carr es Ces exemples simples mettent en vidence au moins trois choses e Il existe plusieurs types de boucles certaines ont un nombre fixe d it rations d autres d pendent de ENI Editions All rigths reserved conditions de sortie que vous aurez d finir e Il est possible d imbriquer plusieurs niveaux de boucles vous pouvez faire des boucles dans des boucles autant de fois que vous le voulez e Il existe une quantit infinie d utilisation des boucles qui en font une structure incontournable en programmation pour la moindre des applications un tant soit peu complexe ENI Editions All rigths re
356. utant utiliser un break Au contraire utiliser les breaks tort et travers n est pas recommandable Le tout est de trouver un quilibre entre la condition de sortie et la lisibilit de l algorithme Enfin le but n est pas de cr er des boucles dont le bloc d instructions fait dix pages c est une fa on de parler Dans ce cas il est certes intelligent de r unir toutes les conditions de sortie en un point cela am liore la lisibilit Cependant vous risquez de vous perdre dans votre propre programme d o les indentations Vous apprendrez plus loin dans ce livre la notion de fonctions et de proc dures qui permettront un d coupage fin de vos blocs d instructions 3 Des exemples ENI Editions All rigths reserved a Une table de multiplication Pourquoi ne pas s attaquer aux exemples cit s ci dessus et m me plus pour vous entra ner Commencez par la table de multiplication Apr s avoir saisi le num ro de la table demand e un compteur est initialis 1 Tant que ce compteur est inf rieur ou gal 10 on le multiplie par le num ro de table puis apr s avoir affich le r sultat on l incr mente Dans la derni re boucle le compteur passe de 10 11 Une fois remont au Tant Que l expression devient fausse la boucle est termin e et le programme se termine PROGRAMME MUTLII VAR table cpt resultat entiers DEBUT Afficher Quelle table de multiplication Saisir table cpt l Tant que cpt lt
357. utilis e en algorithmique o on pr f re allouer la m moire l ment par l ment quitte les cha ner ensuite Quand vous allouez dynamiquement de la m moire elle reste occup e tout le temps de l existence du pointeur Sans rien d autre la m moire est r cup r e uniquement la sortie du programme Il est aussi facile d allouer de la m moire que de la lib rer ou de la d sallouer un barbarisme bien utile volont d s que le ou les pointeurs ne sont plus utiles on lib re la m moire associ e c est cela de gagn Pour ceci vous utiliserez la syntaxe suivante Lib rer pointeur Quand vous lib rez le pointeur vous lib rez la zone m moire sur laquelle il pointait zone qui redevient disponible pour toute autre utilisation Attention Si vous avez conserv dans un autre pointeur l adresse de cette zone et que vous l avez d sallou e ce pointeur pointe sur une zone ventuellement r affect e autre chose Y acc der risque de fournir une valeur arbitraire y crire risque d occasionner des probl mes voire des plantages Le mieux est de replacer une valeur NIL apr s la lib ration et de penser tester le pointeur avant de l utiliser Ne d r f rencez jamais un pointeur dont la zone m moire a t lib r e C est une faute malheureusement courante Dans de tr s gros programmes le programmeur oublie parfois de tester la valeur du pointeur avant d y acc der provoquant une fuite m moire aux cons quences
358. uvent vous entendrez parler de s quentiel index le fichier est index mais depuis un index vous pouvez lire successivement tous les enregistrements suivants Les index peuvent tre cha n s dans un sens dans les deux voire tri s etc La notion de cha nage est l un des sujets du prochain chapitre d Autre Un langage comme le COBOL est le roi de la manipulation des fichiers notamment en s quentiel index Il serait plus complexe mais pas infaisable de d coder un fichier MP3 dans ce langage Vous pouvez faire ce que vous voulez d un fichier c est vous qui en d terminez la structure Mieux ou pire selon le ENI Editions All rigths reserved cas le langage de programmation n a que faire du contenu du fichier Si vous demandez au langage C d ouvrir en mode texte un fichier binaire et que vous en lisez successivement les enregistrements il ne bronchera pas sur un gros fichier il trouvera probablement quelques retours la ligne De m me vous pouvez sauter l octet de votre choix dans un fichier texte en lire pile trois octets et c est tout C est vous d impl menter l interpr tation du contenu des fichiers dans le langage vis Quant l index c est une catastrophe PHP C C et Java ne proposent rien de pr d fini C est vous de tout cr er avec les fonctions de bases existantes ENI Editions All rigths reserved Les enregistrements Ce chapitre se concentre sur les fichiers texte D
359. veaux sont complets Il est simplement complet au sens large si tous les niveaux interm diaires sont complets mais qu il manque des feuilles Dans un arbre strictement complet la racine et tous les n uds internes ont exactement n fils ni plus ni moins d Description verticale La hauteur d un arbre est le nombre de n uds du plus long chemin direct la plus longue branche entre la racine et une feuille racine et feuille inclues Si l arbre dispose d une racine de deux fils et qu un des fils a une feuille la hauteur de l arbre est 3 e L arbre binaire Un arbre binaire est un arbre dont chaque n ud a au plus deux fils Depuis la racine l arbre binaire est constitu de deux sous arbres diff renci s le sous arbre droit et le sous arbre gauche Il existe des arbres trois quatre n fils Cependant seuls les arbres binaires seront abord s ici et notamment les arbres binaires ordonn s Le sch ma suivant montre un arbre binaire strictement complet de hauteur 3 ENI Editions All rigths reserved Racine ms Chemin AnayneH Noeuds internes enoscsmenserconemeccescscmemessse eo Arbre binaire ordonn strictement complet de hauteur 3 3 Parcours d un arbre Pour la suite la structure d un n ud d un arbre sera la suivante tant bien compris qu chaque n ud est associ e une valeur sinon l arbre n a aucun int r t et que bien que cette structure ressemble celle d un l ment de liste dou
360. vec votre calculatrice vous n obtiendrez pas ce r sultat car la multiplication a un ordre de priorit plus lev que l addition L ordinateur va d abord faire 4 5 20 puis 3 20 23 Le r sultat est donc 23 Si vous souhaitez indiquer l algorithme et donc ensuite dans un vrai langage une modification des priorit s vous devez utiliser les parenth ses PROGRAMME PRIO2 VAR X Y Z total entier DEBUT xe3 y 4 vA ENG total x y z Afficher total FIN Cette fois vous obtenez le r sultat 3 4 5 ce qui vaut 35 Voici l quivalent en PHP qui regroupe les deux cas lt html gt lt head gt lt meta gt lt title gt Priorites lt title gt lt head gt lt body gt lt php x 3 y 4 z 5 Stotal x y s Sz echo total lt br gt total x y z echo total lt br gt gt ENI Editions All rigths reserved lt body gt lt html gt Voici un simple algorithme pour calculer les r sultats d une quation du second degr Une quation du second degr est de la forme ax bx c 0 Pour r soudre une telle quation il faut calculer un discriminant sous la forme A b 4ac Suivant la valeur du discriminant les r sultats varient e si A gt 0 il y a deux solutions e si A 0 il n y a qu une seule solution e si A lt O l quation n a pas de solution Pour l exemple l algorithme part du principe que l quation est volontairement pos e comme ayant deux solutions Il sera com
361. vent appel s non typ s c est discutable sont d une souplesse incomparable En attendant respectez en algorithmique le fait qu un tableau a en principe un nombre d indices fini et qu ils sont typ s une fois pour toute d D claration En pseudo code algorithmique les tableaux se d clarent au m me endroit que les variables juste avant le d but du traitement lui m me sous cette forme VAR MonTableau tableaul 1 nbelements d entiers MonTab2 tableaul 1 diml l l dim2 de r els Entre les crochets placez le nombre d l ments du tableau Il est possible d initialiser le contenu du tableau sa cr ation comme ceci VAR mois tableaul 1 12 lt janvier d cembre de cha nes Ce m me tableau pourrait tre plac dans la section CONST ce qui en ferait une constante Comme cela sera revu un peu plus loin les indices des tableaux peuvent d marrer 0 ou 1 selon les langages les usages les professeurs etc Il n y a malheureusement pas de r gle pr cise en ce domaine L vidence vis vis de l organisation de la m moire de l ordinateur voudrait que la num rotation d marre z ro cela simplifie les calculs de la position des diff rents l ments du tableau dans la m moire Cependant comment alors comprendre ce tableau Valeurs tableaul 1 10 de r els ENI Editions All rigths reserved Selon les usages si ce tableau repr sente dix valeurs alors e Sila num rotation commence 1 le
362. vous cette syntaxe trop longue et surtout peu lisible Une astuce consiste tracer des traits verticaux allant des Si aux FinSi pour ne pas s y perdre C est d ailleurs recommand par certains professeurs d algorithmique y compris pour les boucles abord es dans un prochain chapitre L algorithme ci dessus est parfaitement valable et d une syntaxe correcte Cependant il est possible de faire plus concis avec la forme suivante Si bool en Alors Bloc d instructions 1 SinonSi bool en Alors Bloc d instruetions 2 SinonSi bool en Alors Bloc d instructions n Sinon Bloc d instruction final FinSi Cette forme est plus propre plus lisible et vite de se m langer les pinceaux De multiples conditions sont test es Si la premi re n est pas vraie on passe la deuxi me puis la troisi me et ainsi de suite jusqu ce qu une condition soit v rifi e Dans le cas contraire c est le bloc d instructions final qui est ex cut Les tests du pr c dent exemple doivent donc tre r crits comme ceci Si ecart 0 Alors Afficher Bravo SinonsSi ecart lt 5 Alors Afficher Bouillant SinonsSi ecart lt 10 Alors Afficher Chaud SinonsSi ecart lt 15 Alors Afficher Ti de Sinon Afficher Froid Finsi Voici le code correspondant en PHP lt html gt lt head gt lt meta gt lt title gt imbrique lt title gt lt head gt lt body gt lt php ENI Editions All rigths reserved if lisset _GET
363. x une fois pour toutes et est en principe invariable bien qu il reste possible de tricher On emploie les structures Tant Que ou R p ter lorsqu on ne conna t pas forc ment l avance le nombre d it rations qui seront n cessaires l obtention du r sultat souhait L exemple le plus concret est repr sent par la saisie des notes on peut en saisir une 200 aucune mais on le sait pas l avance Mais cela peut tre aussi la lecture des lignes d un fichier on n en conna t pas le nombre par avance d enregistrements dans une base de ENI Editions All rigths reserved donn es un calcul complexe devant retourner une pr cision particuli re un nombre de tours dans un jeu le premier qui gagne sort de la boucle etc z 4 Un pi ge viter Tout comme il faut viter les boucles infinies sauf si c est parfaitement volontaire il faut aussi viter quelques erreurs qui peuvent se r v ler tr s surprenantes selon le cas rappelez vous la Loi de Murphy Voici un exemple de ce qu il ne faut pas faire Variable x en Num rique D but Pour x allant de 1 31 Faire Ecrire x xex 2 Fin Pour Fin L erreur sauf si c est ce que vous vouliez explicitement ce qui s appelle jouer avec le feu est de modifier vous m me le compteur utilis par la boucle au sein m me de cette boucle Que se passe t il dans cet exemple Vous passez de 1 2 puis Quoi 3 6 7 14 Ca devient n importe quoi et aucun no
364. ympathiques qui sont souvent utiles pour r duire des calculs bool ens et aussi dans l tablissement des tests et conditions Ce sont en fait les propri t s associ es au contraire NON n gation Prenez la table de v rit suivante Comparez les derni res colonnes et vous obtenez l galit suivante ENI Editions All rigths reserved a b a b Dans les deux cas le r sultat sera VRAI uniquement si a ET b sont FAUX De la m me mani re avec une table de v rit plus compl te Comparez la colonne centrale avec la colonne finale et vous obtenez a b a b Dans les deux cas le r sultat sera VRAI seulement si a OU b sont FAUX g Quelques fonctions logiques Les fonctions logiques ne sont ni des lois ni des th or mes elles se d duisent de ces deux derniers sous forme de formules qui peuvent souvent tre r duites auxquelles on a donn un nom pour les raccourcir et pour plus de pratique Elles sont souvent c bl es en dur au sein des microprocesseurs et propos es par quelques langages de programmation Le OU exclusif XOR Pas de jeu de mots ici rien voir avec la s rie japonaise Dans le OU appel OU inclusif le r sultat est VRAI si a ou b ou les deux sont vrais Dans le O exclusif le r sultat est VRAI seulement si a ou b est vrai mais pas les deux en m me temps Traduisez ceci en alg bre de Boole a O b ET PAS a ET b soit a b a b Si on d veloppe on obti
365. ype Struct hms heures entier minutes entier secondes entier FinStr ct Fonction hms_to_sec duree hms entier Var total entier D but total duree heures 3600 duree minutes 60 duree secondes Retourne total FinFonc ENI Editions All rigths reserved 11 12 Fonction sec_to_hms nbsec entier hms Var duree hms D but duree heures nbsec DIV 3600 nbsec nbsec 3600 duree minutese nbsec DIV 60 duree secondes nbsec 60 Retourne duree FinFonc Programme delta Var heurel heure2 delta hms D but Afficher Saisir l heure de d part Saisir heurel heures heurel minutes heurel secondes Afficher Saisir l heure de fin Saisir heure2 heures heure2 minutes heure2 secondes delta sec_to_hms hms to _ nbsec heure2 hms to nbsec heurel Afficher Il s est coul Afficher delta heures delta minutes delta secondes Fin Pourquoi ne pas aller encore plus loin en cr ant une fonction qui calcule seule la dur e en faisant appel aux deux autres fonctions En effet vous pouvez parfaitement appeler des sous programmes dans d autres sous programmes donc des fonctions dans des fonctions ou des proc dures dans des fonctions et r ciproquement Voici une fonction hms delta qui va calculer tout ceci Fonction hms_delta hms1l hms2 hms hms Var delt hms D but delta nbsec_to_hms hms_to_nbsec hms2 hms to _nbsec hmsl Retourne delta FinFonc Le programme principal est modifi comme ceci Programme delta Var heurel

Download Pdf Manuals

image

Related Search

T teams tiktok translate target twitch telegram twitter turbotax temu teams login ticketmaster t-mobile tradingview teamviewer typing test tcu football target login timer traductor toyota torzon darknet tubi tv translate google tiktok login tinkercad

Related Contents

    MANUAL 7216-7-8.indd  www.lacristaleria.com www.lacristaleria.com  1 - Brother  Topfield v2.0 User's Manual  Manual for FST-81x - PLANET Technology Corporation.  Brochure  UPS WEB/SNMP MANAGER CS121 Series  Spitz 6R  

Copyright © All rights reserved.
Failed to retrieve file