198
Directeur de publication : Serge Bergamelli Les cours du Cned sont strictement réservés à l’usage privé de leurs destinataires et ne sont pas destinés à une utilisation collective. Les personnes qui s’en serviraient pour d’autres usages, qui en feraient une reproduction intégrale ou partielle, une traduction sans le consentement du Cned, s’exposeraient à des poursuites judiciaires et aux sanctions pénales prévues par le Code de la propriété intellectuelle. Les reproductions par reprographie de livres et de périodiques protégés contenues dans cet ouvrage sont effectuées par le Cned avec l’autorisation du Centre français d’exploitation du droit de copie (20, rue des Grands Augustins, 75006 Paris). BTS Services informatiques aux organisations 1 re année Élisabeth Martins Da Silva Bases de la programmation Cours

Base de Programmation Cours

Embed Size (px)

DESCRIPTION

cours d'algorithme

Citation preview

  • Directeur de publication: Serge Bergamelli

    Les cours du Cned sont strictement rservs lusage priv de leurs destinataires et ne sont pas destins une utilisation collective. Les personnes qui sen serviraient pour dautres usages, qui en feraient une reproduction intgrale ou partielle, une traduction sans le consentement du Cned, sexposeraient des poursuites judiciaires et aux sanctions pnales prvues par le Code de la proprit intellectuelle. Les reproductions par reprographie de livres et de priodiques protgs contenues dans cet ouvrage sont effectues par le Cned avec lautorisation du Centre franais dexploitation du droit de copie (20, rue des Grands Augustins, 75006 Paris).

    BTS Services informatiques aux organisations 1re anne

    lisabeth Martins Da Silva

    Bases de la programmation

    Cours

  • Sommaire

    Conseils gnraux 3

    Squence 1: Programmation procdurale 5

    Squence 2: Programmation vnementielle 97

    Squence 3: Initiation la programmation objet 127

    Corrigs des exercices 145

  • 8 2944 TG PA 00

    Page 3

    Conseils gnrauxImportance du cours pour lexamenCe cours est fondamental car il permet dacqurir les bases indispensables dans le domaine du dveloppement dapplications. Il est abord au premier semestre de la pre-mire anne, donc il concerne les deux options. Mme si ce cours est particulirement important pour les tudiants qui vont choisir loption SLAM (Solutions Logicielles et Applications Mtiers), il nest pas ngliger par les tudiants qui vont choisir loption SISR (Solutions dInfrastructure, Systmes et Rseaux). En effet, les bases de la programmation sont essentielles, mme dans le cadre de configurations de rseaux.Au niveau de lexamen, lpreuve crite U5 "Production et fourniture de services" comportera une partie sur les notions de programmation : cette partie sera bien sr plus importante pour loption SLAM. Lpreuve technique U4 "Conception et mainte-nance de solutions informatiques" sera, pour loption SLAM, une dmonstration des capacits acquises entre autres dans ce cours. Enfin, en ce qui concerne lpreuve orale U6 "Parcours de professionnalisation", l encore, en particulier pour loption SLAM, lutilisation professionnelle des notions acquises sera primordiale. Pour l'option SISR, les preuves U4 et U6 peuvent tre loccasion de montrer aussi des capacits en program-mation, toujours apprciables dans ce domaine.

    Organisation du coursLe cours est divis en 3 squences qui doivent tre traites dans lordre. Mme si vous avez des connaissances en programmation, il est conseill de suivre chaque squence pour acqurir les bonnes mthodes qui seront utiles pour lexamen.Les squences sont ponctues d'exercices : chaque exercice est trs important pour contrler le niveau d'acquisition des notions abordes. Donc ne faites pas d'impasse.De mme, vous tes rgulirement invit aller raliser un TP sur machine: ces TP se trouvent dans le fascicule de TP correspondant ce cours. Ne ngigez pas les TP qui reprsentent l'occasion de coder et ainsi d'acqurir des connaissances pratiques impor-tantes.Squence 1 : Programmation procdurale. Vous allez tre initi aux fondements de la programmation travers lapprentissage du raisonnement algorithmique et la mise en pratique sous C++ en mode console.Squence 2 : Programmation vnementielle. Vous allez dcouvrir la programmation dans un environnement graphique avec la gestion des vnements. La mise en pratique sera sous Visual Basic 6.Squence 3: Initiation la programmation objet. Vous allez apprendre manipuler les concepts fondamentaux de la programmation objet, avec une mise en pratique sous C#.Le choix des langages nest pas anodin : le C++ est la rfrence inconteste, le Visual Basic 6 est ancien mais cest le plus simple et donc le plus adapt pour dcouvrir la pro-grammation vnementielle, et enfin le C# est actuellement un des langages les plus utiliss et cest aussi un langage "tout objet".Enfin, vous trouverez en fin de fascicule une squence d'autocorrection contenant la correction de tous les exercices.

    Outils utiliss dans ce cours et le fascicule TP correspondant travers ce cours et aussi le fascicule de TP, vous allez travailler avec trois langages dif-frents. Voici comment rcuprer et installer les diffrents langages.

  • 8 2944 TG PA 00

    Page 4

    C++Le but est de rcuprer ce fichier: eclipsecpppack-0.1.zipVous l'avez normalement en tlchargement sur le site du CNED, dans la partie corres-pondant ce cours. Si pour une raison quelconque, vous ne le trouvez pas, faites une rapide recherche sur internet partir de ce nom.Si vous avez l'habitude de travailler avec un autre IDE, faites comme vous voulez mais attention, certaines explications sont spcifiques cet IDE.Une fois le fichier rcupr, il n'y a rien installer: il suffit de le dzipper puis de lancer Eclipse.bat qui se trouve dans le dossier. Sur la page d'accueil, lors du premier lancement, cliquez sur le rond qui contient une flche, droite. Vous accdez la zone de travail d'Eclipse. Voil c'est termin.

    Visual Basic 6Vous avez, avec le cned, accs un abonnement tudiant msdnaa qui vous permet de rcuprer plusieurs logiciels dont Visual Basic 6. Aprs votre inscription vous allez rece-voir un mail contenant tous les lments dactivation de cet abonnement. Si ce nest pas le cas, veuillez en faire la demande en utilisant la rubrique contact du site de votre BTS.Une fois le logiciel rcupr, vous devez l'installer avant de l'utiliser.

    C#Comme Visual Basic 6, vous trouverez C# dans Visual Studio que vous pourrez aussi rcu-prer avec l'abonnement msdnaa.Le logiciel doit aussi tre install.

    DevoirsVous avez raliser 2 devoirs: le premier est faire lissue de la squence 1 et donc ne porte que sur la programmation procdurale, le second est faire la fin du cours et porte sur la programmation vnementielle et la programmation objet.

    Bon courage tous.

  • 8 2944 TG PA 00

    Page 5

    Squence 1

    Programmationprocdurale

    Squence 1

    Programmation procduraleLa programmation procdurale regroupe l'ensemble des notions de base de la pro-grammation dun ordinateur. Ces concepts vont vous permettre dcrire vos premiers programmes en mode console (donc non graphique) mais vont reprsenter aussi les fon-dements pour pouvoir ensuite passer la programmation graphique, dans la prochaine squence.

    PrrequisAucune connaissance pralable nest ncessaire pour aborder ce cours.

    Capacits attendues en fin de squenceAvoir acquis les connaissances lies la programmation procdurale : struc-tures de base (affectation, saisie, affichage, alternatives, itrations), variables simples, tableaux et modules paramtrs.

    Contenu1. Votre premier programme .............................................................................. 6

    2. Logique algorithmique .................................................................................. 22

    3. Tableaux ......................................................................................................... 49

    4. Modules et paramtres ................................................................................. 65

    5. ......................................................................................................................... 94 Synthse

  • 8 2944 TG PA 00

    Page 6

    Squence 1

    Programmationprocdurale

    1. Votre premier programmeAvant d'apprendre les bases de la programmation, vous allez dcouvrir travers un premier exemple le monde du dveloppement. Soyez attentif toutes les explications donnes: le but n'est pas de retenir par cur ce qui est prsent mais de comprendre le principe gnral de la logique de programmation.

    1A. Qu'est-ce qu'un programme?

    Les programmes sont partoutUn programme est un ensemble dordres crits dans un langage convertissable afin dtre excut par la machine.Quand vous lancez un programme, lordinateur se contente de faire exactement ce qui lui est demand de faire, en excutant un par un les ordres contenus dans le programme.Ralisez bien qu chaque fois que vous utilisez un ordinateur, vous utilisez un ou plusieurs programmes. Un ordinateur sans programme ne fait rien. Il a besoin de pro-grammes excuter pour offrir des fonctionnalits. Quand vous ouvrez un traitement de texte, quand vous utilisez internet, quand vous jouez, chaque fois vous lancez des programmes. Ces programmes ont t crits par des programmeurs. Jusqu maintenant, vous avez t utilisateur de programmes crits par dautres. Avec ce cours, vous allez apprendre passer dans le monde des programmeurs en crant vos propres programmes.

    Excution d'un programmeEn qualit dutilisateur, vous savez excuter un programme : il suffit par exemple de double cliquer sur un fichier, ou de passer par une option dun menu.En ralit, ds le dmarrage de lordinateur, un premier programme se lance automati-quement: cest le systme dexploitation. Il y a quelques annes, les systmes dexploita-tion taient non graphiques et il fallait connatre les commandes textuelles du systme pour savoir, entre autres, excuter un programme. Depuis, les systmes dexploitation ont beaucoup volu et offrent un environnement graphique intuitif qui permet nette-ment plus facilement dexcuter diffrents programmes. Plusieurs programmes peuvent mme tre lancs simultanment.Mais que se passe-t-il quand vous demandez lexcution dun programme (par exemple en double cliquant sur une icne)?

    tapes de vie d'un programmeLorsque vous demandez dexcuter un programme (par exemple en demandant douvrir un traitement de texte), un fichier, contenant le programme, est excut par le systme dexploitation. Ce fichier possde un format particulier et contient un programme crit normalement en langage machine.Si vous tentez douvrir ce fichier avec par exemple un diteur, vous narriverez pas com-prendre son contenu qui sera un ensemble de caractres fantaisistes. En fait, un fichier excutable contient du code crit en binaire (une succession de 0 et de 1).Pourquoi ce codage? Car lordinateur est compos de circuits lectriques qui ne peuvent avoir que 2 tats: ouvert ou ferm (donc laissant passer le signal lectrique ou bloquant ce signal). Comme chaque circuit ne peut avoir que 2 tats, on code ces 2 tats sous forme de 0 et de 1. Inutile de rentrer plus en dtail sur ce fonctionnement: le but est juste que vous compreniez mieux le principe.Vous vous doutez bien que les programmeurs ncrivent pas leurs programmes en binaire. Alors, comment a marche ? Sachant que lordinateur nest capable de com-prendre que le binaire...

  • 8 2944 TG PA 00

    Page 7

    Squence 1

    Programmationprocdurale

    En fait le programmeur va crire son programme dans une syntaxe nettement plus accessible: cest ce quon appelle un langage volu. La question qui vient alors natu-rellement l'esprit : lordinateur ne comprenant que le binaire, comment fait-il pour comprendre un programme crit dans un langage volu ? Eh bien tout simplement il ne le comprend pas: il faut quun autre programme traduise le programme crit en langage volu, dans le langage machine. Voici un schma pour essayer dexpliquer le fonctionnement:

    programme crit en langage

    volu

    compilation programme crit en langage

    machine

    excution rsultatde

    l'excution

    Un programmeur va crire un programme dans un langage volu (C++, C#, Java, PHP, javascript, Delphi, Windev...). Une fois le programme crit, il faut utiliser un programme spcifique (gnralement appel un compilateur) pour traduire le programme en langage machine.Une fois le programme traduit en langage machine, il est possible de lexcuter : la machine comprend les ordres contenus dans le programme.En ralit, les choses sont un peu plus complexes, mais cette explication est suffisante pour comprendre le principe global.

    1B. Exemple de programme en C++Vous allez dcouvrir un tout premier programme simpliste qui permet de jouer au jeu du nombre cach, en mode console (donc pas dans un environnement graphique : a viendra plus tard).

    But du programmeUn premier utilisateur va saisir une valeur puis passe la main un second utilisateur qui, ne connaissant pas cette valeur, doit la deviner en saisissant plusieurs essais successifs. chaque essai, un message saffiche pour lui dire si lessai est trop grand ou trop petit par rapport la valeur de dpart. Le jeu sarrte quand la bonne valeur est trouve. Le programme affiche alors le nombre dessais pour arriver trouver la bonne valeur.

    Code en C++Voici le code du programme dans le plus connu des langages volus: le C++.

  • 8 2944 TG PA 00

    Page 8

    Squence 1

    Programmationprocdurale

    /* Jeu du nombre cach * auteur: Emds * date: 27/04/2011 */

    //--- bibliothques ncessaires ---#include // pour le printf et scanf#include // pour le getch#include // pour le system("cls")

    //--- programme principal ---int main () {

    // dclarations int valeur, essai, nbre = 1;

    // saisie du nombre chercher printf("Entrez le nombre \x85 chercher ="); scanf("%d",&valeur); system("cls");

    // boucle sur la saisie des essais printf("Entrez un essai ="); scanf("%d",&essai); while (essai != valeur) { if (essai > valeur) { printf("trop grand !"); }else{ printf("trop petit !"); } printf("\nEntrez un nouvel essai ="); scanf("%d",&essai); nbre++; }

    // rsultat printf("Vous avez trouv\x82 en %d essais", nbre);

    getch(); return 0;}

    En voyant ce code, il est tout fait naturel que vous ne compreniez rien ou pas grand chose (sauf si vous savez dj coder). Il y a tout de mme quelques phrases en franais, mais surtout des instructions obscures avec certains termes en anglais.

    Ce code, une fois compil, va donner un code machine que lordinateur va pouvoir excuter. Pour que ce soit plus comprhensible, partir de maintenant on ne fera plus mention du code machine et on va ragir comme si le code volu tait directement excut. Donc, voyons ensemble, tape par tape, ce que lordinateur va faire en ex-cutant ce code.

  • 8 2944 TG PA 00

    Page 9

    Squence 1

    Programmationprocdurale

    Environnement dexcutionPour excuter un code, lordinateur utilise son microprocesseur (la zone qui s'occupe des calculs et des tests), sa mmoire centrale et les priphriques ncessaires avec, en tout premier, le clavier et lcran. Avec le clavier, lutilisateur peut saisir des informations. Avec lcran, lutilisateur peut visualiser des messages. La mmoire centrale offre des tas de petites cases qui peuvent stocker temporairement des informations.Voyons donc ce qui se passe au niveau de la mmoire, de la saisie et de laffichage au fur et mesure de lexcution du programme.

    Analyse de l'excutionVoyons tape par tape comment lordinateur excute le code. Il prend les lignes tout simplement dans l'ordre (sauf quelques exceptions qui seront abordes plus loin).

    /* Jeu du nombre cach * auteur: Emds * date: 27/04/2011 */

    Cette premire partie est crite en clair. C'est ce qu'on appelle un commentaire. tout moment, il est possible d'ajouter des commentaires dans le code, pour expliquer cer-tains points. Les commentaires ne sont pas obligatoires et la machine n'en tient pas du tout compte, mais ils sont fortement conseills pour que le programme soit facilement comprhensible par un autre programmeur... ou par le programmeur lui-mme ! Car parfois, en se replongeant dans un programme que l'on a crit, certains aspects ne nous paraissent plus trs clairs.

    Traditionnellement, un programme commence par une "cartouche": c'est un commen-taire de plusieurs lignes mis en dbut de programme pour donner les informations de base, du genre le titre, l'auteur, la date de cration.

    Chaque langage utilise des syntaxes spcifiques. En C++, les commentaires peuvent se noter de 2 faons:

    entre /* et */: le commentaire peut tre sur plusieurs lignes; aprs //: le reste de la ligne est un commentaire.

    //--- bibliothques ncessaires ---#include // pour le printf et scanf#include // pour le getch#include // pour le system("cls")

    Vous remarquez au passage les commentaires prsents dans cette partie: un en dbut de bloc pour expliquer ce que reprsente ce bloc de code, un par ligne pour expliquer clairement chaque ligne de code. Vous verrez plus loin qu'il n'y a pas systmatiquement un commentaire par ligne. C'est mme assez rare. Ici, le commentaire est bien utile car il explique chaque "include".

    L'instruction include permet d'intgrer dans un programme des bibliothques d'autres programmes offrant des fonctionnalits qui sont donc dj codes. Ici, 3 bibliothques sont utilises: une pour grer les saisies et affichages (instructions printf et scanf), une autre pour grer la saisie d'un seul caractre sans valider (getch) et une dernire pour grer l'effacement de l'cran (system("cls")).

  • 8 2944 TG PA 00

    Page 10

    Squence 1

    Programmationprocdurale

    //--- programme principal ---int main () {

    Cette fois c'est le programme principal qui dmarre. L'excution relle des ordres d'un programme commence toujours dans le programme principal. Pourquoi cette syntaxe particulire?

    main: en anglais cela signifie "principal". Un programme peut tre constitu de diff-rentes parties, appeles "modules" qui peuvent interagir. Le module principal, donc le premier s'excuter, s'appelle obligatoirement "main" (bien videmment, on est ici tou-jours dans la syntaxe C++: on verra d'autres syntaxes avec d'autres langages plus tard).

    () : les parenthses sont vides mais pourraient contenir des informations qui viennent de l'extrieur du programme. Dans ce cours d'initiation, elles resteront toujours vides.

    int : chaque "module", donc cela concerne aussi le "main", peut retourner une infor-mation, c'est--dire donner un rsultat final sous forme d'une valeur. Il faut donc pr-ciser le type de cette valeur ("int" reprsente le type "entier" donc un nombre entier). Traditionnellement le "main" est cens retourner un entier. On intgrera donc un retour d'une valeur entire en fin de programme, sans pour autant s'en proccuper vraiment car, dans ce cours d'initiation, on n'exploitera pas cette valeur retourne.

    {: enfin l'accolade dmarre le bloc qui concerne le "main". Donc, tout ce qui va tre mis entre cette accolade ouvrante et l'accolade fermante qui est la fin du programme fera partie du "main".

    // dclarations int valeur, essai, nbre = 1;

    Un programme a gnralement besoin de mmoriser des informations afin de les exploi-ter. C'est la mmoire centrale qui est sollicite. Pour cela, il est possible de donner un nom chaque case de la mmoire centrale et affecter une valeur chaque case nomme.

    Ici, 3 cases sont rserves. Elles porteront les noms de "valeur", "essai" et "nombre". Les noms donns aux variables sont libres mais doivent tout de mme respecter les rgles suivantes:

    ne pas commencer par un chiffre; ne pas contenir d'espace; contenir uniquement des caractres alphabtiques, ventuellement des chiffres et

    le caractre "_"; viter les caractres accentus (plusieurs langages n'apprcient pas).

    Gnralement, les noms des variables sont choisis pour tre le plus parlantes possible, donc bien reprsenter le contenu.Dans ce programme, voici le rle que va jouer chaque variable:

    valeur: elle contiendra la valeur d'origine qu'il faut trouver; essai: elle contiendra les diffrents essais pour trouver la valeur d'origine; nbre: elle contiendra le nombre d'essais pour trouver la valeur d'origine.

    Remarquez le "int" en dbut de ligne: cela signifie que les 3 variables sont de type "int" donc elles contiendront des valeurs numriques entires.Remarquez aussi le "= 1" la fin: cela signifie que la variable "nbre" est initialise 1, donc la valeur 1 est affecte dans la case mmoire qui porte le nom "nbre".

  • 8 2944 TG PA 00

    Page 11

    Squence 1

    Programmationprocdurale

    Le ";" en fin de ligne marque la fin d'un ordre envoy l'ordinateur. On appelle ces ordres, des "instructions".Pour le moment, l'excution du programme n'affiche rien mais la mmoire centrale a dj t sollicite:

    // saisie du nombre chercher printf("Entrez le nombre \x85 chercher ="); scanf("%d",&valeur);

    printf : est une fonction dj crite, accessible grce l'include stdio mis en dbut de programme, et permettant d'afficher une information l'cran. Le texte mis entre guillemets s'affiche. Le "\x85" est juste un cas particulier: les accents n'tant pas direc-tement compris par le compilateur, il existe des codes spcifiques pour chaque caractre accentu. Ici , le code reprsente le caractre "". Pour le moment, ne vous proccupez pas trop de ces problmes d'encodage.

    scanf : est aussi une fonction dj crite et provenant de stdio. Cette fonction attend que l'utilisateur saisisse une information au clavier puis, une fois l'information saisie et la touche "entre" utilise, l'information est transfre en mmoire centrale dans la case dont le nom est prcis (ici, c'est dans "valeur"). Quelques remarques syntaxiques propres ce langage: il faut mettre & devant le nom de la variable (pour accder son adresse) et "%d" indique le type de l'information saisie (d comme dcimal, donc num-rique).

    Imaginons que, lors de l'excution du programme, la personne saisisse 37 puis utilise la touche "entre". Voil o en sont l'affichage cran et le contenu de la mmoire cen-trale:

    system("cls");

    Cette instruction permet juste d'effacer l'cran. La fonction est accessible suite l'include de stdlib.

    L'cran tant effac, le second joueur peut commencer tenter de deviner le nombre chercher.

    cran mmoire centrale

    valeur

    essai

    nbre 1

    cran mmoire centrale

    Entrez le nombre chercher = 37 valeur 37

    essai

    nbre 1

  • 8 2944 TG PA 00

    Page 12

    Squence 1

    Programmationprocdurale

    // boucle sur la saisie des essais printf("Entrez un essai ="); scanf("%d",&essai);

    Le commentaire parle de "boucle" mais en ralit la boucle n'a pas encore commenc. Vous comprendrez dans quelques instants ce qu'est une boucle.

    Ici, il y a un nouvel affichage pour le second joueur qui vient de s'installer sur l'ordina-teur. Cet affichage invite le second joueur saisir un essai. Juste aprs l'affichage, vous retrouvez "scanf" qui permet d'attendre que l'utilisateur ait saisi une information. Le programme reste en attente tant que la saisie n'est pas faite.

    Une fois la saisie effectue et valide, l'information est transfre en mmoire centrale dans la case nomme "essai". Imaginons ici que le second joueur a saisi 50.

    while (essai != valeur) {

    La traduction en franais de cette instruction est: "tant que essai est diffrent de valeur." Le signe "!=" reprsente le "diffrent". Vous remarquez aussi qu'une accolade s'ouvre. Cela signifie que plusieurs lignes de code, jusqu' la fermeture de l'accolade, vont tre concernes par cet ordre. Voil les lignes concernes:

    while (essai != valeur) { if (essai > valeur) { printf("trop grand !"); }else{ printf("trop petit !"); } printf("\nEntrez un nouvel essai ="); scanf("%d",&essai); nbre++; }

    Comment va ragir l'ordinateur? Il va comparer le contenu de "essai" avec le contenu de "valeur". Si les 2 informations sont diffrentes, alors il va excuter les ordres qui sont dans le "while" donc entre les 2 accolades, puis il va remonter au niveau du "while" pour nouveau comparer "essai" avec "valeur". Cet ordre "while" est appel une "boucle" ou "itration" car l'ordinateur va boucler sur plusieurs instructions tant que la condition de dpart est vrifie.

    Ici, pour le moment "essai" contient 50 et "valeur" contient 37. Les 2 informations sont bien diffrentes donc on "entre" dans la boucle pour y excuter les instructions.

    cran mmoire centrale

    Entrez un essai = 50 valeur 37

    essai 50

    nbre 1

  • 8 2944 TG PA 00

    Page 13

    Squence 1

    Programmationprocdurale

    Le contenu de la boucle commence par un test:

    if (essai > valeur) { printf("trop grand !"); }else{ printf("trop petit !"); }

    Ce test se traduit par : "si essai est suprieur valeur". C'est ce que l'on appelle une "condition" ou une "alternative". Encore une fois, une accolade suit l'instruction et annonce un bloc d'instructions qui s'excuteront uniquement si le test est vrai: cette par-tie est appele la partie "alors". Ici, le bloc d'instruction se limite une seule instruction:

    printf("trop grand !");

    Cet affichage ne sera excut que si le test est vrifi (essai > valeur). Dans le cas contraire, c'est le bloc d'instructions qui suit le "else" qui est excut : partie appele "sinon". Ici, ce sera l'instruction:

    printf("trop petit !");

    Actuellement, valeur contient 37 et essai contient 50. Donc le test est vrifi (essai est plus grand que valeur). On obtient l'affichage suivant:

    Les lignes de code suivantes sont ensuite excutes:

    printf("\nEntrez un nouvel essai ="); scanf("%d",&essai);

    Vous connaissez dj ces instructions : un message va s'afficher puis l'ordinateur va attendre une saisie de la part de l'utilisateur. Ne vous proccupez pas du "\n": c'est un caractre spcial qui permet juste d'obtenir un retour la ligne dans l'affichage. Imaginons que cette fois l'utilisateur saisisse 25. Aprs ces lignes de code et cette saisie, voici l'tat de l'cran et de la mmoire:

    Remarquez bien que la nouvelle valeur saisie (25) a cras l'ancienne valeur (50) qui se trouvait dans la case "essai".

    cran mmoire centrale

    Entrez un essai = 50

    trop grand !

    valeur 37

    essai 50

    nbre 1

    cran mmoire centrale

    Entrez un essai = 50

    trop grand !

    Entrez un nouvel essai = 25

    valeur 37

    essai 25

    nbre 1

  • 8 2944 TG PA 00

    Page 14

    Squence 1

    Programmationprocdurale

    Vous vous demandez peut-tre: pourquoi cette nouvelle saisie alors que juste avant le while, on avait dj fait une saisie d'un essai? Parce qu'il faut raliser bien sr plusieurs saisies et celle avant le while ne s'excutera qu'une fois puisqu'elle n'est pas dans la boucle. Alors que la saisie dans la boucle va s'excuter plusieurs fois. Du coup vous vous posez juste titre peut-tre une autre question : pourquoi alors avoir mis une saisie avant la boucle puisqu'il y en a une dans la boucle qui va se rpter plusieurs fois? Parce que ds le dbut de la boucle, on teste si la saisie de l'essai correspond la valeur cher-che. Donc avant mme de rentrer dans la boucle, il faut bien avoir quelque chose dans "essai" pour faire le test. D'o cette toute premire saisie avant la boucle. Cette notion est classique et trs importante comprendre.

    Continuons l'excution. Voici la dernire instruction qui se trouve dans la boucle:

    nbre++;

    C'est un raccourci d'criture qui correspond cette ligne de code:

    nbre = nbre + 1;

    Les 2 lignes sont quivalentes. Cette instruction permet d'ajouter 1 la valeur contenue dans la case "nbre". Comme la variable "nbre" contenait 1, elle passe 2 (1+1). On dit que la variable est "incrmente". Voici l'tat de la mmoire aprs cette instruction.

    Que se passe-t-il maintenant ? Que va faire l'ordinateur ? N'oubliez pas la boucle "while". On en arrive l'accolade qui ferme cette boucle. Puisque la boucle se ferme, l'ordinateur va remonter au dbut de la boucle (c'est tout l'intrt d'une boucle: pou-voir rpter plusieurs fois les mmes instructions).

    Le test est donc nouveau valu:

    while (essai != valeur) {

    Actuellement, "valeur" contient toujours 37 et "essai" contient la nouvelle valeur saisie, donc 25. Donc "essai" est diffrent de "valeur": le test tant juste, on entre nouveau dans la boucle.

    if (essai > valeur) { printf("trop grand !"); }else{ printf("trop petit !"); }

    cran mmoire centrale

    Entrez un essai = 50

    trop grand !

    Entrez un nouvel essai = 25

    valeur 37

    essai 25

    nbre 2

  • 8 2944 TG PA 00

    Page 15

    Squence 1

    Programmationprocdurale

    travers la condition, les variables "essai" et "valeur" sont nouveau compares. Mais cette fois le test est faux car "essai" est plus petit que "valeur". Donc ce n'est pas la pre-mire instruction qui est excute, mais celle qui se trouve aprs le "else". On obtient donc l'affichage suivant:

    Les instructions suivantes dans la boucle sont alors excutes:

    printf("\nEntrez un nouvel essai ="); scanf("%d",&essai);

    Le message va nouveau s'afficher et l'ordinateur va attendre une saisie. Imaginons cette fois que l'utilisateur saisisse 37.

    Le nouvel essai saisi va tre transfr en mmoire dans la variable "essai".

    L'incrmentation est alors excute:

    nbre++;

    Ainsi, la case mmoire "nbre" est nouveau incrmente de 1:

    nouveau, on arrive l'accolade de fin de boucle, donc l'ordinateur remonte en dbut de boucle et ralise nouveau le test:

    while (essai != valeur) {

    cran mmoire centrale

    Entrez un essai = 50

    trop grand !

    Entrez un nouvel essai = 25

    trop petit !

    valeur 37

    essai 25

    nbre 2

    cran mmoire centrale

    Entrez un essai = 50

    trop grand !

    Entrez un nouvel essai = 25

    trop petit !

    Entrez un nouvel essai = 37

    valeur 37

    essai 37

    nbre 2

    cran mmoire centrale

    Entrez un essai = 50

    trop grand !

    Entrez un nouvel essai = 25

    trop petit !

    Entrez un nouvel essai = 37

    valeur 37

    essai 37

    nbre 3

  • 8 2944 TG PA 00

    Page 16

    Squence 1

    Programmationprocdurale

    Cette fois, le test est faux car "essai" contient 37, comme "valeur". Les 2 variables ne sont plus diffrentes. Que se passe-t-il dans ce cas? L'ordinateur arrte de boucler et se positionne directement sur la premire instruction qui se trouve aprs la boucle, donc aprs l'accolade qui ferme la boucle:

    // rsultat printf("Vous avez trouv\x82 en %d essais", nbre);

    Vous connaissez cette instruction : elle permet d'afficher un message. Mais cette fois le message est constitu d'une partie fixe, et d'une variable: le contenu de la variable "nbre" va s'afficher dans le message, l'endroit o se trouve "%d". Ne vous proccupez pas de "\x82": vous l'avez peut-tre compris, c'est un caractre spcial qui permet juste d'afficher un "".

    Comme la variable "nbre" contient actuellement la valeur 3, on va donc obtenir l'affi-chage suivant:

    L'ordinateur continue l'excution des instructions suivantes:

    getch();

    Cette fonction est accessible grce l'include conio. Elle permet d'attendre la frappe d'une touche au clavier. Pourquoi avoir mis ici cette fonction? Parce qu'en son absence, nous n'aurions mme pas le temps de voir l'affichage du message final que la fentre d'excution du programme se fermerait. Donc c'est juste pour avoir le temps de lire, puis ds l'utilisation d'une touche, la fentre se fermera.

    return 0;

    Cette instruction est obligatoire en fin de programme : rappelez-vous que votre pro-gramme principal commence par "int main" et en particulier "int" qui signifie que le programme principal est en mesure de "retourner" la fin une information de type numrique entire. Comme cela a t prcis plus haut, dans cette initiation nous n'uti-liserons jamais cette possibilit. Cependant, le retour d'une valeur reste obligatoire: il faudra donc toujours penser mettre en fin de programme principal un "return" suivi d'une valeur entire. Pourquoi 0? En ralit cela n'a aucune importance: vous pouvez retourner ce que vous voulez puisque ce retour ne sera pas exploit. Le 0 est plutt une convention, rien de plus.

    }

    Il reste cette dernire accolade: elle est l pour fermer l'accolade qui ouvre le "main". Le programme est donc termin est la fentre d'excution se ferme.

    cran mmoire centrale

    Entrez un essai = 50

    trop grand !

    Entrez un nouvel essai = 25

    trop petit !

    Entrez un nouvel essai = 37

    Vous avez trouv en 3 essais

    valeur 37

    essai 37

    nbre 3

  • 8 2944 TG PA 00

    Page 17

    Squence 1

    Programmationprocdurale

    BilanGlobalement, qu'avez-vous remarqu?

    les instructions d'un programme s'excutent les unes la suite des autres; premire exception: dans le cas d'une itration (while), lorsque la fin de boucle est

    atteinte, l'ordinateur remonte en dbut de boucle; deuxime exception: dans le cas d'une alternative (if), certaines instructions sont

    excutes sous condition; seule la saisie met le programme en suspend et attend que l'utilisateur ait saisi une

    information; tous les blocs d'instructions sont dlimits (ici, entre accolades): bloc du programme

    principal, bloc d'une itration, blocs dans une alternative...; les blocs peuvent s'imbriquer (ici, l'alternative est dans l'itration qui est dans le

    programme principal).

    Toutes ces remarques sont finalement valables quel que soit le langage, quelques nuances syntaxiques prs.

    1C. Passage sur machineAvant d'approfondir au niveau thorique ces notions, il est temps de voir concrtement comment faire marcher ce petit programme sur votre ordinateur.

    Comment faire pour excuter notre programme?

    Le code source d'un programme peut tre crit dans n'importe quel diteur (par exemple notepad). Il existe cependant des diteurs plus volus, qui apportent une colorisation au code (pour distinguer les mots rservs, les variables, etc.). Encore plus volus que ces diteurs, il existe des environnements de dveloppement qui offrent de nombreux services (aide la recherche d'erreurs, tests, aide l'criture du code...). On les appelle des IDE (Integrated Development Environment). Pour chaque langage, il existe des IDE gratuits, d'autres payants. Certains IDE sont multi-langages.

    Pour le C++, il existe de nombreux IDE, les plus connus sont Visual C++ de Microsoft, Borland C++ et parmi les gratuits, entre autres devC++, Code::Blocks et Eclipse. Nous allons travailler avec ce dernier, trs connu pour tre un IDE pour le langage Java mais aussi trs performant pour le C++.

    Le pack Eclipse que vous allez utiliser comporte le compilateur MinGW. Parfois le com-pilateur doit s'installer sparment du reste: c'est en particulier vrai si vous utilisez un simple diteur de texte pour taper votre code. La plupart des IDE intgrent l'installation du compilateur associ.

    Installation d'un IDE: Eclipse

    Les explications de l'installation de l'IDE sont donnes dans les "conseils gnraux" au dbut de ce fascicule. Suivez donc ces informations afin d'avoir sur votre ordinateur l'IDE ncessaire pour raliser la suite du travail.

    Test de l'IDE

    Faisons un rapide premier test pour contrler que tout marche bien. Avant tout, crez l'endroit de votre choix sur votre disque, un dossier qui contiendra vos projets.

    Une fois Eclipse lanc, crez un nouveau projet (file/new/c++ project). Donnez un nom au projet (par exemple essai). La case "use default location" est coche: dcochez-la et

  • 8 2944 TG PA 00

    Page 18

    Squence 1

    Programmationprocdurale

    slectionnez le dossier de projets que vous avez cr, en rajoutant la fin "\essai" pour que dans ce dossier de projets, le dossier essai soit cr pour mmoriser le nouveau pro-jet. Ainsi, chacun de vos projets sera mis dans un dossier spcifique. N'oubliez pas par la suite, chaque cration d'un nouveau projet, de prciser ainsi le nom du nouveau dos-sier. Puis, slectionnez "empty project" dans la partie "Executable" qu'il suffit d'ouvrir en cliquant sur le +. Enfin cliquez sur finish.

    gauche, dans "project explorer", slectionnez votre projet. Vous allez crer un fichier source pour insrer du code : file/new/source file. Dans la fentre, comme nom de fichier, tapez "essai.cpp" (sans oublier lextension cpp) puis cliquez sur finish.

    Dans la partie centrale, une page sest ouverte, vide. Tapez le code suivant :

    #include int main () { printf("coucou"); return 0;}

    O Surtout n'oubliez pas la ligne vide aprs la dernire accolade

    Sauvez (avec ctrl-S). Remarquez que la petite toile qui tait ct du nom du fichier, dans longlet, a disparu (cela prouve que le fichier est sauv).

    Pour compiler le projet, dans project explorer ( gauche) slectionnez le projet, puis faites "project/build all".

    Contrlez que le fichier excutable a t cr en allant directement dans le dossier de votre projet, sur le disque, et dans le sous-dossier debug. Vous devriez trouver le fichier "essai.exe". Lancez ce fichier. Une fentre s'ouvre et se referme aussi vite: c'est normal, juste aprs avoir affich "coucou", la fentre se ferme car le programme est termin. Revenez dans Eclipse et cette fois, toujours aprs avoir slectionn le projet dans la colonne de gauche, cliquez sur la flche blanche dans le rond vert (en haut). Remarquez en bas, dans l'onglet "console", le mot "coucou" s'est affich. Ce moyen d'excution, qui peut vous paratre bien pratique, ne sera pas utiliser par la suite car il ne permet pas de saisir.

    Ce premier test vous a permis une toute premire dcouverte de l'environnement et un contrle du bon fonctionnement du pack.

    Prsentation de l'IDEEclipse est un IDE complet qui offre de nombreux outils. Seuls certains seront exploits dans ce cours. Nous allons dans un premier temps prsenter l'environnement global.Dans un test prcdent, vous avez dj eu l'occasion de dcouvrir l'environnement. Repositionnez-vous sur ce test, ou, si vous l'avez perdu, recrez-le (en vous rfrant aux explications prcdentes).

  • 8 2944 TG PA 00

    Page 19

    Squence 1

    Programmationprocdurale

    Vous obtenez un environnement qui ressemble ceci:

    Par la suite, nous verrons comment utiliser les aides d'Eclipse pour rechercher les erreurs dans un programme.Vous remarquerez rapidement que la zone centrale, rserve l'criture du code, offre de nombreuses facilits de saisies (indentations automatiques, fermeture des paren-thses et guillemets, soulignement des erreurs, colorisation).Pour tous les programmes qui vont tre raliss dans ce cours, prenez l'habitude de coder sous Eclipse puis de lancer directement le fichier exe, donc l'extrieur d'Eclipse. Vous l'avez dj fait lors d'un premier test. Le fichier exe se trouve dans le dossier debug qui est dans le dossier du projet.Vous pourriez lancer le test par la flche, mais certaines commandes ne s'excutent pas dans la console: seuls les affichages simples apparaissent. La console sert normalement de zone de test. Dans une application graphique, on utilise la commande printf juste pour afficher des informations de tests dans la console.

    Saisie du programmeCrez un nouveau projet et, dans ce projet, un fichier source du nom de test1.cpp. Si le fichier qui s'ouvre contient des commentaires, supprimez-les. Dans ce fichier, tapez le code du programme vu prcdemment (le jeu du nombre cach), ligne par ligne, en prenant le temps d'observer les ractions de l'IDE et les aides apportes. Il est trs important que vous observiez ce qui se passe, le but de cet exercice tant de dcouvrir dans un premier temps l'IDE. Attention, respectez bien la syntaxe et en particulier la casse (majuscules/minuscules): le C++ n'interprte pas de la mme faon "Else" et "else", par exemple.

    Zone de travail: code source (coloris)

    menus

    Les composantsdu fi chier

    Onglet pour affi cher la console de visualisation

    Excution dans l'IDE

    Les fi chiersdu projet

    Onglet pour listerles erreurs

  • 8 2944 TG PA 00

    Page 20

    Squence 1

    Programmationprocdurale

    Excution du programmeUne fois le programme crit, slectionnez le projet ( gauche) et compilez (Poject/Build all). l'extrieur d'Eclipse, excutez le programme (en allant chercher le fichier exe dans le dossier debug du projet). Si vous ne trouvez pas le fichier exe dans le dossier debug, c'est que la compilation a trouv des erreurs. Contrlez votre programme et corrigez les erreurs avant de compiler nouveau. Les erreurs sont normalement affiches en bas de l'cran. On reviendra en dtail sur cet aspect.Au final, vous devriez obtenir une excution qui ressemble ceci:

    Voil, votre premier programme s'est excut. En fin d'excution, aprs le message final, tant que vous n'appuyez pas sur une touche, la fentre d'excution ne se ferme pas.Vous avez eu une analyse dtaille des tapes d'excution du code dans les pages prc-dentes de ce cours: vous comprenez mieux donc ce qui s'est pass lors de l'excution de ce programme. Avant de passer la suite, revenons sur quelques points fondamentaux dans la programmation qui sont essentiels la comprhension du code.

    Rgles retenir

    Les commentairesPlusieurs commentaires ont t placs dans le code. Il existe 2 types de commentaires.Les commentaires sur plusieurs lignes, entours de /* et */ : c'est la notation officielle, d'ailleurs vous avez remarqu les lignes de commentaires qui se sont construites auto-matiquement quand vous avez tap /*.Les commentaires sur une ligne ou une partie de ligne: ds que le signe // est rencontr par le compilateur, le reste de la ligne est considr comme un commentaire. Ce systme est pratique pour mettre juste un petit message de commentaire. De plus, il est plus rapide crire que le prcdent car il ne ncessite pas une balise de fin de commentaire.Lorsque l'on code, il faut respecter une "charte de code". Celle-ci est souvent impose dans les entreprises, mais peut varier en contenu d'une entreprise l'autre. Dans tout ce cours, quelques lments de charte de code vont tre utiliss pour vous apprendre tre rigoureux ce niveau l. Par exemple, si vous observez bien les commentaires du code, vous remarquerez qu'en ralit 4 types de commentaires ont t utiliss:

    Le cartouche : bloc de commentaire en dbut de programme qui prsente les caractristiques du programme.

  • 8 2944 TG PA 00

    Page 21

    Squence 1

    Programmationprocdurale

    /* Jeu du nombre cach * auteur: Emds * date: 27/04/2011 */

    Les commentaires de blocs et de modules : pour le moment il y a le bloc des includes et le module principal (main). Plus tard, on retrouvera ce type de commentaires en tte de chaque module (notion tudie plus loin). Ici les3 traits qui l'entourent servent juste le mettre un peu plus en vidence.//--- Programme principal ---

    Les commentaires de blocs de code dans un module: ils prcisent le rle des lignes de code qui le suivent.// saisie du nombre chercher

    Les commentaires informatifs de ligne : ils apportent une prcision sur une seule ligne de code (souvent utiliss pour les dclarations).

    #include // pour le printf et scanf

    Vous n'tes pas oblig de suivre cette charte, cependant il est indispensable que vous en suiviez une. Gardez toujours la mme faon de prsenter votre code. La charte de code porte sur les commentaires, mais aussi sur les indentations et les noms de variables.En ce qui concerne les commentaires, certains IDE proposent une charte qui permet ensuite de gnrer automatiquement une documentation lie au programme. C'est le cas par exemple de la javadoc pour le langage java. Vous aurez l'occasion de dcouvrir cet aspect dans un autre cours, si vous choisissez l'option SLAM.

    O Ne tombez pas dans l'erreur classique qui consiste dire "je code d'abord et je com-mente ensuite". Un dveloppeur crit toujours les commentaires AVANT d'crire le code correspondant pour 2 raisons: d'abord le commentaire aide rflchir sur le code que l'on doit crire, ensuite le programme est trs facile comprendre quand il est comment et l'on peut s'y rfrer sans problme. Vous ne serez jamais un vrai dveloppeur si vous ne suivez pas cette rgle.

    Les indentationsLe programme est aussi facile comprendre grce aux indentations. Les indentations reprsentent les dcalages de certaines lignes par rapport la marge de gauche.Vous avez remarqu que le code s'est spontanment indent (gestion automatique des dcalages) au fur et mesure de la saisie. C'est l'IDE qui gre les indentations automa-tiquement, ce qui est bien pratique. Si vous tapez votre code dans un diteur simple, il faut alors les grer soi-mme. Ces indentations sont indispensables pour bien comprendre le sens du code: elles per-mettent de reprer rapidement les imbrications entre les diffrentes structures. Par exemple, ici on repre la boucle gnrale sur la saisie des diffrents essais, et dans la boucle, la condition pour contrler si l'essai est trop grand ou trop petit.Il existe plusieurs mthodes d'indentations. Celle prsente ici est la plus officiellement reconnue.Voici les rgles d'indentations utilises:

    accolade ouvrante en fin de ligne; accolade fermante aligne verticalement sur le dbut du bloc correspondant; dcalages d'une tabulation; "else" mis sur la mme ligne entre l'accolade fermante de la partie "alors" et l'acco-

    lade ouvrante de la partie "sinon".

  • 8 2944 TG PA 00

    Page 22

    Squence 1

    Programmationprocdurale

    Vous dcouvrirez par la suite d'autres aspects de ces rgles d'indentation et prsentation du code.

    Les noms des variablesLes noms des variables utiliss dans le programme reprsentent aussi une aide la com-prhension gnrale.Les noms de variables doivent toujours tre trs explicites pour mieux les reprer dans le code. Eclipse apporte une aide supplmentaire ce niveau l : double cliquez sur une des variables (par exemple, essai) pour la slectionner et observez que la variable a t repre dans tout le code. Remarquez aussi que sur la droite du code, ct de l'ascenseur, des petites marques sont apparues: si vous cliquez sur l'une d'elles, vous tes directement positionn sur une ligne contenant la variable. Ces petits repres, nous les retrouverons plus tard lors de la recherche d'erreurs.Pour revenir au choix des noms de variables, pour le moment nous nous contentons de donner des noms parlants. Par la suite, vous apprendrez qu'il existe des rgles de nom-mage: par exemple, les constantes en majuscules, les noms des objets graphiques avec les 3 premires lettres prcisant le type d'objet, etc.

    2. Logique algorithmiqueCe premier programme vous a donn une ide de la logique de programmation. Vous avez compris que l'ordinateur excute pas pas les instructions du programme, qu'il revient en arrire lorsqu'il est dans une boucle, qu'il peut sauter des lignes dans une condition et qu'il est capable d'attendre une saisie de l'utilisateur.Vous avez sans doute compris la logique globale du programme: pourquoi une boucle, pourquoi un test, etc. Mais vous vous tes aussi peut-tre dit: "oh mais c'est bien com-pliqu tous ces petits dtails, comme savoir qu'il faut mettre un ";" en fin d'instruction, des accolades pour entourer un bloc de code, ...". Effectivement, le C++ impose des rgles d'critures qui sont trs prcises. C'est le cas d'ailleurs de chaque langage avec des nuances parfois importantes d'un langage un autre.Le point commun entre les langages reste la logique du programme: savoir quand il faut afficher, saisir, boucler, tester...Rsoudre un problme informatique suppose donc avant tout de rflchir sur la logique du programme avant de se proccuper de la syntaxe spcifique au langage.Voil comment est ne la notion d'algorithme informatique. Le but d'un algorithme est de rflchir sur la logique d'un programme en oubliant les rgles de syntaxe d'un lan-gage. Une fois un algorithme crit, il ne reste plus qu' la traduire dans le langage de programmation souhait. Cette traduction ne demande aucune rflexion particulire.

    2A. Qu'est-ce qu'un algorithme?Un algorithme est donc un ensemble de traitements informatisables crits dans une syn-taxe simple et ensuite traduisible dans un langage informatique volu.L'intrt d'crire d'abord un algorithme pour rsoudre un problme est de clarifier et structurer le problme d'informatisation en vue d'un futur codage. Utilisant une syntaxe simple, il se dtache de toute rgle spcifique chaque langage.La syntaxe algorithmique existe cependant: elle est nettement moins contraignante que celle lie aux langages mais respecte certaines normes.Si vous parcourez des livres sur le sujet, ou des sites sur Internet, vous verrez qu'il existe des nuances dans la prsentation des algorithmes. Ce n'est pas trs grave: l'important

  • 8 2944 TG PA 00

    Page 23

    Squence 1

    Programmationprocdurale

    rside dans le sens. Ce cours va vous prsenter une norme: si vous tes habitu une autre norme, vous pouvez la garder. Vous devez juste tre rigoureux et prsenter les mmes notions toujours de la mme faon. l'examen, vous pourrez crire directement du code. Quand vous aurez une certaine habitude de la programmation, vous crirez sans doute directement des programmes sans passer par l'criture d'un algo. Mais tant que vous tes dbutant, cette tape va vous permettre de vous concentrer sur la rflexion sans vous proccuper de problmes de syntaxes. travers ce cours, vous allez aussi dcouvrir les possibilits offertes par la plupart des langages.

    2B. Version algorithmique du premier programmeCe cours a directement prsent un premier programme crit en C++: le but tait d'tre concret et de vous montrer rapidement ce qu'est un programme. Nous avons donc com-menc par la fin: le programme tait dj crit et nous avons essay de le comprendre, puis de l'excuter dans un IDE. La dmarche aurait du tre la suivante: pauser le pro-blme, crire l'algorithme correspondant, le traduire en C++ puis le tester.Voici la version algorithmique du programme:

    programme nombreCach

    // dclarations valeur, essai, nbre: entier

    debut

    // initialisation nbre 1

    // saisie du nombre chercher afficher "Entrez le nombre chercher =" saisir valeur

    // effacer l'cran cet endroit

    // boucle sur la saisie des essais afficher "Entrez un essai =" saisir essai tantque essai valeur si essai > valeur alors afficher "trop grand !" sinon afficher "trop petit !" finsi afficher "Entrez un nouvel essai =" saisir essai nbre nbre + 1 fintantque

    // rsultat afficher "Vous avez trouv en " + nbre + " essais"

    fin

  • 8 2944 TG PA 00

    Page 24

    Squence 1

    Programmationprocdurale

    Observez cet algorithme. Vous retrouvez la logique du programme mais cette fois crit en franais et dans une syntaxe plus simple (plus d'accolades, de ";"...). Pour les com-mentaires, la norme C++, qui reste celle utilise dans de nombreux langages, est souvent utilise.

    Remarquez que le bloc principal du code est mis entre les mots "debut" et "fin". Avant le mot "debut", vous retrouvez la dclaration des variables ncessaires au programme. Certains mettent les dclarations directement dans le programme, comme c'est le cas en C++. Pourquoi pas: cela se justifie mme parfois dans certains cas que nous aurons l'occasion d'tudier plus tard.Ce petit programme vous a permis d'avoir un panel assez large des possibilits globales:

    affichage d'informations l'cran; saisie de donnes au clavier; boucle sur un groupe de traitements; traitements excuts sous condition; affectation d'une valeur dans une variable; calculs dans une variable.

    Nous allons revoir tout cela de faon plus formelle.

    2C. Traitements possiblesVoici les traitements de base utilisables dans un algorithme et qui correspondent aux instructions de base qui peuvent tre excutes par un ordinateur.

    Structure gnraleUn programme se prsente sous la forme suivante:

    programme nomDuProgramme // dclarations nomVariable: typeVariable ...debut // instructions ...fin

    Le nom du programme est libre. La partie dclaration permet de connatre la liste des cases mmoire ncessaires pour l'excution du programme, ainsi que le type de chaque case. Voici les types les plus courants:

    numrique : ce type gnrique regroupe tous les types numriques. On peut cependant tre plus prcis (entier, rel);

    chane ou texte: ce type gnrique regroupe tous les types base de caractres quelconques. Lorsque la variable ne contient qu'un seul caractre, cela peut tre prcis par le type 'caractre";

    boolen: une variable de ce type ne peut prendre que 2 valeurs (vrai ou faux); date: ce type permet de contenir une date et de la traiter comme tel (possibilit

    de calculs spcifiques aux dates).

    Saisie

    Syntaxe

    saisir nomVariable

  • 8 2944 TG PA 00

    Page 25

    Squence 1

    Programmationprocdurale

    ButSaisie au clavier d'une valeur et mmorisation de cette valeur.

    FonctionnementArrt momentan de l'excution du programme en attendant la saisie.Une fois la saisie faite et valide, transfert de l'information saisie dans la variable en mmoire dont le nom est prcis la suite de l'ordre "saisir".Reprise de la suite de l'excution du programme.

    Cas d'erreurs Si l'information saisie n'est pas du mme type que la variable qui attend l'informa-

    tion. Par exemple, si du texte est saisi alors que la variable est de type numrique. Si la variable n'existe pas. Si ce qui suit le mot "saisir" n'est pas une variable.

    Affi chage

    Syntaxe

    // affichage d'un message en toutes lettresafficher "bonjour tous"// affichage du contenu d'une variableafficher uneVariable// affichage d'une valeur numriqueafficher 3// affichage d'un calculafficher (uneVariable * 3)// affichage d'une combinaison texte/variableafficher "Bonjour " + unPrenom + " !"

    ButAffichage d'une information l'cran.

    FonctionnementConstruction de l'information puis transfert vers l'cran. Les calculs sont mis entre parenthses, en particulier lorsqu'ils sont intgrs dans une concatnation de chane.

    Cas d'erreurs Si la ou les variables n'existe(nt) pas. Si la partie texte n'est pas mise entre guillemets. S'il n'y a pas de "+" entre la partie texte et les variables.

    VarianteLa virgule est admise la place du signe "+".

    afficher "Bonjour ", unPrenom, " !"

    Cependant je vous dconseille ce formalisme. Vous verrez par la suite que dans la quasi totalit des langages, il faut "additionner" les diffrentes parties pour en faire une seule. On appelle cela de la "concatnation" de chanes.

  • 8 2944 TG PA 00

    Page 26

    Squence 1

    Programmationprocdurale

    Exercice 1

    Deux variables sont dclares et initialises en mmoire centrale: prenom: chaine // cette variable contient la chane "Nicolas"age: entier // cette variable contient la valeur 16Prcisez ce que vous obtiendrez l'affichage aprs chaque instruction:a) afficher prenomb) afficher nomc) afficher age + " * 2 = " + (age*2)d) afficher "age + " * 2 = " + (age*2)"Prcisez chaque fois l'instruction crire pour obtenir les affichages suivants, en utilisant les variables donnes:e) Bonjour Nicolasf) Tu as 16 ansg) Tu seras majeur dans 2 anspour ce dernier cas, on prendra pour hypothse que age est < 18.

    Affectation

    Syntaxe

    // affectation d'une valeur dans une variableuneVariable "bonjour"uneAutreVariable 3// affectation du contenu d'une variable dans une autreuneVariable uneSecondeVariable

    ButTransfert d'une information dans une variable.

    FonctionnementLa valeur ou le contenu de la variable qui se trouve droite de l'affectation est transfr en mmoire centrale dans la variable qui se trouve gauche de l'affectation.Si la variable qui reoit la valeur contenait une autre valeur, celle-ci est efface pour laisser la place la nouvelle valeur.

    Cas d'erreurs Si la variable qui se trouve gauche de l'affectation n'existe pas. Si ce qui est gauche de l'affectation n'est pas une variable. Si la variable qui se trouve droite de l'affectation n'existe pas. Si l'information transfre n'est pas du mme type que la variable de gauche.

  • 8 2944 TG PA 00

    Page 27

    Squence 1

    Programmationprocdurale

    Exercice 2

    Deux variables sont dclares en mmoire centrale et ne contiennent rien pour le moment:prenom: chaneage: entierDites pourquoi les instructions suivantes ne sont pas correctes:a) prenom Nicolasb) age 16 ansc) age "18"Prcisez chaque fois l'instruction crire pour obtenir les rsultats suivants:d) la variable prenom doit contenir le prnom Alaine) la variable age doit contenir l'age d'Alain c'est dire 18 ans

    Calcul

    Syntaxe

    // calcul partir de valeurs fixesuneVariable (2 * 9) / 3// calcul partir de variablesuneVariable uneAutreVariable * 5

    ButTransfert du rsultat d'un calcul dans une variable.

    FonctionnementLe calcul qui se trouve droite de l'affectation est valu. Son rsultat est transfr dans la variable qui se trouve gauche de l'affectation.Si la variable qui reoit le rsultat du calcul contenait une autre valeur, celle-ci est efface pour laisser la place la nouvelle valeur.

    Cas d'erreurs Si la variable qui se trouve gauche de l'affectation n'existe pas. Si ce qui est gauche de l'affectation n'est pas une variable. Si la ou les variables qui se trouvent droite de l'affectation n'existent pas. Si le calcul demand n'est mathmatiquement pas possible (division par 0...). Si une valeur ou une variable qui se trouve droite est une chane (sauf dans le cas

    de concatnation de chanes que l'on verra plus loin). Si le rsultat du calcul n'est pas du mme type que la variable de gauche.

    Oprateurs possibles

    + addition somme somme + prix

    - soustraction nbannee 18 - age

    * multiplication prix prix * 0,2

    / division moyenne somme / nbarticle

    ** puissance surface longueur ** 2

    div division entire nbHeures nbMinutes div 60

    mod reste de division minutesRestantes nbMinutes mod 60

    () parenthses total (ht + tva) * (1 + remise/100)

  • 8 2944 TG PA 00

    Page 28

    Squence 1

    Programmationprocdurale

    Expression logiqueUne expression logique (comme les tests vus dans les conditions ou les boucles) peut aussi tre affecte une variable. Le rsultat d'une expression logique tant de type boolen (vrai ou faux), la variable qui reoit le rsultat doit tre de type boolen.Voici un exemple:

    uneVariable (A < B) ou non (B >= C)

    Si le rsultat de l'expression logique est vrai, alors uneVariable recevra Vrai. uneVariable recevra Faux dans le cas contraire.

    Exercice 3

    crire l'algorithme qui permet de saisir un nom d'article puis de saisir son prix HT et d'afficher le nom de l'article suivi du montant TTC aprs remise de 5% (la remise est accorde sur le montant TTC, tva=19,6). L'affichage doit tre sous la forme:Veste: 67,55

    Alternative

    Syntaxe

    // traitements excuter si la condition est vraiesi condition alors traitements(s)finsi

    // traitements excuter si la condition est vraie ou// autres traitements excuter si la condition est faussesi condition alors traitements(s)sinon traitements(s)finsi

    ButExcution de traitements sous condition.

    FonctionnementLa condition est value. Si la condition est vraie, les traitements contenus dans la partie "alors" sont excuts. S'il y a une partie "sinon", les traitements contenus dans cette partie sont ignors. Si la condition est fausse, les traitements contenus dans la partie "alors" sont ignors. Dans ce cas, s'il y a une partie "sinon", les traitements contenus dans cette partie sont excuts.

    Cas d'erreurs Si la condition n'est pas une expresSion logique valide (ne retourne pas un boolen). Si la partie "alors" ne contient pas de traitements. s'il y a plusieurs parties "alors" ou plusieurs parties "sinon" pour une seule condition.

  • 8 2944 TG PA 00

    Page 29

    Squence 1

    Programmationprocdurale

    Qu'est-ce qu'une condition?Une condition est une expression logique contenant une ou plusieurs variables et/ou valeurs ainsi que des oprateurs arithmtiques et/ou logiques. Quel que soit le contenu de la condition, son rsultat doit tre de type boolen.Voici quelques exemples de conditions correctes:

    // total et somme sont des variables numriquessi (total > somme * 2)// valeur est numrique et result est boolensi (valeur > 0) et (result = vrai)

    Cas particulier du test d'un boolenSi la variable teste est un boolen, il existe des raccourcis d'criture.

    // valeur est numrique et result est boolensi (valeur > 0) et (result = vrai)// voici l'expression quivalentesi (valeur > 0) et (result)

    La comparaison d'un boolen avec "vrai" quivaut tester directement le boolen lui-mme.

    // valeur est numrique et result est boolensi (valeur > 0) et (result = faux)// voici l'expression quivalentesi (valeur > 0) et (non result)

    La comparaison d'un boolen avec "faux" quivaut tester directement le contraire du boolen lui-mme.Vous devez savoir lire les 2 faons d'crire, cependant vous pouvez utiliser la mthode que vous prfrez.

    Oprateurs logiquesVoici les oprateurs logiques que vous avez le droit d'utiliser:

    et les 2 conditions doivent tre vraiesou il suffi t que l'une des 2 conditions soit vraienon donne le contraire de la condition() ordonne les conditions (indispensable partir de 3 conditions)= galit entre 2 expressions diffrence< infrieur strictement> suprieur strictement= suprieur ou gal

    Exercice 4

    crire l'algorithme qui permet de saisir un ge et d'afficher "majeur" si la personne a au moins 18 ans, "mineur" si la personne n'a pas atteint cet ge.

  • 8 2944 TG PA 00

    Page 30

    Squence 1

    Programmationprocdurale

    Cas de: "si" multipleIl arrive parfois que suivant les valeurs d'une variable, diffrents traitements doivent tre excuts.

    Par exemple, si la personne a le choix entre 3 options pour la livraison (express, normal, lent) avec le prix qui varie suivant l'option, on pourrait l'crire ainsi:

    // choix est une variable de type chane// total est de type numrique et contient le montant payercas de choix "express": afficher total * 0,3 "normal": afficher total * 0,1 "lent": afficher totalfincas// autre solution, s'il n'y a vraiment que 3 cas possiblescas de choix "express": afficher total * 0,3 "normal": afficher total * 0,1 sinon afficher totalfincas

    Certains mettent "selon" la place de "cas de".

    Bien sr, il aurait t possible de l'crire avec plusieurs "si":

    si choix = "express" alors afficher total * 0,3sinon si choix = "normal" alors afficher total * 0,1 sinon afficher total finsifinsi

    Voici la syntaxe du "cas de":

    cas de variable valeur1: traitement(s) ... valeurN: traitement(s) sinon traitement(s)fincas

    ItrationL'itration reprsente la possibilit de rpter plusieurs fois une squence de traite-ments. Il existe 3 types d'itrations.

    tantque

    tantque conditionPourBoucler traitement(s)fintantque

    Les traitements s'excutent tant que la condition est vraie. Lorsque l'ordinateur arrive sur le "fintantque", il remonte au niveau du "tantque" et la condition est nouveau

  • 8 2944 TG PA 00

    Page 31

    Squence 1

    Programmationprocdurale

    value. Lorsque la condition devient fausse, l'ordinateur continue les traitements aprs le "fintantque".

    Attention, les traitements doivent entre autres modifier au moins une des variables tes-tes dans la condition: il faut qu' un moment ou un autre, la condition devienne fausse sinon la boucle est infinie.Le "tantque" est la boucle la plus gnrale. Elle marche dans toutes les situations. Elle boucle de 0 N fois: elle peut effectivement boucler 0 fois car la condition est au dbut de la boucle et peut tre fausse ds le dbut.

    Exercice 5

    crire l'algorithme qui permet de saisir l'ge de plusieurs personnes en arrtant la saisie lorsque l'ge saisi est gal 0. Au final, la somme des ges doit tre affiche.

    repeterrepeter traitement(s)jusqu' conditionPourSortir

    Les traitements s'excutent jusqu' ce que la condition soit vraie. Lorsque l'ordinateur arrive sur le "jusqu'", il value la condition et, si elle est fausse, il remonte au niveau du "repeter". Lorsque la condition devient vraie, l'ordinateur arrte de boucler et continue les traitements aprs le "jusqu'".

    O Les traitements doivent entre autres modifier au moins une des variables testes dans la condition: il faut qu' un moment ou un autre, la condition devienne vraie sinon la boucle est infinie.

    Le "repeter" est la boucle idale pour les tests de saisie. Elle boucle de 1 N fois: elle boucle effectivement au moins une fois car le test se situe en fin de boucle.

    Exercice 6

    crire la squence algorithme qui permet de saisir une note en empchant la saisie d'une valeur non comprise entre 0 et 20 (une squence algorithmique ou extrait d'algorithme ne reprsente pas un algorithme complet et donc n'a ni dbut ni fin: on suppose qu'il se passe des choses avant et peut-tre aussi aprs).crire ensuite l'algorithme qui permet de saisir plusieurs notes avec contrle de saisie de la note (entre 0 et 20) et affichage de la moyenne en fin de saisie. Aprs chaque saisie, on demandera l'utilisateur s'il veut continuer ou non saisir. Vous contrle-rez aussi la rponse (qui doit tre forcment "O" ou "N" et pas un autre caractre).

    pourpour cpt de depart arrivee [pas de pas] traitement(s)finpour

    La variable "cpt" (ou n'importe quel autre nom de variable) est initialise la valeur "depart" (qui peut tre une valeur en dur ou un nom de variable). Les traitements s'ex-cutent et, une fois le "finpour" atteint, l'ordinateur remonte au niveau du "pour". chaque passage au niveau du "pour", la variable "cpt" est automatiquement incrmen-

  • 8 2944 TG PA 00

    Page 32

    Squence 1

    Programmationprocdurale

    te de "pas" si un pas a t prcis, ou de 1 (par dfaut). La sortie de la boucle s'effectue quand "cpt' a dpass la valeur "arrivee".

    O Les traitements contenus dans la boucle ne doivent pas modifier les informations du "pour" (le contenu de "cpt", de "depart", de "arrivee" et de "pas").

    Le "pour" est la boucle idale lorsque le nombre d'itrations est connu. Elle peut ne bou-cler aucune fois si la valeur de "arrivee" est infrieure la valeur de "depart" dans le cas d'un "pas" positif (ou d'une absence de "pas"), et si la valeur "arrivee" est suprieure la valeur "depart" dans le cas d'un "pas" ngatif.

    Exercice 7

    crire l'algorithme qui permet de saisir le nombre d'lves d'une classe puis, pour chaque lve, saisir son ge. Il faudra au final afficher l'ge moyen des lves de la classe.

    Manipulations de chanesTous les langages offrent diffrentes possibilits de manipulations des chanes. Normalement, en algorithmique, il n'existe pas d'quivalent ou de normes dans ce domaine, except pour "coller" (on dit "concatner") deux chaines l'une la suite de l'autre. Cependant, il est admis d'utiliser des fonctions puisque de toute faon il sera toujours possible de trouver une quivalence quel que soit le langage de programma-tion choisi. Les noms qui sont donns ici ces fonctions ont t choisis arbitrairement puisqu'il n'y a pas de norme algorithmique ce niveau, cependant le choix a t fait en suivant la logique du rle de chaque fonction.

    Concatnation

    Syntaxe

    uneVariable unePremiereVariable + uneSecondeVariable

    // exemplesnom "Dupont"prenom "Christophe"nomComplet prenom + " " + nom// nomComplet contient "Christophe Dupont"

    ButCration d'une nouvelle chane partir de la concatnation de plusieurs autres chanes.Nous avons dj utilis cette possibilit lors d'affichages composs de plusieurs parties.

    Cas d'erreursNormalement les lments de la concatnation doivent tous tes de type "chane". Les concatnations entre chanes et numriques sont cependant souvent admises en algo. Dans ce cas la valeur numrique est gre comme une chane. Suivant les langages, il faudra au pralable convertir la valeur numrique pour la transformer en chane. Dans les exercices suivants, quand la conversion est optionnelle, elle ne sera pas systmatique-ment applique.

  • 8 2944 TG PA 00

    Page 33

    Squence 1

    Programmationprocdurale

    Longueur

    Syntaxe

    uneLongueur longueur(uneChaine) // uneChaine peut tre une variable, une chane ou une combinaison des 2

    // exemplestaille1 longueur("Dupont") // taille1 contient 6prenom "Christophe"taille2 longueur(prenom) // taille2 contient 10taille3 longueur(prenom+ " Dupont") // taille3 contient 17

    ButCalcul du nombre de caractres contenu dans une chane.

    Cas d'erreursLes cas d'erreurs sont les mmes que ceux de la concatnation. Attention, une longueur ne peut tre faite sur un numrique ou une variable numrique. La variable numrique ne sera tolre que si elle est concatne une chane. Mais comme cela a t dit dans la partie "concatnation", nous viterons d'utiliser cette possibilit.

    Extraction

    SyntaxeuneAutreChaine extraire(uneChaine, depart, [longueur]) // uneChaine peut tre une variable, une chane ou une combinaison des 2

    // exempleschaine1 extraire("Dupont", 1, 3) // chaine1 contient "Dup"prenom "Christophe"chaine2 extraire(prenom, 6) // chaine2 contient "tophe"chaine3 extraire(prenom,2, 4) // chaine3 contient "hris"

    ButConstruction d'une nouvelle chane en ralisant une extraction d'une sous-chane par-tir d'une chane de dpart.La valeur "depart" permet de prciser partir de quel caractre l'extraction est faite.La valeur "longueur" permet de prciser le nombre de caractres extraits partir de "depart". En l'absence de "longueur", le reste de la chane est extrait.

    Cas d'erreursLes cas d'erreurs sont les mmes que ceux de la fonction "longueur". De plus, la variable "depart" ne peut pas contenir une valeur infrieure 1 et suprieure la longueur de la chane. La variable "longueur" ne peut contenir une valeur infrieure 1. Il est admis que si la variable longueur contient une valeur suprieure aux nombres de caractres qui peuvent tre extraits, l'extraction s'arrte de toute faon la fin de la chane.

  • 8 2944 TG PA 00

    Page 34

    Squence 1

    Programmationprocdurale

    Recherche

    SyntaxeunePosition recherche(unSousChaine, uneChaine) // uneSousChaine et uneChaine peuvent tre une variable, une chane ou une combinaison des 2

    // exemplesprenom "Christophe"nom "Dupont"pos1 recherche("top", prenom) // pos1 contient 6pos2 recherche("h", prenom) // pos2 contient 2pos3 recherche(" ", prenom + " " + nom) // pos3 contient 11pos4 recherche(" ", prenom) // pos4 contient 0

    ButReprage de la premire occurrence de "uneSousChaine" dans "uneChaine". La valeur retourne reprsente la position du premier caractre de "uneSousChaine" dans "uneChaine". Si aucune occurrence n'est trouve, la valeur 0 est retourne.

    Frquence

    Syntaxe

    laFrequence frequence(unSousChaine, uneChaine) // uneSousChaine et uneChaine peuvent tre une variable, une chane ou une combinaison des 2

    // exemplesprenom "Christophe"freq1 frequence("top", prenom) // freq1 contient 1freq2 frequence("h", prenom) // freq2 contient 2freq3 recherche(" ", prenom) // freq3 contient 0

    ButComptabilisation du nombre d'occurrences de "uneSousChaine" dans "uneChaine".

    Exercice 8

    Deux variables sont dclares et initialises en mmoire centrale: prenom: chaine // cette variable contient la chane "Nicolas"nom: chaine // cette variable contient la chane "Dupont"Les variables suivantes sont aussi dclares mais non initialises:chaine1, chaine2, chaine3, chaine4: chaineval1, val2: entierLes insrtuctions suivantes sont excutes dans l'ordre. Aprs chaque instruction, vous prciserez le contenu de la variable concerne (celle qui est gauche de l'affecta-tion):a) chaine1 prenom + nomb) chaine2 prenom + " " + nomc) val1 longueur(chaine2)d) chaine3 extraire(chaine2, longueur(prenom)+2)e) chaine4 extraire(chaine2, recherche(" ", chaine2)+1)f) val2 val1 - frequence("o", chaine2)

  • 8 2944 TG PA 00

    Page 35

    Squence 1

    Programmationprocdurale

    2D. Fonctions prdfiniesVous venez dj de dcouvrir plusieurs fonctions prdfinies sur les chaines. Il existe des fonctions prdfinies dans de nombreux domaines. Nous allons voir ici deux grands domaines de fonctions avec, chaque fois, deux des fonctions les plus connues. L encore, il n'existe aucune norme algorithmique mais les fonctions prsentes ici sont tel-lement connues qu'elles sont couramment admises. Ne soyez pas tonn si vous trouvez des syntaxes diffrentes dans les livres ou sur internet: en l'absence de norme, on peut donner ces fonctions le nom que l'on veut, condition qu'il soit parlant. La plupart du temps, le nom le plus utilis dans les langages est adopt.

    Fonctions de conversionsCes fonctions permettent de changer le type d'une variable.

    Syntaxe

    // conversion d'une chane en numriqueunNombre val(uneChaine)

    // conversion d'une valeur numrique en chaineuneChaine str(unNombre)

    Butval: permet de convertir une chane en numrique. Cette conversion est indispensable s'il est ncessaire de faire des calculs avec le nombre obtenu.str: permet de convertir un nombre en chane. Comme nous l'avons vu prcdemment, cette conversion est utile lorsque le nombre doit tre manipul comme une chane, par exemple en le concatnant une autre chane.

    Cas d'erreursLa fonction val ne peut pas convertir autre chose qu'une chane. La fonction str ne peut pas convertir autre chose qu'une valeur numrique.

    Fonctions mathmatiquesVoici 2 fonctions mathmatiques assez classiques. Il existe bien sr de nombreuses fonc-tions mathmatiques accessibles dans quasiment tous les langages.

    Syntaxe

    // valeur absolue d'un nombreunNombre abs(unAutreNombre)

    // partie entire d'un nombreunNombre ent(unAutreNombre)

    Butabs: donne la valeur absolue d'un nombre, donc le mme nombre sans son signe (un nombre ngatif devient alors positif).ent: donne la partie entire d'un nombre, donc sa valeur sans la partie aprs la virgule (on obtient un nombre entier).

    Cas d'erreursLes deux fonctions n'acceptent que des nombres.

  • 8 2944 TG PA 00

    Page 36

    Squence 1

    Programmationprocdurale

    Autres fonctionsVous vous doutez bien qu'il existe des tas de fonctions prdfinies dans des domaines varis comme la gestion des dates (pour rcuprer le jour d'une date, par exemple), la comptabilit, etc.

    Exercice 9

    crire l'algorithme qui permet de convertir en binaire un nombre dcimal.La conversion se fait en rcuprant les restes des divisions successives par 2 du nombre dcimal, jusqu' ce que le quotient soit nul. Le nombre binaire se construit en concatnant les restes dans une variable de type chane. Le programme doit donc commencer par saisir un nombre dcimal, faire la conver-sion puis afficher au final la variable chane qui contient la conversion en binaire.

    AidePour ce programme, vous aurez besoin des oprateurs mod et div, de la fonction str et de la concatnation de chanes.

    2E. OptimisationUn programme ne doit pas se contenter de "marcher". Il doit tre optimis pour tre le plus performant possible. Il existe 4 niveaux d'optimisation.

    Optimisation en lisibilitUn programme doit tre facile lire et relire. Une des plus grandes difficults en pro-grammation est de se plonger dans un programme crit par un autre dveloppeur, voire parfois de se replonger dans un de nos anciens programmes. Il arrive mme que l'on ait du mal relire des parties d'un programme que l'on est en train de dvelopper !Il faut donc respecter certaines rgles de prsentation du code pour que le programme soit facile comprendre.Ne suivez jamais ces rgles "aprs coup": c'est une erreur classique, malheureusement. Suivez ces rgles au fur et mesure que vous crivez le code (ou l'algorithme) de votre programme.

    IndentationsLes indentations reprsentent les dcalages faits dans le code, ou l'algorithme, pour amliorer sa lisibilit en permettant de reprer plus facilement les diffrentes struc-tures et leurs imbrications. Les dcalages utiliss doivent toujours tre de mme taille. Gnralement, c'est la tabulation qui est utilise. Certains utilisent 2 ou 3 espaces. Quelle que soit la taille du dcalage que vous adoptez, utilisez toujours la mme.

  • 8 2944 TG PA 00

    Page 37

    Squence 1

    Programmationprocdurale

    Voici les rgles respecter:// dcalage dans un programme principaldebut traitementsfin

    // dcalage dans une itrationtantque condition traitementsfintantque

    repeter traitementsjusqu' condition

    pour k de depart arrivee traitementsfinpour

    // dcalage dans une alternativesi condition alors traitementssinon traitementsfinsi

    // exemple d'imbrication des dcalagestantque condition traitements si condition alors si condition alors traitements finsi sinon traitements finsifintantque

    Nom des variablesLes noms des variables et, nous verrons plus tard, beaucoup d'autres choses, doivent tre choisis judicieusement.Le choix doit suivre 2 rgles importantes:

    le nom de la variable doit reprsenter clairement son contenu; la norme du nom doit respecter des rgles prcises.

    Pour le moment, nous allons nous contenter de suivre la premire rgle. Nous verrons par la suite comment suivre la seconde, plus complexe et qui ncessite des connaissances supplmentaires.

    CommentairesVous l'avez dj vu, les commentaires permettent d'apporter une information claire sur le contenu du code. Inutile de revenir sur les diffrents types de commentaires et leur prsentation: tout a t dtaill dans les pages prcdentes.

  • 8 2944 TG PA 00

    Page 38

    Squence 1

    Programmationprocdurale

    C'est pourtant sur ce point que j'aimerais insister le plus. Trs souvent, les tudiants cri-vent du code sans mettre une seule ligne de commentaire puis les ajoutent la fin "pour faire plaisir au prof qui va les interroger". Perdez cette vision des choses et ce mode de fonctionnement car vous allez perdre beaucoup de temps. Ajouter les commentaires la fin suppose qu'il faut se replonger dans tout le code et le comprendre nouveau. De plus, c'est un travail long et fastidieux.Le but d'un commentaire, au del du fait qu'il permet de relire plus facilement un code, est de vous aider rflchir. Comment? Prenez l'habitude d'crire la ligne de commen-taire de dbut de bloc avant mme d'crire votre bloc de code : cela vous permet de clarifier ce que vous devez faire et vous aide coder. Donc retenez cette rgle qui vous sera d'une grande aide:

    O Un commentaire de bloc doit toujours tre crit AVANT d'crire le code correspon-dant.

    Exercice 10

    Voici un algorithme. Recrivez-le en suivant les rgles de lisibilit puis dites en clair ce que fait cet algorithme.

    debuta "O"tantque a = "O"saisir bsi b > 1 alorspour c de 1 10afficher (b*c)finpoursinonafficher "impossible"finsiafficher "continuer? (O/N) "repetersaisir ajusqu' a = "N" ou a = "O"fintantquefin

    Optimisation en tempsLe but est d'optimiser le temps d'excution d'un programme. Un mme programme peut tre crit de plusieurs faons diffrentes: toutes les solutions peuvent donner un rsultat identique la fin, mais pas avec le mme temps d'excution.La diffrence est parfois minime mais lorsqu'on se place un autre niveau (par exemple des centaines d'internautes qui essayent d'excuter la mme fonctionnalit), on peut obtenir des diffrences de temps trs significatives.Il faut donc essayer de supprimer au maximum les redondances, les traitements inutiles et optimiser ceux qui sont gourmands en ressources.Par exemple, mfiez vous des boucles imbriques : si vous avez une itration qui va boucler 20 fois et qui contient une autre itration qui va boucler 30 fois, l'air de rien le nombre de boucles s'lve 20x30 donc 600 fois !

  • 8 2944 TG PA 00

    Page 39

    Squence 1

    Programmationprocdurale

    Optimisation en espaceL'espace reprsente la place de stockage. Pour le moment, vous n'avez abord que le stockage en mmoire centrale (des diffrentes variables). Vous verrez plus tard d'autres types de stockage, sur supports permanents (disque dur, DVD...). Il y a quelques annes, il fallait faire trs attention la place prise en mmoire centrale et sur les autres supports car leurs tailles taient trs limites. Actuellement, la marge est plus importante mais ce n'est pas pour autant qu'il faut faire n'importe quoi. Il faut donc essayer de ne pas tre trop gourmand, sans pour autant perdre en lisibilit ou en optimisation du temps.

    Optimisation fonctionnelleCe point ne sera pas dvelopp pour le moment, car vous n'avez pas encore les connais-sances ncessaires. Vous aborderez ce type d'optimisation dans quelques pages, avec la prsentation des modules.Pour le moment, vous pouvez juste faire en sorte de minimiser les redondances dans le code. Par exemple, si vous devez afficher plusieurs fois la mme phrase avec juste une valeur qui change, autant afficher la phrase qu'une seule fois et utiliser une variable pour la valeur.

    Exercice 11

    crire l'algorithme qui permet de saisir un montant. Si le montant est suprieur 40, la remise est de 10%. De 20 40, elle est de 5%. Afficher le taux de remise et le montant payer.Le but de cet exercice est de trouver une solution la plus propre et optimise pos-sible. vitez donc de faire l'ordinateur des tests pour rien et vitez les rptitions de code.

    2F. TestsLorsque vous crivez un programme, vous allez forcment tomber sur des erreurs lors de l'excution. Au niveau d'un algorithme, vous n'avez pas cette possibilit de tests cepen-dant vous pouvez tout de mme vous mettre la place de l'ordinateur et contrler pas pas les fonctionnalits de l'algorithme, comme cela a t fait au tout dbut de ce cours avec l'analyse dtaille du premier programme. On appelle ce type de test, une "trace".

    Trace d'un algorithmeFaire une trace consiste se mettre la place de l'ordinateur et voir l'volution des variables (tat de la mmoire) et des affichages (ou autres priphriques utiliss).Plutt que de faire comme cela a t prsent en dbut de cours (redessiner la mmoire centrale chaque tape), on prsente gnralement l'volution des variables dans un tableau en mettant en en-tte de colonnes les noms des variables et, dans les colonnes, ligne par ligne, les diffrentes valeurs prises par les variables au cours de l'excution.

  • 8 2944 TG PA 00

    Page 40

    Squence 1

    Programmationprocdurale

    Exercice 12

    Voici un algorithme. Faites les 2 traces suivantes en simulant la saisie des valeurs donnes:a) 12; 8; 7; 0b) 0

    // calcul de la moyenne des agesdebut // saisie du premier age afficher "entrer un age" saisir age // initialisation des variables nb 0 total 0 // boucle sur la saisie des ages (arrt 0) tantque age 0 // cumul des ages et comptabilisation du nombre de saisies total total + age nb nb + 1 // saisie d'un age afficher "entrer un age" saisir age fintantque // calcul et affichage de la moyenne afficher "moyenne = " + str(total/nb)fin

    Pour chaque trace, faites un tableau de 3 colonnes (une par variable) et marquez l'volution du contenu de chaque variable. Prcisez la fin l'information qui va s'afficher.Quel problme rencontrez-vous dans la 2e trace? Que faut-il modifier dans le pro-gramme pour viter ce problme?

    Les types de testsL'exercice prcdent vous a montr qu'un programme peut sembler marcher mais, sui-vant les tests, a ne va plus tre le cas.Il faut donc penser tous les tests pertinents possibles pour contrler qu'un programme va fonctionner quelle que soit la situation. On met au point ce qu'on appelle des "jeux d'essais" qui reprsentent des batteries de tests afin de couvrir le maximum de possibili-ts que peut rencontrer un programme. Les tests peuvent aborder diffrents domaines:

    tests de saisie (contrler par exemple que la personne tape bien un "O" ou un "N"); tests de scurit (contrler que l'accs certaines pages d'un site soit limit cer-

    taines personnes); tests de calculs (comme on l'a vu dans l'exercice prcdent); tests de cohrence (si une date de dbut et une date de fin doivent tre choisies,

    contrler que la date de fin soit bien suprieure la date de dbut); etc.

  • 8 2944 TG PA 00

    Page 41

    Squence 1

    Programmationprocdurale

    Quand un programme est termin (ou une partie de programme), la phase de tests est primordiale pour limiter les incidents.

    Exercices rcapitulatifsVoici quelques exercices pour commencer vous faire rflchir sur diffrents problmes algorithmiques. Attention, chaque exercice est important et permet de mettre en pra-tique un aspect prcis. Donc, faites-les tous et n'hsitez pas passer du temps dessus. Ces notions sont fondamentales pour la suite. Si certains points ne sont pas clairs, vous risquez d'avoir d'importantes difficults dans la squence suivante. Vous tes en train de mettre en place les fondations de vos connaissances: une maison qui n'a pas de fonda-tions solides ne peut pas tenir debout.

    Exercice 13

    Voici une squence algorithmique:si (A = B ou A C) et (B C) alors A B C si A < B alors B A C 3 sinon A B finsi C 2 * Csinon A 2 * Cfinsi

    Donner la valeur des 3 variables aprs excution de la squence algorithmique si, au dpart, ces variables sont initialises :a) A = 2, B = 5, C = 2b) A = 9, B = 9, C = 4c) A = 4, B = 2, C = -1

    Exercice 14

    On vous propose l'algorithme suivant qui permet de saisir des nombres (arrt de la saisie quand on tape 0), de faire le cumul de ces nombres et de l'afficher.Trouvez les erreurs (erreurs qui peuvent tre de syntaxe ou de logique du pro-gramme).programme cumul nombre, cumul: numriquedebut afficher "saisir un nombre" saisir un nombre tantque nombre = 0 cumul cumul + 1 afficher "saisir un nombre" saisir un nombre fintantque afficher "le cumul est " + "cumul"fin

  • 8 2944 TG PA 00

    Page 42

    Squence 1

    Programmationprocdurale

    Exercice 15

    crire lalgorithme qui demande le nom de la ville, le nombre dhabitants, et qui affiche un message du type:Grasse possde 35000 habitants

    Exercice 16

    crire lalgorithme qui permet de saisir un prix en euro et qui affiche le rsultat en Franc.

    Exercice 17

    crire l'algorithme qui permet de saisir une moyenne (vous n'avez pas la calculer mais juste la saisir) et dafficher un message personnalis suivant sa valeur:Si la moyenne atteint les 10, il faut afficher "Passage". Si la moyenne est en dessous de 10 mais atteint au moins 8, alors il faut afficher "Redoublement". Enfin, pour une moyenne trop basse (en dessous de 8), il y a "Exclusion".

    Exercice 18

    Un robot conduit une voiture. Il peut excuter 3 actions: "s'arrter", "ralentir", "pas-ser", en fonction de la couleur du feu qui sera une variable saisie. crire l'algorithme qui permet de saisir la couleur du feu (en vrifiant la saisie) et d'afficher l'ordre du robot correspondant la couleur.

    Exercice 19

    crire l'algorithme qui permet de saisir plusieurs notes et d'afficher la moyenne. On arrtera la saisie en posant la question lutilisateur "Voulez-vous continuer?".

    Exercice 20

    crire l'algorithme qui permet de saisir 20 nombres et d'afficher le nombre de valeurs positives ou nulles, et le nombre de valeurs ngatives qui ont t saisies.

    Exercice 21

    crire lalgorithme qui permet de saisir plusieurs notes sur 20 et qui affiche la note la plus basse et la note la plus haute. On arrtera la saisie en posant la question l'utilisateur.

    Exercice 22

    crire l'algorithme qui permet de saisir des tempratures (on arrtera la saisie en posant la question) puis dafficher la temprature la plus basse et la temprature la plus haute.

  • 8 2944 TG PA 00

    Page 43

    Squence 1

    Programmationprocdurale

    Exercice 23

    crire l'algorithme qui permet de saisir une suite de valeurs numriques (on arrtera la saisie en posant la question) puis d'afficher un message prcisant si la suite est strictement croissante.

    Exercice 24

    crire l'algorithme qui permet de dire si un nombre est premier ou non. L'algorithme doit fonctionner pour plusieurs nombres. Un nombre est premier s'il n'est divisible que par 1 et par lui-mme.

    Exercice 25

    crire l'algorithme qui permet de saisir 365 tempratures et d'afficher au final les extrmes.

    Exercice 26

    Lorsque l'inventeur du jeu d'chec prsenta son invention au roi des Perses, celui-ci fut merveill et informa le crateur qu'il tait prt satisfaire n'importe quelle demande venant de sa part. Aprs un court instant de rflexion, l'inventeur demanda qu'on lui mette 1 grain de bl dans la premire case, 2 dans la deuxime, 4 dans la troisime et ainsi de suite en doublant chaque fois le nombre de grain. Bien que surpris par la modestie de la demande, le roi ordonna son garde grenier de prpa-rer le prsent. crire l'algorithme qui calcule le nombre de grains promis par le roi, sachant qu'un chiquier est constitu de 64 cases.

    Exercice 27

    crire le programme qui permet de saisir un nombre de secondes (contrler que ce nombre soit entre 0 et 86400) et qui affiche la conversion sous forme HH:MM:SS.Optimisez le programme pour bien avoir des positions pour chaque valeur (donc en ajoutant si ncessaire des 0 l'affichage).

    2G. Passage sur machineIl y a bien longt