Top Posters
Since Sunday
A free membership is required to access uploaded content. Login or Register.

Programmation langage C.docx

Uploaded: 6 years ago
Contributor: redsmile
Category: Data Structures
Type: Other
Rating: N/A
Helpful
Unhelpful
Filename:   Programmation langage C.docx (630.62 kB)
Page Count: 104
Credit Cost: 2
Views: 110
Last Download: N/A
Transcript
Programmation Langage C PROGRAMME INFORMATIQUE Algorithmique et programmation en langage C Chapitre Premi res notions d'informatique - contenu d'un ordinateur - unit s et performances actuelles - fonctionnement couches syst mes La m moire vive Les m moires de masse - particules ferromagn tiques - le formatage - la FAT Le processeur - Variables Bus Registres Ordonnancement Les syst mes d'exploitation Chapitre Le codage de l'information repr sentation des donn es Les puissances Chapitre Du probl me l'algorithme - Analyse chronologique - D termination des ressources les variables les constantes analyse d'un exemple conv Euro - Algorithmique - Organigrammes - Test - Programmation en langage de haut niveau Programmation les diff rentes tapes - Edition - Compilation Interpr tation - Edition des liens - Ex cution - Tests Chapitre Le langage C - historique Etapes de programmation er sem VI GCC Les logiciels tout en un eme sem Etude d taill es d'un programme C Hello Notion d'instruction - ex printf scanf E S Commentaires Documentation DOXYGEN Chapitre Les variables - lieu de d claration et port e - domaine de d finition - plage de valeurs Constantes Type de donn es scalaires - table d'interpr tation - alt rateurs de type - langage faiblement typ Affectation - initialisation - affectation cach e Chapitre Entr es Sorties format es - formats - alignement - caract res sp ciaux Chapitre Calculs et comparaisons - op rations arithm tiques - notion de CAST - op rateurs de comparaison valuation paresseuse - op rateurs logiques - op rateurs binaires Structures de contr le - conditionnelles - r p titives Chapitre Les pointeurs - d finition - usage - pointeurs et tableaux Chapitre Types de donn es complexes - tableau monodimensionnel - tableau multidimensionnel - repr sentation m moire - adressage des cases Gotoxy Chapitre Les cha nes de caract res - convention - d claration - fonctions d di es Chapitre Les nombres al atoires La programmation v nementielle Chapitre Allocation dynamique de m moire - retour sur la d claration statique - probl me et solution - malloc - allocation de variable tableau mono multi Chapitre Les sous-programmes en C - utilit - structuration - lieu d' criture visibilit - biblioth ques Proc dure Fonction - appel - prototype Chapitre Passage des param tres - par valeur - par adresse - allocation dynamique en sous-pg Les arguments du MAIN Chapitre La r cursivit - notion de clone - condition d'arr t - ensemble cardinal d croissant Chapitre Les structures - principe et utilit - d claration en biblioth que - structures dans structures - acc s aux champs statiques - tableau de structures - allocation dynamique - pointeur sur structure - acc s aux champs dynamiques - r cursivit listes cha n es Les unions Chapitre Les fichiers - impl mentation sur disque - ouverture et droit d'acc s - fermeture - fichier texte binaire - lecture criture - d placement - marquage de fin Chapitre Les listes cha n es - allocation dynamique de structure - cha nage des cellules - champs donn es champs pointeurs - d but ancre et fin NULL - construction - parcours - affichage - ajout en t te - ajout en queue - ajout la bonne place - suppression Les tables de hachage les arbres les graphes SOMMAIRE Chapitre - Qu est-ce que la programmation Qu allez-vous apprendre dans ce cours cette ann e Tout part du probl me r soudre Le r le de l ing nieur En r sum Chapitre - Programmation Du probl me l algorithme Premi re tape Analyse du cahier des charges Deuxi me tape l analyse du probl me Analyse chronologique Analyse descendante Troisi me tape D termination des ressources Notion de variable Quatri me tape l algorithme organigramme ou l utilisation d un pseudo langage Conception Avantages Exemple Calcul du PGCD par la m thode d Euclide Organigramme Cinqui me tape Test Sixi me tape Programmation en langage dit de haut niveau Edition d un programme C Relecture du code pour en v rifier la syntaxe Compilation ou Interpr tation V rification syntaxique Cr ation du fichier objet obj Cr ation du fichier ex cutable exe Edition des liens D finition du protocole de test d ex cution Chapitre - Un peu de culture generale Composition d un ordinateur Ext rieur l Unit Centrale et ses p riph riques d Entr e Sortie sch ma Int rieur Les constituants de l Unit Centrale sch ma R le de l ordinateur Son fonctionnement Le stockage des donn es m moire vive m moire morte et m moire de masse Les donn es Les m moires Retour sur les variables La FAT File Allocation Table le NTFS NT File System Le Pourquoi du formatage Le Pourquoi de la d fragmentation Les traitements des donn es processeur La notion de registre Les bus de donn es L ordonnancement des instructions Le binaire ou la gen se d une information ou le courant passe t il fil fils n fils Le codage d codage de l info La Table d Interpr tation S mantique - TIS Les programmes les applications Chapitre - Le langage C Premiers pas Historique R capitulatif des tapes de programmation Analyse du probl me papier D termination des ressources papier Ecriture du code pseudo langage algorithmique et ou de l organigramme papier Traduction de l algorithme en langage de haut niveau VI blocnote logiciel d di Relecture yeux - Simulation papier Compilation du code et dition de liens GCC logiciel d di Composition d un programme en C Inclusion des biblioth ques de fonctions Le corps du programme Premier programme Bonjour le monde Les instructions Instruction simple Bloc d instructions Les commentaires Un exemple sous Dev-C Chapitre - Les variables Les types simples ou scalaires R le et convention d criture D claration de variable Le domaine de d finition et la plage de valeurs Les alt rateurs de type short long signed unsigned Les types scalaires de donn es int float char pointeur Nombre entier int Nombre virgule float Caract re char Pointeurs int char float int Le lieu de d claration et port e Analyse d un exemple Notion de variable globale Cr er un type de donn e Conversion de type de donn es Les bool ens VRAI et FAUX Pr cisions sur les constantes L affectation L initialisation L affectation des variables scalaires Les affectations cach es Chapitre - Les entr es sorties format es Printf crire traitement de sortie Scanf lire traitement d entr e Les formats Les alignements Les caract res sp ciaux Chapitre - Calculs et comparaisons Structures de controle Les op rateurs math matiques Le CAST Les op rateurs de comparaison Les op rateurs logiques Tables de v rit des op rateurs logiques Priorit des op rateurs Op rateurs binaires de traitement des bits ET OU OU exclusif op op d calage binaire gauche de op un nombre de fois gal op op op d calage binaire droite de op un nombre de fois gal op compl ment d un op rande de type entier inversion des bits Chapitre - Structures de controle Les structures de contr le Les conditionnelles Les r p titives Chapitre - Donn es de type complexe Les tableaux Les tableaux monodimensionnels Acc s Sch ma de la repr sentation classique Un pointeur cach dans un tableau monodimensionnel Principe d adressage Les tableaux multidimensionnels Sch ma de la repr sentation classique Principe d adressage Acc s Simulation d une matrice en tableau monodimensionnel Chapitre - Donn es complexes Les cha nes de caract res Convention D claration d une cha ne Saisie Plusieurs fonctions de saisie possibles Probl me d espace m moire Affichage l cran Autres fonctions d di es Affectation Concat nation Comparaison Dimension Chapitre - Les pointeurs D finition Initialisation Adressage direct Adressage indirect Usage Op rateur unaire D claration des pointeurs Op rateur unaire Les pointeurs pour le passage de param tres par adresse une fonction Chapitre - Al atoire et Ev nementiel G n ration de nombres al atoires Inclusion des biblioth ques Initialisation du g n rateur al atoire G n ration du nombre par la fonction RAND Programmation v nementielle Chapitre - Allocation dynamique de m moire Retour sur la d claration statique de donn es Variables scalaires Tableaux Cha nes de caract res constantes Pointeurs Probl me et solution Principe de l allocation La fonction malloc La fonction sizeof Cas du tableau monodimensionnel Allocation dynamique d un tableau multidimensionnel Cas des cha nes de caract res La fonction free Chapitre - Les sous-programmes en langage C Utilit Erreur Signet non d fini Visibilit des sous-programmes Prototype d un sous-programme D claration en fichier biblioth que h Les proc dures Le type void Les fonctions Le m canisme de retour Appel des sous-programmes Graphes d appel Chapitre - Passage des param tres Le passage par valeur Le passage par adresse Cas particulier des tableaux Passage d arguments la fonction main la ligne de commande Chapitre La r cursivit D finition Utilit Notion de clone Condition d arr t Proc dure r cursive Fonction r cursive Chapitre - Les structures et les unions Les Structures D claration de type structure D claration d'une variable de type structure Les donn es membres d'une structure les champs Acc s aux champs d un objet structure Acc s aux champs d un objet structure via un pointeur Acc s aux donn es membres de structure dans le cas de structures imbriqu es Op ration sur les structures Les tableaux de structures La r cursivit et les structures Les unions Chapitre - Les fichiers Fichier ASCII Cr ation et Ouverture d'un fichier Lecture Ecriture dans un fichier texte Fermeture d'un fichier Principe de manipulation des fichiers Le caract re de fin de fichier EOF Fichiers binaires Chapitre - Les liste cha n es table de hachage arbre graphe Les liste cha n es D finition Construction Parcours Ajout Liste doublement cha n e Liste circulaire Listes de listes Les tables de hachage Les arbres Les graphes ANNEXE A R gles d criture des programmes en C ANNEXE B Les s quences d' chappement ANNEXE C Les priorit s des op rateurs ANNEXE D Classification conversion de caract re ctype h ANNEXE E Traitement de cha nes de caract res string h ANNEXE F Fonctions d'aide g n rales stdlib h ANNEXE G TABLE ASCII ET TABLE ASCII ETENDUE Chapitre - Qu est-ce que la programmation Qu allez-vous apprendre dans ce cours cette ann e Ce cours s adresse des tudiants n ayant jamais pratiqu la programmation mais ayant malgr tout d j touch voire allum un ordinateur quelle audace et d sireux de comprendre comment cette diabolique machine peut-elle bien tre devenue un outil indispensable dans notre vie de tous les jours alors que nos grands parents n en ont peut- tre jamais utilis un et n en auront surement jamais le besoin Aujourd hui vous utilisez l ordinateur presque par r flexe habitu ce qu il ait r ponse quasi tout Mais comment donc est-ce possible que cette bo te sache tout faire Qu elle regorge d autant de connaissances d informations La r ponse cette question c est l Homme dont l intelligence in gal e euh oui le robot qui surpasse l homme ce n est pas encore pour tout de suite c est encore de la science-fiction surtout si on respecte les lois d Isaac Asimov L Homme donc qui sait comment stocker cette formidable quantit d informations dans ces boites et comment les traiter ensuite pour apporter des r ponses la plupart des probl matiques certaines r sistent encore Le lecteur habile et perspicace aura not que certains mots sont en gras En effet d s cette simple introduction j introduis un vocabulaire intrins que cet enseignement et indispensable sa bonne compr hension Si vous n en retenez qu un peu retenez le gras - Mais revenons l Homme dont l intelligence n est plus prouver m me si on peut parfois en douter et qui tr s modestement place cette intelligence un haut-niveau dans une hypoth tique hi rarchie dont le bas-niveau serait la fameuse bo te et ses composants lectroniques barbares Tout ca pour vous dire que si vous souhaitez devenir programmeur ou simplement avoir go t succinctement la programmation dans une formation d ing nieur beaucoup plus ambitieuse qui vous emportera vers des sommets eh bien il vous faudra tre capable de relier le bas-niveau au haut-niveau Tout part du probl me r soudre Commen ons donc par se placer au haut-niveau celui de l intelligence Vous allez voir ce n est pas si simple que a Le haut-niveau c est le niveau o le probl me r soudre est exprim dans un bon vieux langage oral prenons le fran ais par exemple a facilitera un peu Imaginez donc Vous tes d j ing nieur ans a passe vite et ce titre vous utilisez votre savoir pour r soudre le probl me d un client Ce bon client vous exprime sa probl matique dans son langage lui Ca donne quelque chose comme a Je travaille la FNAC et je voudrais que vous me trouviez une solution pour vendre des billets de spectacle depuis des magasins FNAC dans la France enti re ou encore J ai avions qui se posent Roissy Carles De Gaulle chaque jour comment organiser au mieux les atterrissages Quelques conclusions imm diates Il n est pas informaticien Il n a pas tout dit et vous avez toutes les chances qu il vous appelle dans quelques jours pour vous faire la Colombo Ah au fait j oubliais de vous dire Rien ne prouve que ce que vous lui proposerez apr s des mois de travail lui convienne Le r le de l ing nieur Votre r le c est de d m ler ce sac de n uds et de proposer une solution efficace votre client Proposer une solution ca ne veut pas forc ment dire d velopper une solution originale de A Z Ca veut dire exploiter ses connaissances personnelles du domaine concern exploiter l exp rience acquise au fil des ann es d activit et de ses propres centres d int r t et mettre en place une communication efficace avec le client pour ne pas faire fausse route dans ses choix Sans oublier les fameux tests r guliers que tout d butant minimise syst matiquement commettant ici sa plus grande erreur mais ne faut-il pas toucher pour v rifier que c est chaud m me si on tait pr venu - Des connaissances personnelles vous en avez peut- tre De l exp rience acquise vous allez en accumuler tout au long de cette formation Des erreurs vous allez en faire beaucoup j esp re et vous devriez tre capable d en apprendre beaucoup de choses Vos choix il faudra les justifier Il vous faudra tre ing nieux et choisir au mieux vos traitements et vos tests Vous aurez besoin de ma triser le haut-niveau celui de l intelligence celui du langage oral celui du client qui parle en fran ais sans avoir les id es toujours claires et vous aurez besoin de ma triser le bas niveau celui de l ordinateur celui de l lectronique et des contraintes du binaire en attendant de passer au quantique un jour mais ne retombons pas dans la science-fiction Et bien videmment vous aurez besoin de ma triser toute la cha ne entre les deux qui passe par l analyse d taill e de la probl matique chronologique et descendante l laboration du cahier des charges lorsqu il n est pas fourni la r daction des algorithmes ou organigrammes le codage dans un langage appropri le C choisi pour ses performances et son efficacit dans la gestion des contraintes du bas niveau optimisation la compilation de ce code l ex cution des tests interm diaires et finaux la validation de la solution finale recette Ouf Et tout ca en collaboration troite avec le client quel qu il soit pour optimiser le temps de d veloppement En r sum HAUT NIVEAU BAS NIVEAU Le client l intelligence l oral le cahier des charges L lectronique l ordinateur le binaire VOUS laboration de la solution le programme HAUT NIVEAU BAS NIVEAU Le client l intelligence l oral le cahier des charges L lectronique l ordinateur le binaire VOUS laboration de la solution le programme Voil Un petit aper u du contenu de cette premi re ann e d tude L acquisition de tout a ne sera pas forc ment simple vous aurez des difficult s mais on ne vous en voudra pas pour ca C est normal Ce qui ne l est pas en tous cas pour un ing nieur qui se respecte c est de ne pas chercher d passer ses difficult s Et pour cela beaucoup de solutions vous sont propos es l cole Camarades association tutorat soutien et professeurs votre coute et disposition Utilisez-les On vous reprocherait de ne pas le faire et de vous laisser glisser reflet de la mauvaise attitude que vous pourriez avoir face aux difficult s du monde professionnel Chapitre - Programmation Du probl me u resultat en passant par l algorithme Commen ons par nous occuper du haut niveau L id e c est d essayer de comprendre les attentes du client ou de d cortiquer un cahier des charges lorsqu il est fourni Comment instaurer un dialogue avec le client afin d obtenir des pr cisions sur tous les points obscurs Dans quelle mesure sommes-nous libre de faire des choix lorsque le client n a pas de pr cision apporter Comment justifier ces choix Quels sont les bons crit res de choix Comment organiser notre propre pens e Comment d finir notre m thode Autant de questions auxquelles nous allons essayer d apporter une r ponse Premi re tape Analyse du cahier des charges Le cahier des charges est un document contractuel qui vous lie votre client Il pr cise les attentes de ce dernier et vous fourni un cadre d ex cution Rien de ce qui n est crit au cahier des charges ne peut vous tre exig et tout manquement ce qui y figure en termes de respect des contenus et des d lais peut entra ner des p nalit s en euros centaines d euros voire millier d euros dans la vie professionnelle en terme de points sur l cole - Armez-vous d un surligneur et lisez attentivement le cahier des charges Si vous dialoguez avec le client prenez un papier et un stylo Identifiez les noms Les noms repr sentent la plupart du temps les donn es les informations manipuler Ces donn es devant tre stock es en m moire les identifier permet d valuer les ressources m moire n cessaires votre programme Identifiez les verbes Les verbes correspondent aux actions aux traitements r aliser Ces traitements tant r alis s par le processeur les identifier permet d valuer la charge processeur et donc le temps d ex cution de votre programme L objectif final est d identifier Les donn es Les traitements Les r sultats fournir Place m moire et charge processeur temps d ex cution sont les param tres permettant de d terminer l efficacit de votre solution Deuxi me tape l analyse du probl me Analyse chronologique Maintenant que vous avez identifi l ensemble des traitements ex cuter il est important d y mettre de l ordre En effet rien ne dit qu la r daction du cahier des charges ou lors du dialogue avec le client les id es soient arriv es dans un ordre logique L analyse chronologique consiste d finir la succession logique des tapes r aliser pour r soudre le probl me Analyse descendante Apr s avoir mis les diff rentes tapes de traitement dans l ordre il peut s av rer n cessaire de d composer le probl me associ chaque tape en sous probl mes jusqu atteindre des taches l mentaires en se mettant la place de l utilisateur Par exemple chercher le maximum d une suite de valeurs peut se d composer en Obtenir les valeurs Comparer la premi re la deuxi me et conserver la plus grande Comparer la valeur trouv e pr c demment la me et conserver la plus grande R p ter l op ration jusqu avoir compar toutes les valeurs Annoncer la plus grande valeur trouv e Pas mal Mais comment obtenez-vous les valeurs Pouvez-vous pr ciser Autre exemple Calcul du PGCD par la m thode d Euclide Obtenir A et B Calculer la val abs de la diff rence entre A et B Remplacer le plus grand de A et B par cette diff rence R p ter jusqu ce que A B Afficher r sultat A B Troisi me tape D termination des ressources Notion de variable La ressource cache une notion de co t Co t m moire co t processeur co t en temps co t en place Dans ce cours nous parlerons de ressource lorsqu il s agira de place m moire pour stocker une information Afin de d finir la taille de la zone m moire n cessaire au stockage de cette information ainsi que le principe de codage et d codage nous y reviendrons il faut r server une variable de stockage La notion de variable une variable est une ressource mat rielle permettant de stocker une information Cette ressource prise dans les barrettes m moire doit tre dimensionn e et typ e Quatri me tape l algorithme organigramme ou l utilisation d un pseudo langage Un algorithme correspond l laboration dans un pseudo langage proche du langage humain d une succession d actions permettant de mener bien un objectif donn Conception Reprendre une une les taches l mentaires issues de l analyse descendante et crire la succession d instruction faire ex cuter par la machine pour r aliser chaque tache commenter l algorithme pour le rendre compr hensible respecter une pr sentation rigoureuse syntaxe et indentation et choisir des noms significatifs aux variables lors des d finitions des zones de stockage des donn es voir les annexes pour les r gles d criture Avantages Le pseudo code obtenu est ind pendant du langage d impl mentation final La r alisation du programme ne sera plus qu une tape de traduction Exemple Calcul du PGCD par la m thode d Euclide Algorithme PGCD-Euclide DEBUT declaration des variables Variables A B Diff entiers obtention des valeurs A et B Ecrire entrez la valeur de A Lire A Ecrire entrez la valeur de B Lire B boucle de traitement Tant que A B faire D but Diff Abs A B Si A B alors A Diff Sinon B Diff Fin Affichage du resultat Ecrire Le PGCD est A FIN Organigramme tablir l'organigramme c'est traduire l'algorithme en une forme poss dant sept sens tout d'abord la notion de d but de traitement puis celle d'introduction de donn e de traitement unitaire interne d'alternative qui suivant le r sultat du test traitera l'information suivant une voie ou l'autre - de r p titive ou boucle qui r p tera un certain nombre contr l de fois une suite d'instructions qui seront crites dans le rectangle ci-contre Le contr le du nombre de fois que sera ex cut e la boucle se fait par un l ment qui devra appara tre une fois avant d'entrer dans la bo te et en fin de boite de sortie de r sultat puis enfin de fin de traitement Exemple du PGCD D but Fin Ressources A B Diff Le Pgcd est A Tant que A B Diff A - B A Diff B Diff A B vrai faux D but Fin Ressources A B Diff Le Pgcd est A Tant que A B Diff A - B A Diff B Diff A B vrai faux Tout algorithme aussi compliqu soit-il peut se traduire l'aide de ces sept sens C'est dire toute l'importance de cette formalisation Apr s l tape de test de la solution propos e il reste en faire une traduction dans un langage de programmation sp cifique choisi Cette traduction est en fait l'interface entre votre algorithme ou votre organigramme et un programme appel interpr teur ou compilateur implant dans un PC ou une calculette programmable Ce programme implant dans votre machine traduira lui aussi en langage machine vos instructions pour qu'elles soient ex cut es Cinqui me tape Test Faire tourner le programme la main pour en v rifier l efficacit A B Diff Sixi me tape Programmation en langage dit de haut niveau Transcription du pseudo code dans un langage choisi pour ses sp cificit s en respectant la syntaxe associ e Edition d un programme C Editer un programme veut dire crire un programme par r f rence aux diteurs de texte blocnote word VI Les biblioth ques Le fonctionnement du pr -compilateur biblioth que personnelle obligatoire D composition du corps en fonctions th matiques Le programme dit principal include mabib h int main declaration des variables int a b diff obtention des valeurs printf entrez la valeur de A scanf d a printf entrez la valeur de B scanf d b boucle de calcul du pgcd while a b diff abs a b if a b a diff else b diff affichage du resultat printf Le PGCD est d n a return Relecture du code pour en v rifier la syntaxe Attention aux au pour l affectation et au pour l galit Compilation ou Interpr tation V rification syntaxique Cr ation du fichier objet obj Compilation s par e Cr ation du fichier ex cutable exe Edition des liens D finition du protocole de test d ex cution Penser aux cas limites Qu est-ce qu un bon r sultat Bien souvent toute l nergie de l quipe de d veloppement est consacr e l obtention du programme le plus performant quitte y passer la nuit la veille de la livraison au client Or un bon r sultat ce n est pas la solution la plus performante Un bon r sultat c est le r sultat de la meilleure organisation d quipe une quipe o le leader est clairement identifi il sera utile une quipe o chacun a pu exprimer ses opinions et o les d cisions ont t prises en concertation sous la direction du leader une solution labor e apr s une analyse performante et efficace un d coupage en morceau de la r alisation avec des tests de chacune des parties inutiles de passer la suite tant que la partie pr c dente n est pas efficacement d velopp e sauf en cas de parall lisme un respect du cahier des charges sous peine de sanction de la part du commanditaire un respect du budget Un bon r sultat c est celui qu on obtient gr ce une bonne conduite de projet Exercice Un exemple pratique Le distributeur automatique de billets de banque R alisez l analyse descendante permettant de d finir les diff rentes taches accomplir par le programme menant bien cette op ration Chapitre - Un peu de culture generale Pour aller plus loin et d couvrir des notions th oriques plus complexes il nous faut maintenant parler la m me langue enfin disons plut t le m me langage L id e ici c est d acqu rir un vocabulaire commun de comprendre un peu mieux la terminologie utilis e par les informaticiens Composition d un ordinateur Ext rieur l Unit Centrale et ses p riph riques d Entr e Sortie sch ma Int rieur Les constituants de l Unit Centrale sch ma La communication entre les diff rents organes Les unit s employ es Mhz M ga-octets Les performances actuelles Cela constitue le hardware R le de l ordinateur Stocker de l information des donn es Manipuler ces donn es Effectuer des traitements sur ces donn es Permettre la visualisation et l exploitation de r sultats STOCKAGE DES DONNEES TRAITEMENT DES DONNEES Bus STOCKAGE DES DONNEES TRAITEMENT DES DONNEES Bus Son fonctionnement La communication homme-machine De l lectricit l homme l empilement des couches sch ma Peter Pietro Bob Ali Maria Rapport BIOS WINDOWS Word Syst me d exploitation Programmes applications Winamp MSN Rapport Benabar Pierre Paul Documents Peter Pietro Bob Ali Maria Rapport BIOS WINDOWS Word Syst me d exploitation Programmes applications Winamp MSN Rapport Benabar Pierre Paul Documents La m moire vive le swap Transfert des donn es m moire processeur les bus Le stockage des donn es m moire vive m moire morte et m moire de masse Les donn es Commen ons par d finir une notion importante pour ce cours de programmation la notion de donn e Une donn e est un nom g n rique pour traduire toute information utilis e par l ordinateur Une information saisie par l utilisateur ou Data Une information qui provient du r seau d internet Un programme qui a d j t install dans l ordinateur Remarque le fait que les programmes soient eux-aussi consid r s comme donn es est tr s important Les m moires Pour que votre ordinateur puisse manipuler des donn es informations mais aussi programmes je vous le rappelle il doit au pr alable les stocker La zone de stockage des donn es s appelle la m moire Il y a plusieurs types de m moire La m moire vive ou Random Acess Memory RAM qui est volatile La m moire morte ou Read Only Memory ROM qui est permanente La m moire de masse les disques durs disquettes clefs USB CD DVD ventuellement r inscriptible La m moire morte ne s efface pas lorsque l ordinateur est teint Elle contient entre autre le BIOS Basic Input Output System qui sert au d marrage de l ordinateur M moire morte de type EPROM Intel Wikip dia La m moire vive est constitu e par les barrettes m moires Elles mettent disposition de l ordinateur une unit de stockage l mentaire appel e octet ou Byte en anglais Une barrette sera donc caract ris e par sa capacit de stockage par exemple Go mais galement par sa vitesse d acc s son mode d acc s etc Pour en permettre l acc s chaque octet est num rot Une barrette de Go offre donc des octets num rot s de milliard Une donn e peut tre stock e dans un ou plusieurs octets en fonction de sa taille L ensemble des octets occup s par une donn e s appelle une variable Le num ro du premier octet occup par cette variable constituera l adresse de la variable Une variable sera donc identifi e par la machine par son adresse sa taille en octets et la nature du contenu taille et nature tant d finis par ce qu on appelle son type Encore une bonne dose de vocabulaire hein Diff rents types de RAM de haut en bas DIP SIP SIMM broches SIMM broches DIMM RIMM Wikip dia La notion de donn e regroupant galement les programmes ces derniers doivent galement tre stock s dans la m moire vive de l ordinateur pour tre utilis s Lorsque vous lancez ex cutez un programme install sur votre ordinateur celui-ci est mont dans la m moire vive de l ordinateur La limite de capacit de la m moire vive rappelez-vous Go dans mon exemple explique que m me si vous avez install des centaines de programmes dans votre machine vous tes limit dans le nombre de programmes que vous pouvez ex cuter simultan ment Apr s avoir ouvert Word sur ou documents lanc un programme pour courter de la musique ouvert internet pour faire des recherches et videmment MSN pour chatter avec ou copains tout en matant une vid o sur Youtube vous risquez d approcher les limites de la m moire vive de votre ordinateur sans parler du processeur et de d clencher les m canismes de swap avant de geler d finitivement tout l ensemble Enfin la m moire de masse disques durs clef USB CD DVD Ils constituent une zone de stockage permanent par opposition la m moire centrale ou vive volatile C est la zone de stockage des programmes musiques photos vid os jeux que vous installez et souhaitez conserver dans votre ordinateur Clef USB et sch ma d un disque dur Wikip dia Retour sur les variables On a pas fini d en parler tellement cette notion est importante et complexe Nous avons vu que la m moire stockait toutes sortes d informations des programmes et des donn es Ah bon Mais je croyais que les programmes taient aussi des donn es Je ne comprends plus rien Tout d pend du point de vue o on se situe Pour un ordinateur un programme est une donn e une information est une donn e etc Pour un programme un traitement est une instruction et les instructions manipulent des donn es ou data ou entr e stock es dans des variables pr cisant ainsi leur type leur taille et leur principe de codage Je vous ai dit que le plus gros probl me c est le vocabulaire employ La FAT File Allocation Table le NTFS NT File System Nous en avons d j parl une donn e information musicale photo ou programme occupe un certains nombres d octets sur son support de stockage m moire vive ou m moire de masse Pour que le syst me de votre ordinateur soit en mesure de retrouver cette donn e l o elle se trouve sa position est r f renc e dans une table d allocation des octets ou des fichiers un fichier pouvant contenir n importe quel type de donn e photo vid o musique programme texte appel e FAT FAT NTFS en fonction des diff rents syst mes Vous verrez les propri t s des diff rentes tables dans le cours d Architecture des ordinateurs Retenez que la table d allocation des fichiers traduit tout moment la localisation d un fichier sur disque en termes de piste et secteur ou encore de cluster ou bloc Si vous abimez cette table vos donn es sont inaccessibles bien que toujours pr sentes sur le disque Le Pourquoi du formatage Cette op ration r organise les particules magn tiques d un support de m moire de masse et pour objectif d en supprimer le contenu de mani re d finitive m me si des sp cialistes sont en mesure de r cup rer des donn es apr s formatage jusqu fois Le Pourquoi de la d fragmentation Un gros fichier prendra forcement plusieurs blocs Et lorsque vous effacerez ce fichier vou s lib rerez les blocs qu il occupait A force de r p ter cette op ration vous cr ez une fragmentation des fichiers qui en augmente le temps d acc s La d fragmentation correspond une r organisation des blocs d un fichier de mani re les ranger cons cutivement et ainsi viter les mouvements de la t te de lecture r duisant donc le temps d acc s Les traitements des donn es processeur Le processeur est l organe de calcul de l ordinateur Il ex cute les instructions du programme en m moire vive et traite les donn es qui s y trouvent galement Pour cela il dispose de quelques op rations de base et de quelques accumulateurs d pendant du type de processeur La notion de registre Les registres sont des zones temporaires de stockage de l information avant leur utilisation par le processeur Ils sont en nombre r duit variable selon le type de processeur dans votre ordinateur Les bus de donn es Ce sont des circuits lectroniques ou des fils servant au transport des informations de la m moire vers le processeur des p riph riques vers la carte m re L ordonnancement des instructions C est le s quenceur qui garanti l ordre logique d ex cution du programme amenant au r sultat Le binaire ou la gen se d une information L informatique actuelle se base sur le codage binaire Un peu manich en le binaire c est ou noir ou blanc chaud ou froid vrai ou faux Ces notions qui s opposent deux deux sont insuffisantes pour traduire toutes les subtilit s du haut niveau et de ses plut t joli assez grand entre gris clair et gris fonc En attendant de passer l ordinateur quantique qui n est pas le propos de ce cours et qui n est pas encore vraiment au point il faut bien l avouer nous d couvrirons comment le binaire somme toute assez basique nous permet malgr tout de coder des informations complexes ou le courant passe t il Notions sur le langage binaire fil fils n fils Si vous teniez fil lectrique Le codage d codage de l info La Table d Interpr tation S mantique - TIS Les informations de haut niveau sont des informations complexes Pour r cup rer cette information une phrase par exemple le binaire nous permettra de coder une lettre dans une variable de type caract re puis de regrouper ces caract res pour former des mots de regrouper les mots pour former la phrase etc Cet assemblage ce codage ne sera compr hensible que s il est correctement d cod Pour cela il sera n cessaire d utiliser la table d interpr tation s mantique T I S adapt e Codage binaire sur octet Table d interpr tation s mantique des entiers Table d interpr tation s mantique ASCII Table d interpr tation s mantique des plongeurs sous-marins A B C Y Z a b Z Raie manta M rou Barracuda Sardine Poisson clown Poisson lune Mur ne Congre J ai plus d air Il me reste bars Je suis niveau J ai de l eau dans mon masque Mais ce n est pas encore termin Une fois la phrase r cup r e il faut encore en comprendre le sens Les programmes les applications Cela constitue le software Chapitre - Le langage C Premiers pas Historique Langage la fois de haut niveau et de bas niveau cr dans les ann es par B W Kernighan et D M Ritchie pour le d veloppement du syst me UNIX par les laboratoires BELL pr d cesseur le langage B - Nombreuses normalisations depuis Norme IEEE X -J C natif ou encore norme ANSI Haut niveau Langage structur sous programmes structures de contr le structures de donn es Bas niveau Op rateurs permettant de manipuler les instructions et les donn es au niveau du langage-machine R capitulatif des tapes de programmation Analyse du probl me papier C est l analyse chronologique puis descendante par exemple Cette tape papier est indispensable pour laborer un programme efficace Elle d termine l ordonnancement des op rations r aliser puis pr cise la r alisation de chaque tape D termination des ressources papier Lister les emplacements m moire n cessaires au stockage des donn es en entr e aux tapes de calcul et de traitement au stockage des r sultats en sortie Ecriture du code pseudo langage algorithmique et ou de l organigramme papier Traduction de l algorithme en langage de haut niveau VI blocnote logiciel d di Ne vous pr cipitez pas Les tapes pr c dentes sont les plus importantes Bien faites elles vous feront gagner un temps consid rable pour l criture du code final en C par exemple Un code C crit directement n cessitera de nombreuses modifications qui conduiront un programme rapi c un PUZZLE ind buggable Relecture yeux - Il est imp ratif de relire le code crit c'est- -dire de v rifier les erreurs de syntaxe la d claration des variables Simulation papier Cela correspond galement faire tourner la main le programme r alis pour v rifier son fonctionnement Toutes les variables doivent tre suivies Toute modification de la m moire de l ordinateur doit tre simul e sur papier Compilation du code et dition de liens GCC logiciel d di V rification syntaxique dition des liens et cr ation de l ex cutable par la machine Composition d un programme en C Inclusion des biblioth ques de fonctions But Faire appel toutes les biblioth ques qui seront n cessaires par exemple la biblioth que standard d entr e sortie include stdio h afin d en viter la r criture Biblioth que personnelle obligatoire Le corps du programme Ecriture des sous-programmes ventuels Le programme principal le MAIN point d entr e dans le programme Premier programme Bonjour le monde Les d buts et fins de bloc Les instructions termin es par des points-virgules Analyse d un exemple mabib h biblioth que personnelle ifndef BIB define BIB include stdio h endif monfic c include mabib h int main ce programme affiche un message a l ecran printf Bonjour le monde system pause return Les instructions Instruction simple Une instruction correspond une action faire ex cuter par la machine Elle co ncide en g n ral avec une ligne de code bien qu il puisse y avoir plusieurs instructions sur une seule ligne Les instructions sont de nature diff rente en fonction du but recherch Echange avec l utilisateur d claration d une variable attribution d une valeur une variable test sur cette valeur r p tition d une s rie de taches appel de sous-programme Exemple afficher a l ecran bonjour ou encore printf bonjour Bloc d instructions Un bloc d instructions correspond un ensemble d instructions d limit par les termes DEBUT et FIN en algo BEGIN et END en Pascal ou et en C Un programme est donc en soi un bloc d instructions La notion de bloc permet de traiter un ensemble donn d instructions en cas de r ponse positive d un test ou un autre bloc dans le cas n gatif Elle permet galement de d limiter les instructions r p ter dans le cadre d une boucle Les commentaires Les commentaires accompagnent chaque partie logique du code Ils sont indispensables pour la bonne compr hension du programme Par les diff rents membres de l quipe de d veloppement Par les correcteurs Par tout programmeur souhaitant s inspirer d un code d j crit Par le programmeur du code lui-m me lorsqu il reprend un code crit il y a quelques temps Ils seront automatiquement extraits par certains logiciels pour r aliser une documentation automatique Un exemple sous Dev-C Chapitre - Les variables Les types simples ou scalaires R le et convention d criture Une variable est une entit une ressource un objet une zone m moire une instance et oui tout ca destin stocker une information Cette information contenue dans cette variable peut varier au fil du temps ou pas Une variable dont le contenu ne doit pas bouger un comble pourra s appeler une constante Pour obtenir cette ressource il faut la r server on dira la d clarer D claration de variable Une d claration de variable consiste r server et nommer la zone m moire n cessaire au stockage d une information Pour pr ciser la taille de la zone r server la nature du contenu de cette zone et le mode de codage d codage de la zone il faut en pr ciser le type Pour donner un nom d identification la zone r serv e il suffit de le pr ciser apr s le type R gles imp ratives pour la lisibilit du code Nom de variable nom de fichier nom de r pertoire Explicites vitez x y z pr f rez age sexe nom Pas d accent pas d espace pr f rez ou pas de caract re sp cial pas de ponctuation Le domaine de d finition et la plage de valeurs Le mode de codage d codage qui est certainement le plus complexe comprendre dans la notion de variable d pend du domaine de d finition de la plage de valeur et de la Table d interpr tation s mantique TIS Pour comprendre les premi res notions la troisi me a d j t expliqu e pr c demment prenons un exemple En math matiques les entiers sont d finis sur le domaine de d finition not En C le type entier respecte ce domaine de d finition Mais il existe plusieurs types entiers d pendant du nombre d'octets sur lesquels ils sont cod s ainsi que de leur format c'est- -dire s'ils sont sign s poss dant le signe - ou ou non ce qui d termine la plage de valeurs de la variable Par d faut les donn es sont sign es Les alt rateurs de type short long signed unsigned Les alt rateurs de type vont permettre de modifier la plage de valeur des donn es Nous venons de le dire les variables sont sign es par d faut signed est donc facultatif Pour avoir une repr sentation non sign e il faut ajouter un alt rateur de type unsigned Exemple Pour un char la plage de valeur initiale puisque le type est sign est - Pour un unsigned char la plage de valeur ira de Pour un unsigned int la valeur maximale UINT MAX est d fini dans le fichier limits h et vaut Si le type est sur bits UINT MAX - Si le type est sur bits de UINT MAX L alt rateur short permet de r duire le nombre d octets utilis s pour un type L alt rateur long permet de l augmenter Dans une architecture bits une variable d clar e short int est repr sent e sur octets Les types scalaires de donn es int float char pointeur Les donn es manipul es en langage C sont typ es c'est- -dire que pour chaque donn e que l'on utilise dans les variables par exemple il faut pr ciser le type de donn e ce qui permet de conna tre l'occupation m moire le nombre d'octets de la donn e ainsi que sa repr sentation des nombres entiers int ou r els c'est- -dire virgules float des caract res une lettre seule peut tre stock e dans un octet de type char des pointeurs pointer permettent de stocker l'adresse d'une autre donn e ils pointent vers une autre donn e Il y a donc types scalaires simples en C Entier int R el float Caract re char Pointeurs int char float Voici un tableau d crivant les types de donn es en langage C et l effet des alt rateurs Type de donn e Signification Taille en octets Plage de valeurs accept e char Caract re - unsigned char Caract re non sign short int Entier court - unsigned short int Entier court non sign int Entier sur processeur bits sur processeur bits - - unsigned int Entier non sign sur processeur bits sur processeur bits long int Entier long - unsigned long int Entier long non sign float Flottant r el - double Flottant double - long double Flottant double long - Nombre entier int Les variables de type int correspondent au type normal word du processeur Elles ont une longueur de octets bits sur les machines d aujourd hui Elles peuvent tre d finies sur ou octets en fonction des architectures La valeur stock e dans un int sur octets va de - INT MIN - INT MAX - cf tableau ci-dessus INT MAX INT MIN sont d finis dans le fichier limits h et repr sentent les valeurs limites repr sentables par le type int Un nombre entier est un nombre sans virgule qui peut tre exprim dans diff rentes bases Base d cimale l'entier est repr sent par une suite de chiffres unitaires de ne devant pas commencer par le chiffre Base hexad cimale l'entier est repr sent par une suite d'unit s de ou de A F ou a f devant commencer par x ou X Base octale l'entier est repr sent par une suite d'unit s incluant uniquement des chiffres de devant commencer par Rappelez-vous les entiers sont sign s par d faut cela signifie qu'ils comportent un signe Vous trouverez de nombreux ouvrages ou documentation d crivant le stockage binaire des nombres n gatifs Nombre virgule float Un nombre virgule flottante est un nombre virgule il peut toutefois tre repr sent de diff rentes fa ons un entier d cimal ca ressemble un entier non un nombre comportant un point et non une virgule une fraction un nombre exponentiel c'est- -dire un nombre ventuellement virgule suivi de la lettre e ou E puis d'un entier correspondant la puissance de sign ou non c'est- -dire pr c d d'un ou d'un - e- E e- En r alit les nombres r els sont des nombres virgule flottante c'est- -dire un nombre dans lequel la position de la virgule n'est pas fixe et est rep r e par une partie de ses bits appel e l'exposant le reste des bits permettent de coder le nombre sans virgule la mantisse Exemple mantisse exposant - qui veut dire - Les nombres de type float sont cod s sur bits dont bits pour la mantisse bits pour l'exposant bit pour le signe Les nombres de type double sont cod s sur bits dont bits pour la mantisse bits pour l'exposant bit pour le signe Les nombres de type long double sont cod s sur bits dont bits pour la mantisse bits pour l'exposant bit pour le signe La pr cision des nombres r els est approch e Elle d pend du nombre de positions d cimales suivant le type de r el elle sera au moins de chiffres pour le type float de chiffres pour le type double de chiffres pour le type long double Caract re char Le type char provenant de l'anglais character mais sans h en fran ais permet de stocker la valeur ASCII d'un caract re c'est- -dire un nombre entier entre et Pour info Par d faut les variables sont sign es toutes quelque soit le type cela signifie qu'ils comportent un signe avec a si vous n avez pas compris - Pour stocker l'information concernant le signe en binaire les ordinateurs utilisent le compl ment deux voir cours d archi Une donn e de type char est donc sign e cela ne signifie bien s r pas que la lettre poss de un signe mais tout simplement que dans la m moire la valeur codant le caract re peut tre n gative Heureusement cela n a pas beaucoup de cons quence pour nous Mais quand m me Si on d sire par exemple stocker la lettre B dans une variable de type char son code ASCII est on pourra d finir cette donn e soit en mettant le nombre dans la variable c est possible car le C est transtypable soit en y mettant 'B' o les apostrophes simples signifient code ascii de char toto d claration toto ou toto B affectation Il n'existe pas de type de donn es pour les cha nes de caract res suite de caract res en langage C Pour cr er une cha ne de caract res on utilisera donc des tableaux contenant dans chacune de ses cases un caract re avec une particularit pour marquer la fin de cha ne b o n j o u r Pointeurs int char float int Imaginez un parking de supermarch un samedi apr s-midi Chaque voiture repr sente une variable stockant une information Il y a des petites voitures pour les petites donn es comme les scalaires donn es de base et des camionnettes des vans des x voire des camions ou des bus pour les donn es plus grosses contenues dans les variables dites complexes les tableaux les listes les structures Lorsque vous r servez ou d clarez une variable la machine vous attribue une voiture sur le parking le parking repr sente les barrettes m moires de la taille que vous avez demand via le type de la variable mais vous ne savez pas laquelle Heureusement le pointeur est l Le pointeur c est la clef du v hicule et la machine sait toujours retrouver le v hicule dont vous avez la clef Miracle Le lieu de d claration et port e La port e d une variable est limit e son bloc de d finition Analyse d un exemple include mabib h include math h int main int a b diff printf entrez la valeur de A scanf d a printf entrez la valeur de B scanf d b while a b int x la variable x n existe que dans ce bloc local TRES DANGEUREUX diff abs a b if a b a diff else b diff printf Le PGCD est d n a system pause return Notion de variable globale Une variable sera dite globale si elle est d clar e avant tout bloc le plus souvent on les place dans la biblioth que perso Elle sera alors visible et accessible en lecture criture par tous les sous-programmes Attention au mauvais usage des globales Cr er un type de donn e Il est possible en C de d finir un nouveau type de donn es gr ce au mot cl typedef Celui-ci admet la syntaxe suivante typedef caracteristiques du type Nom du type o Caracteristiques du type repr sente un type de donn es existant par exemple float short int Nom du type d finit le nom que vous donnez au nouveau type de donn e Ainsi l'instruction suivante cr e un type de donn e lettre calqu sur le type char typedef char lettre ensuite la d claration lettre toto et toto est un char magique Nous utiliserons cette cr ation de type pour approcher la notion d objet en C via les structures Conversion de type de donn es Le langage C est un langage faiblement typ ce qui veut dire qu un type de donn e peut tre choisi pour contenir autre chose que ce pour quoi il est fait dans un but de r duire la place occup e en m moire par exemple On appelle conversion de type de donn es le fait de modifier le type d'une donn e en une autre Il peut arriver par exemple que l'on veuille travailler sur un type de variable puis l'utiliser sous un autre type Imaginons que l'on travaille par exemple sur une variable en virgule flottante type float il se peut que l'on veuille supprimer les chiffres apr s la virgule c'est- -dire convertir un float en int La table d interpr tation s mantique permettra de pr ciser le mode d interpr tation que le processeur doit utiliser pour le traitement de la donn e On retrouve cette notion de table d interpr tation s mantique dans les formats utilis s dans les entr es sorties format es L op ration de conversion peut tre r alis e de deux mani res conversion implicite une conversion implicite consiste en une modification du type de donn e effectu e automatiquement par le compilateur Cela signifie que lorsque l'on va stocker un type de donn e dans une variable d clar e avec un autre type le compilateur ne retournera pas d'erreur mais effectuera une conversion implicite de la donn e avant de l'affecter la variable int x x x contiendra apr s affectation la valeur conversion explicite une conversion explicite appel e aussi op ration de cast consiste en une modification du type de donn e forc e Cela signifie que l'on utilise un op rateur dit de cast pour sp cifier la conversion L'op rateur de cast est tout simplement le type de donn e dans lequel on d sire convertir une variable entre des parenth ses pr c dant la variable int x x int x contiendra apr s affectation la valeur Pour info Lors d'un passage de param tres un argument de type char est converti pour tre repr sent sur la longueur d'un int Il en est de m me pour un argument de type short Les bool ens VRAI et FAUX Pas de bool en ils sont remplac s par la convention pour FAUX tout ce qui est diff rent de pour VRAI Ainsi ou ou A ou - ou il fait beau correspondent la valeur bool enne VRAI Pr cisions sur les constantes La d finition la plus classique d une constante se fait par appel d une macro-d finition Exemple define NB Le pr processeur remplace alors toutes occurrences de NB dans le code par la valeur Probl me Aucune place m moire n est r serv e pour cette constante son adresse est donc inaccessible Le remplacement se fait sans contr le de l utilisation Pour rem dier cela la norme ANSI permet d utiliser le concept de variable constante c est- -dire une variable qu on ne pourra plus modifier apr s l initialisation Syntaxe const int Nb L affectation L affectation consiste attribuer une valeur une variable Sans affectation une variable contient les r sidus binaires de sa derni re utilisation L initialisation L initialisation n est autre que la premi re affectation d une variable pr alablement d clar e Elle lui donne sa premi re valeur elle peut se faire lors de la d claration Elle est parfois indispensable et toujours souhaitable Exemple fa ons de faire a int age b int age c int age d int age val age scanf d age age val Attention danger int val age val age age n a pas t initialis L affectation des variables scalaires C est l instruction permettant de ranger une valeur dans une variable Le symbole d affectation des variables scalaires en C est le symbole qu on appelle prend la valeur ne pas confondre avec l galit qu on appelle gal- gal La partie gauche du symbole re oit le r sultat de l valuation de la partie droite val val Les donn es non-scalaires c est dire de type complexe ont leur propre mode d affectation Exemple int val nb a tableau tableau val La zone m moire identifi e par le nom val re oit la valeur val nb La zone m moire identifi e par le nom val re oit la valeur de la zone identifi e par le nom nb a a La machine ajoute au contenu de la variable a et range le r sultat dans la variable a en crasant l ancienne valeur tableau tableau Attention Interdit car Tableau n est pas scalaire Vous agissez ici sur les adresses En reprenant l image du parking vous aviez bus tableau et tableau et donc clefs Vous vouliez recopier le contenu du bus dans le bus mais avec cette instruction vous n avez agi que sur les clefs Maintenant vous avez crasez la clef du bus par une copie de la clef du bus R sultat vous avez deux clefs du bus tableau et vous avez perdu la clef du bus tabelau Tant pis pour ce qu il y avait dans le bus c est d finitivement perdu Les affectations cach es Op rateurs unaires sp cifiques incluant l affectation i i-- i i i correspond i i i correspond i i i-- correspond i i- i correspond i i Diff rence entre i et i Exemple int i i printf blablabla d i printf blabla d i Qu est ce que ca donne d apr s vous Chapitre - Les entr es sorties format es Printf crire traitement de sortie Cette fonction contenue dans la biblioth que standard STDIO H attend comme premier param tre la cha ne de caract re imprimer avec ventuellement la description des formats d affichage cf table d interpr tation s mantique des variables afficher dans cette cha ne Les param tres suivants correspondent dans l ordre chaque variable dont on souhaite afficher la valeur Exemple printf La valeur des variables x et y sont d et d n x y Les deux d seront respectivement remplac s l cran par la valeur de x et de y Scanf lire traitement d entr e Cette fonction galement contenue dans la biblioth que standard STDIO H attend comme premier param tre la cha ne d crivant les formats de lecture des variables lire au clavier Les param tres suivants sont dans l ordre l adresse m moire zone de stockage des variables dont on souhaite faire saisir la valeur Exemple scanf d d n x y Le permet d acc der l adresse des variables Attention ne pas mettre d espace entre les d Les formats Les fonctions printf et scanf utilisent les m mes formats Entier d R el f Caract re c Entier R el long ld lf Hexad cimal x Cha ne de caract res s Attention fflush stdin parfois indispensable Les alignements Le printf offre en plus la possibilit de d finir le nombre d emplacements utiliser pour l affichage d une valeur dans le but d aligner des valeurs l cran par exemple Exemple printf valeur de X f donnera l cran valeur de X chaque repr sentant un espace Les caract res sp ciaux Les fonctions printf et scanf utilisent certains caract res sp ciaux pr c d s par un anti-slash n t A la ligne n tabulation t beep b Attention l utilisation de ces caract res sp ciaux dans un scanf Chapitre - Calculs et comparaisons Structures de controle Les op rateurs math matiques Les op rateurs sont soit unaires binaires ou ternaires c est dire qu ils acceptent un deux ou trois op randes - Dans le cas o les op randes ne sont pas de m me type le compilateur agrandi en g n ral l op rande le plus troit L affectation d un type troit un type plus large n entra ne aucun probl me et se fait implicitement conversion implicite Dans le cas contraire il y a risque de perte d information Le CAST La notion de CAST conversion explicite permet d effectuer un changement de type de mani re explicite en pr cisant la conversion Attention aux cast automatiques Exemple float C int A B C A B donne division de deux entiers C float A float B donne division de deux flottants Les op rateurs de comparaison Les op rateurs logiques ET OU NON Tables de v rit des op rateurs logiques A B Not A A et B A ou B A xou B V V F F V F V F F F V V V F F F V V V F F V V F Priorit des op rateurs Op rateurs binaires de traitement des bits Certains op rateurs agissent directement sur les bits composant le codage de la variable Ces op rateurs sp cifiques ne sont applicables qu aux op randes sign s ou non de type char short int et double ET Exemple ne pas confondre avec VRAI OU Exemple OU exclusif Exemple op op d calage binaire gauche de op un nombre de fois gal op Exemple x X X op op d calage binaire droite de op un nombre de fois gal op Exemple x X X compl ment d un op rande de type entier inversion des bits Exemple x X Chapitre - Structures de controle Les structures de contr le Le programmeur dispose d un ensemble de structures de contr les pour l criture d un programme Ces structures permettent d effectuer des tests et de r p ter une s quence d instructions en fonctions de crit res pr d finis Les conditionnelles Test If Exemple if age printf Vous avez droit la r duction Jeune if age tarif tarif printf Le prix de votre billet est d tarif Test If Else Exemple if age age tarif tarif printf Le prix de votre billet est d n tarif else printf Le prix de votre billet est d n tarif Test Switch branchement Exemple char choix choix choix sera de type caract re ici Afficher un menu d actions a l utilisateur et r cup rer son choix switch choix case printf Vous avez fait le choix coder ici le traitement correspondant au choix break case printf Vous avez fait le choix idem pour le choix break case printf Vous avez fait le choix afficher un sous menu scanf c choix break default printf Votre saisie est erronn e n Exemple Afficher un menu d actions a l utilisateur et r cup rer son choix int choix choix sera de type entier switch choix case printf Vous avez fait le choix break case printf Vous avez fait le choix break default printf Votre saisie est erronn e n Le break permet de ne pas encha ner tous les cas partir du branchement Les r p titives Elles permettent la r p tition d une ou d un bloc d instructions Elles seront choisie en fonction du nombre de r p tition effectuer Boucle FOR nombre de r p titions connu Exemple for i i i i i-- i i printf La valeur i du tableau est d tab i Modification du compteur i interdite dans le corps de boucle Si n cessaire changez de boucle Boucle DO WHILE au moins une fois Exemple magic do printf Donnez un nombre pour arr ter scanf d nb la variable du test volue ici if nb magic printf Gagn n while nb Modification obligatoire des variables intervenant dans le test l int rieur du corps de boucle sous peine de rester bloqu dans une boucle infinie Boucle WHILE peut- tre pas du tout Exemple i while age i i NBCASES printf La personne d b n ficie de la r duction n i i la variable du test volue ici Modification obligatoire des variables intervenant dans le test l int rieur du corps de boucle sous peine de rester bloqu dans une boucle infinie Attention Vous l aurez compris chaque boucle un r le pr cis Vous devez les conna tre C est ca tre rigoureux Chapitre - Donn es de type complexe Les tableaux Nous avons vu les types de donn es scalaires Ces derniers ne sont pas suffisants pour stocker toutes les natures de donn es que les programmeurs sont amen s manipuler Les types complexes ou structur s permettent de pallier ce manque Ils permettent notamment de regrouper les briques de base que constituent les donn es scalaires Les tableaux qui repr sentent le premier type complexe que nous utiliserons permettent l assemblage de zone m moire cons cutive Les tableaux monodimensionnels Pour r server un nombre donn d l ments de m me type il est possible de d finir un tableau de la mani re suivante int toto r serve un emplacement m moire permettant de stocker entiers num rot s de Attention Chaque case contient ce qui trainait dans la m moire de l ordinateur int jours r serve un emplacement m moire permettant de stocker entiers num rot s de et initialise ces entiers avec les valeurs entre accolades Entier entier int day idem pr c demment avec la valeur dans toutes les cases char tab car r serve un emplacement m moire permettant de stocker caract res num rot s de Acc s toto - ou toto i L acc s chaque l ment se fait ainsi i par exemple tab car i a printf c tab car i i repr sente l indice de la case i passage la case suivante scanf c tab car i i repr sente l indice de la case printf c tab car i i repr sente l indice de la case Sch ma de la repr sentation classique toto toto int toto - Un pointeur cach dans un tableau monodimensionnel Principe d adressage La d finition statique d un tableau engendre un pointeur cach int tab tab tab tab tab tab Tab contient donc l adresse du tableau Il est quivalent l criture tab qui correspond l adresse du premier l ment Les tableaux multidimensionnels Sch ma de la repr sentation classique Exemple int tab bis int int Exemple int mat int int Principe d adressage La r alit de l organisation des donn es en m moire est plus complexe qu on ne l imagine dans l repr sentation classique La machine g re un tableau dimensions comme un ensemble de vecteurs une dimension Elle stocke l adresse de chaque vecteur dans un tableau de pointeurs Nous obtenons l organisation m moire comme d crit dans le sch ma ci-dessous Exemple int tab bis tab tab tab tab tab tab tab tab tab tab tab tab tab tab tab tab tab Exemple int mat mat mat i pointeur int pointeur int int int Acc s mat - mat i j Simulation d une matrice en tableau monodimensionnel Il est toujours possible de g rer un tableau multidimensionnel comme un vecteur simple ou tableau monodimensionnel Cette gestion n cessite alors un calcul du type mat i LARGEUR j pour retrouver la bonne case mat i j Attention Les tableaux ne peuvent contenir qu un seul type de donn es Exercices en cours Remplir un tableau de entiers des saisies de l utilisateur R alisez un programme permettant la saisie d un tableau de nombres entiers et r alisant ensuite un tri sur ce tableau Le programme principal se chargera enfin de l affichage du r sultat Exercice en cours Exercice Ecrire un programme permettant de remplir un tableau de entiers partir des saisies de l utilisateur L utilisateur pourra arr ter sa saisie avant nombres en entrant un nombre n gatif Exercice Ecrire un programme permettant de recopier un tableau d j rempli dans un autre de m me dimension Chapitre - Donn es complexes Les cha nes de caract res Convention Le C n'a pas contrairement d'autres langages de type sp cifique pour manipuler les cha nes de caract res Le type string n existe pas en natif Une cha ne de caract res est g r e en langage C comme un tableau contenant des caract res mais avec la particularit que la derni re case du tableau utilis e pour la cha ne contient le caract re sp cial Ce caract re repr sente la fin de la cha ne Il n est pas pris en compte par la fonction strlen chaine qui compte le nombre de caract res utiles d une cha ne Exemple strlen bonjour renvoie On manipule ensuite les cha nes l'aide d'un pointeur qui contient son adresse ce qui permet d'acc der la cha ne en entier Ainsi toutes les fonctions C servant manipuler les cha nes de caract res utilisent comme arguments des pointeurs sur des variables de type char Ces fonctions sont d finies dans le fichier en-t te string h Le paragraphe de ce chapitre en pr sente une s lection non-exhaustive D claration d une cha ne Rappelons-le une cha ne en C n et autre qu un tableau de caract res Une cha ne de caract re appel e toto peut tre r serv e en dur en statique par l instruction suivante char toto Elle est dans ce cas limit e caract res et toto est un pointeur cach de type char voir la notion de pointeur cach dans le chapitre pr c dent sur les tableaux Vous reconna trez ici la d claration d un tableau de caract res En effet une cha ne de caract res et un tableau de caract res ne se diff rencient pas par leur d claration mais par leur contenu un la fin d une cha ne pas de dans un tableau a a o o Notez qu une cha ne de caract res se repr sente entre guillemets tandis qu un caract re seul se repr sente entre quote a a a a a a Saisie Pour stocker une cha ne de caract res il faut r server un emplacement m moire de r ception Cet emplacement se d clare comme un tableau de caract res en ajoutant une case pour le caract re fin de cha ne Plusieurs fonctions de saisie possibles La lecture d une cha ne au clavier peut se faire l aide d un scanf s ch La fonction scanf poss de un format adapt la saisie des cha nes de caract res s Notez qu il n y a pas de devant la variable ch car celle-ci est un pointeur qui contient l adresse de la zone de stockage de la cha ne Le d faut de cette fonction est d interrompre la saisie l espace Cela peut n anmoins tre utile pour s parer les diff rents mots d une phrase La fonction gets ch corrige ce probl me et permet de saisir une cha ne jusqu au enter char ch gets ch Ces deux fonctions se chargent de positionner le dans le tableau de stockage en m moire Probl me d espace m moire Attention char ch gets ch N est pas correct car vous n avez pas r serv de place m moire pour le stockage de votre cha ne En fonction de la valeur de votre pointeur vous obtiendrez une erreur d ex cution ou vous ab merez la m moire associ e vos autres variables Affichage l cran Le format d affichage d une cha ne par un printf est s La fonction printf affiche l cran les caract res contenus en m moire partir de l adresse de d but de la cha ne et s arr te lorsqu elle rencontre le caract re En l absence de celui-ci dans le cas d un printf s appliqu sur un tableau sans par exemple la fonction interpr te chaque octet de la m moire comme un caract re code ASCII et ne s arr te pas ce qui provoque un affichage incoh rent La fonction puts permet d obtenir un r sultat identique au printf Autres fonctions d di es Ces fonctions se trouvent dans la biblioth que standard STRING H Elles s appuient toutes sur la pr sence du caract re fin de cha ne Soit la d claration char ch Affectation Apr s la d claration l affectation d une cha ne se fera par la fonction STRCPY Exemple strcpy ch hello Concat nation La concat nation de deux cha nes se fait par la fonction STRCAT Exemple strcat ch world la cha ne ch contient alors hello world Comparaison La comparaison de deux cha nes se fait par la fonction STRCMP Exemple res strcmp chaine chaine Res contiendra - un nombre n gatif si chaine avant chaine au sens lexicographique dans un dictionnaire - si chaine et chaine sont identiques - un nombre positif si chaine apr s chaine Dimension La fonction STRLEN retourne le nombre de caract res d une cha ne sans compter le Exemple strcpy toto coucou printf d strlen toto affichera l cran Les fonctions de manipulation de cha nes prennent en g n ral pour param tre l adresse des cha nes traiter Chapitre - Les pointeurs D finition Un pointeur est une variable qui contient une adresse par exemple l adresse m moire d une autre variable Les pointeurs permettent l criture de programme manipulant directement la m moire de l ordinateur ce qui conduit des programmes plus compacts et plus efficaces mais aussi plus dangereux Initialisation Imm diatement apr s leur d claration les pointeurs doivent tre initialis s NULL Adressage direct Dans la programmation nous utilisons des variables pour stocker des informations La valeur d'une variable se trouve un endroit sp cifique dans la m moire interne de l'ordinateur Le nom de la variable nous permet alors d'acc der directement cette valeur Adressage direct Acc s au contenu d'une variable par le nom de la variable Exemple Adressage indirect Si nous ne voulons ou ne pouvons pas utiliser le nom d'une variable A variable dynamique par exemple nous pouvons copier l'adresse de cette variable dans une variable sp ciale P appel e pointeur Ensuite nous pouvons retrouver l'information de la variable A en passant par le pointeur P Adressage indirect Acc s au contenu d'une variable en passant par un pointeur qui contient l'adresse de la variable Exemple Soit A une variable contenant la valeur et P un pointeur qui contient l'adresse de A En m moire A et P peuvent se pr senter comme suit Usage Op rateur unaire L op rateur unaire renvoie l adresse de la variable sur laquelle il s applique L op rateur unaire ne peut s appliquer que sur des variables et des l ments de tableaux L criture x ou est interdite D claration des pointeurs int px int x Soit x une variable de type int et px une variable de type pointeur d entier L instruction px x affecte l adresse de la variable x la variable px On dira alors que px pointe sur x Op rateur unaire L op rateur unaire permet d acc der au contenu point par la variable de type adresse sur laquelle il s applique Soit y de type entier l instruction y px range dans y le contenu de l adresse point e par x La suite d instructions px x y px est quivalente y x Les pointeurs pour le passage de param tres par adresse une fonction Les pointeurs interviendront galement lors de l change de donn es entre les diff rentes parties d un programme structur Ils permettront de rendre les donn es chang es modifiables par le r cipiendaire ou au contraire non modifiables par le r cipiendaire afin de g rer des aspects s curit Nous reviendrons sur ces m canismes complexes dans le chapitre sur les passages de param tres Chapitre - Al atoire et Ev nementiel G n ration de nombres al atoires L obtention d un nombre al atoire en C est un peu surprenante La fonction RAND une des nombreuses existantes g n re en effet un nombre ALEATOIRE toujours IDENTIQUE Pour pallier cet inconv nient il est indispensable d initialiser le g n rateur al atoire sur l horloge du syst me de la machine gr ce la fonction SRAND peut- tre pour START RAND Cette initialisation ne devra se faire qu une seule fois dans le programme au d but du MAIN par exemple si vous savez que votre programme utilisera les nombres al atoires quelques part Inclusion des biblioth ques include stdlib h include time h Initialisation du g n rateur al atoire initialisation du generateur aleatoire srand time NULL G n ration du nombre par la fonction RAND RAND MAX d finie dans usr include stdlib h et vaut - int main int alea n N est la borne MAX du nombre d sir srand time NULL ne doit se faire qu une seule fois dans le programme puis a chaque fois qu un nombre al atoire est requis alea rand n la plus grande valeur g n r e par rand vaut RAND MAX Avec le modulo cette valeur est ramen e entre et N- return La valeur g n r e sera comprise entre et N- bornes comprises Programmation v nementielle Contrairement la programmation classique la programmation v nementielle est dict e par la d tection d v nements d clench s par l utilisateur Le r le du programmeur devient alors le suivant Lister les v nements autoris s D velopper les codes associ s chacun des v nements Ecouter le syst me en attente de la d tection d un des v nements boucle sans fin et d clencher l action associ e l v nement d tect Vous remarquerez ici l utilisation d une boucle sans fin ce qui est totalement proscrit dans la programmation classique Mais dans ce cas particulier la fin du programme n est pas d cid e par le programmeur elle est d pendante de l v nement indispensable fin du programme Il est cependant possible de faire de l v nementiel sans boucle sans fin en d cidant simplement de l v nement terminal Il existe des biblioth ques de fonctions crites en C sp cifiquement adapt es la programmation v nementielle C est le cas du GTK Toutefois on peut soi-m me crire ses propres fonctions d di es pour obtenir ce type de programmation comme l illustre l exemple suivant int main char key a initialisation de la variable partie initialisation s quentielle du programme ici partie v nementielle ci-dessous while key q v nement terminal partie des traitements redondants si v nement if kbhit si une touche est appuy e un v nement key getch r cup ration du code de la touche switch key analyse du code de la touche de l v nement et d clenchement de l action associ e case a case m case q printf a bientot Ici la fonction kbhit coute les v nements et renvoie vrai si une touche de clavier a t touch e Cette fonction renvoie en permanence faux sinon Chapitre - Allocation dynamique de m moire Retour sur la d claration statique de donn es Revoyons d'abord de quelle fa on la m moire a t r serv e dans les programmes que nous avons crits jusqu'ici Variables scalaires Chaque variable dans un programme a besoin d'un certain nombre d'octets en m moire Jusqu'ici la r servation de la m moire s'est d roul e automatiquement par l'emploi des d clarations statiques des donn es Dans tous ces cas le nombre d'octets r server tait d j connu pendant la compilation La d claration des variables se fait avant la premi re instruction en tout d but de programme Nous parlons alors de la d claration statique des variables Exemples float A B C r servation de x octets Tableaux De m me les d clarations de tableaux vues dans les chapitres pr c dents ne sont valables que si on conna t par avance le nombre de cases du tableau int D r servation de octets char E r servation de octets Cha nes de caract res constantes L'espace pour les cha nes de caract res constantes qui sont affect es des pointeurs ou utilis es pour initialiser des pointeurs sur char est aussi r serv automatiquement Exemples char J Bonjour r servation de p octets Pointeurs Le nombre d'octets p r server pour un pointeur d pend de la machine et du 'mod le' de m moire choisi mais il est d j connu lors de la compilation Un pointeur est donc aussi d clar statiquement Supposons dans la suite qu'un pointeur ait besoin de p octets en m moire En DOS p ou p Exemples double G r serv de p octets pour un pointeur sur double char H r serv de p octets pour un pointeur sur char float I r serv de p octets pour un tableau de pointeurs sur flottant Probl me et solution Si le type de la variable le nombre de variables ou encore le nombre de cases d un tableau est une donn e saisie par l utilisateur de votre programme en cours d ex cution il n est alors pas possible de faire une r servation de place par une d claration statique en d but de code Dans le cas du tableau vous pouvez bien s r r server un tableau de taille maximale tr s importante m me si l utilisateur n en exploite qu une petite partie Vous risquez alors d occuper beaucoup de m moire pour rien Il existe une solution plus adapt e qui consiste faire une allocation dynamique de m moire Si nous g n rons ces donn es pendant l'ex cution du programme il nous faut des moyens pour r server et lib rer de la m moire au fur et mesure que nous en avons besoin Nous parlons alors de l'allocation dynamique de la m moire Principe de l allocation La fonction malloc La fonction malloc de la biblioth que stdlib nous aide localiser et r server de la m moire au cours d'un programme Elle nous donne acc s au tas heap c - -d l'espace en m moire laiss libre une fois mis en place le DOS les gestionnaires les programmes r sidents le programme lui-m me et la pile stack malloc N fournit l'adresse d'un bloc en m moire de N octets libres ou la valeur z ro s'il n'y a pas assez de m moire Attention Sur notre syst me le param tre N est du type unsigned int A l'aide de malloc nous ne pouvons donc pas r server plus de octets la fois Exemple Supposons que nous ayons besoin d'un bloc en m moire pour un texte de caract res Nous disposons d'un pointeur T sur char char T Alors l'instruction T malloc fournit l'adresse d'un bloc de octets libres et l'affecte T S'il n'y a plus assez de m moire T obtient la valeur NULL La fonction sizeof L appel de la fonction SIZEOF permet l criture d un code ind pendant du compilateur Que votre syst me r serve ou octets pour le codage d un entier est alors transparents pour vous puisque vous demandez explicitement la place pour la taille d un entier Si nous voulons r server de la m moire pour des donn es d'un type dont la grandeur varie d'une machine l'autre nous avons besoin de la grandeur effective d'une donn e de ce type L'op rateur sizeof nous aide alors pr server la portabilit du programme sizeof var fournit la grandeur de la variable var sizeof const fournit la grandeur de la constante const sizeof type fournit la grandeur pour un objet du type type Exemple Apr s la d claration int A char B nous obtenons les r sultats suivants sur un IBM-PC ou compatible sizeof A s' value sizeof B s' value sizeof s' value sizeof Bonjour s' value sizeof float s' value sizeof double s' value Exemple Nous voulons r server de la m moire pour X valeurs du type int la valeur de X tant lue au clavier int x int pnum printf Introduire le nombre de valeurs scanf d x pnum int malloc x sizeof int Entrons dans le d tail de cette nouvelle fa on de r server un tableau d entiers Cas du tableau monodimensionnel Exemple int tab tab int malloc sizeof int Pour se r server une zone de entiers il est n cessaire de d clarer un pointeur sur entier tab Quand l utilisateur aura fourni le nombre d l ments effectifs du tableau l appel de la fonction MALLOC contenue dans la biblioth que ALLOC H selon la syntaxe ci-dessus permettra la r servation de la zone m moire appropri e La fonction Malloc retourne l adresse de la zone allou e Cette adresse est cast e en int pour correspondre la variable de r cup ration tab Allocation dynamique d un tableau multidimensionnel Prenons l exemple d un tableau que l utilisateur souhaite de lignes et colonnes L allocation dynamique d un tel tableau se fera en temps Tout d abord la d claration d un pointeur sur pointeur d entiers puis l allocation d un tableau de pointeurs sur entiers enfin l allocation des tableaux de entiers Exemple int tab Tab int malloc sizeof int For i i i tab i int malloc sizeof int Tab int tab int tab int tab tab tab tab tab tab tab tab tab tab Tab tab tab tab Cas des cha nes de caract res Exemple Nous voulons lire phrases au clavier et m moriser les phrases en utilisant un tableau de pointeurs sur char Nous d clarons ce tableau de pointeurs par char texte Pour les pointeurs nous avons besoin de p octets Ce nombre est connu d s le d part et les octets sont r serv s automatiquement Il nous est cependant impossible de pr voir l'avance le nombre d'octets r server pour les phrases elles-m mes qui seront introduites lors de l'ex cution du programme Allocation dynamique La r servation de la m moire pour les phrases peut donc seulement se faire pendant l'ex cution du programme Nous recourons encore une fois l'allocation dynamique de la m moire Exemple Le programme la page suivante lit phrases au clavier recherche des blocs de m moire libres assez grands pour la m morisation et passe les adresses aux composantes du tableau TEXTE S'il n'y a pas assez de m moire pour une cha ne le programme affiche un message d'erreur et interrompt le programme avec le code d'erreur - Nous devons utiliser une variable d'aide INTRO comme zone interm diaire non dynamique Pour cette raison la longueur maximale d'une phrase est fix e caract res include stdio h include stdlib h include string h main D clarations char INTRO une cha ne de car Utiles char TEXTE un tableau de pointeurs sur cha nes int I Traitement for I I I gets INTRO R servation de la m moire pour chaque cha ne TEXTE I TEXTE I char malloc strlen INTRO if TEXTE I Si la m moire est correctement allou e copier la phrase l'adresse fournie par malloc strcpy TEXTE I INTRO else sinon quitter le programme apr s un message d'erreur printf ERREUR Pas assez de m moire n return Exercice Ecrire un programme qui lit phrases d'une longueur maximale de caract res au clavier et qui les m morise dans un tableau de pointeurs sur char en r servant dynamiquement l'emplacement en m moire pour les cha nes Ensuite l'ordre des phrases est invers en modifiant les pointeurs et le tableau r sultant est affich La fonction free Si nous n'avons plus besoin d'un bloc de m moire que nous avons r serv l'aide de malloc alors nous pouvons le lib rer l'aide de la fonction free de la biblioth que stdlib free Pointeur lib re le bloc de m moire d sign par le Pointeur n'a pas d'effet si le pointeur a la valeur z ro Attention La fonction free peut aboutir un d sastre si on essaie de lib rer de la m moire qui n'a pas t correctement allou e par malloc La fonction free ne change pas le contenu du pointeur il est conseill d'affecter la valeur NULL au pointeur imm diatement apr s avoir lib r le bloc de m moire qui y tait attach Si nous ne lib rons pas explicitement la m moire l'aide free alors elle est lib r e automatiquement la fin du programme Exercices en cours Ecrire un programme qui lit mots au clavier longueur maximale caract res et attribue leurs adresses un tableau de pointeurs MOT Effacer les mots un un en suivant l'ordre lexicographique et en lib rant leur espace en m moire Afficher chaque fois les mots restants en attendant la confirmation de l'utilisateur par 'Enter' Ecrire un programme qui lit mots au clavier longueur maximale caract res et attribue leurs adresses un tableau de pointeurs MOT Copier les mots selon l'ordre lexicographique en une seule 'phrase' dont l'adresse est affect e un pointeur PHRASE R server l'espace n cessaire la PHRASE avant de copier les mots Lib rer la m moire occup e par chaque mot apr s l'avoir copi Utiliser les fonctions de string Ecrire un programme qui lit phrases au clavier longueur maximale caract res et attribue leurs adresses un tableau de pointeurs MOT R server dynamiquement l'emplacement en m moire pour les mots Trier les phrases lexicographiquement en n' changeant que les pointeurs Utiliser la m thode de tri par propagation m thode de la bulle - d crite dans l'exercice Chapitre - Les sous-programmes en langage C Modularit du code Un programme bien crit doit tre structur et d compos en sous-programmes ou module chacun associ une tache pr cise Bien qu en C tout soit fonction on distingue en g n ral deux types de sous-programme Les proc dures et les fonctions Les proc dures communiquent avec les autres sous-programmes via leur zone de param tres ou arguments que l on appellera le tube Les fonctions disposent galement du m canisme de tube mais profite en plus d un m canisme de retour leur permettant de retourner une et une seule valeur de type scalaire au sous-programme qui a fait appel elles qu on appelle l appelant Nous venons de le dire le langage C ne fait pas la distinction entre les proc dures et les fonctions Pour ce langage tout est consid r comme une fonction Une proc dure sera alors vue comme une fonction qui fait son traitement mais ne retourne rien La non-utilisation du m canisme de retour se traduira par le mot clef void plac avant le nom du sous-programme Le programme principal est une fonction particuli re le plus souvent de type int d o le return qui doit obligatoirement figurer dans tout programme car il en constitue le point d entr e appel par le syst me d exploitation Pour qu un sous-programme soit actif c'est- -dire qu il prenne le contr le du processeur il doit tre appel par un autre sous-programme On distinguera alors le sous-programme appel et le sous-programme appelant L appelant enregistre l adresse de sa prochaine instruction ex cuter dans une pile d adresse sp cifique puis lib re le processeur au profit de l appel Apr s ex cution l appel rend le processeur l appelant qui d pile son adresse de retour ou de reprise et continue alors son ex cution l o il s tait arr t Visibilit des sous-programmes Le compilateur n autorise l appel d un sous-programme que s il en conna t d j l existence ainsi que le nombre et le type des param tres et de la valeur de retour dans le cas d une fonction void paf void pif paf void main pif paf Le programme principal voit les sous-programmes pif voit paf mais paf ne voit pas pif Probl me lorsque le sous-programme n a pas t d fini dans le m me fichier que le programme appelant ni dans un fichier h que l on peut inclure Une solution l utilisation des prototypes Prototype d un sous-programme Le prototype d un sous-programme contient les informations suivantes le type de valeur retourn e dans le cas d une fonction le nom du sous-programme la liste des param tres du sous-programme sous forme type nom optionnel Exemple pour la fonction int minimum int A int B Le prototype est int minimum int int Ou encore int minimum int A int B viter car les noms de variables sont inutiles dans les prototypes Comme toute d claration le prototype est suivi d un point virgule Le prototype permet au compilateur de v rifier la validit des appels ult rieurs au sous-programme dans le programme lorsque le sous-programme n a pas t crit dans le m me fichier ou lors d appels crois s entre deux sous-programmes En r gle g n rale les prototypes de fonctions et de proc dures sont crits dans un fichier h qui sera inclus dans les fichiers manipulant les sous-programmes D claration en fichier biblioth que h Les fichiers de biblioth que d extension h sont destin s contenir des lignes de code inclure dans un autre fichier source au moment de la compilation L instruction d inclusion sera par exemple include c tmp mabib h Remarque Notez la diff rence avec les biblioth ques de fonctions pr d finies offertes par le langage que vous allez inclure en crivant include stdio h Mettre dans ces fichiers les prototypes de vos fonctions ainsi que la d claration de vos constantes permet de les rendre accessibles depuis tous les programmes C qui auront inclus la biblioth que Exactement comme vous faisiez pour profiter des fonctions pr d finies du langage Les proc dures Le type void On dira d un sous-programme qu il est de type void si il n utilise pas son m canisme de retour On peut alors le consid rer comme un quivalent d une proc dure en algorithmique Il ne peut alors pas contenir le mot clef return puisqu il ne retourne aucun r sultat Tr s exceptionnellement dans une mauvaise programmation - dans le cas o on souhaiterait malgr tout utiliser l instruction return pour sortir du sous-programme celle-ci sera appel e sans param tre Une proc dure est constitu e - d une ent te de d claration - d un corps de proc dure Exemple void affiche int val ent te printf la valeur du param tre est d val corps L ent te de la proc dure contient Le mot clef void et le nom de la proc dure La d claration des types et des noms des param tres formels entre parenth ses Les fonctions Le m canisme de retour Une fonction est constitu e - d une ent te de d claration - d un corps de fonction Exemple int add int a int b ent te int c c a b corps return c L ent te de la fonction contient La d claration du type et du nom de la fonction La d claration des types et des noms des param tres formels entre parenth ses Le corps de la fonction est un bloc encadr par des accolades qui contient La d claration des variables locales au bloc constitu par la fonction Les instructions du bloc L instruction particuli re return provoquant la sortie et permettant de transmettre l appelant le r sultat d ex cution de la fonction La valeur retourn e doit tre du type d clar dans l ent te de la fonction Appel des sous-programmes res add L appel de la fonction au niveau du sous-programme appelant doit pr voir la r cup ration de la valeur retourn e par la fonction dans une variable de type appropri Dans le cas d une fonction de type void le m canisme de retour de valeur n existe pas affiche val Graphes d appel Ce graphe d crit l ordre des appels de sous-programmes Il permet de v rifier la coh rence des encha nements de proc dures et de fonctions Main Proc Proc Fonc Main Fonc Proc Proc tube int A int B retour int res tube float val retour int erreur Main Proc Proc Fonc Main Fonc Proc Proc tube int A int B retour int res tube float val retour int erreur Exercice Ecrire le sous-programme adapt l affichage d un menu utilisateur et la saisie du choix de ce dernier Ecrire le programme principal appelant ce sous-programme Chapitre - Passage des param tres Pour fonctionner correctement les sous-programmes ont parfois besoin d informations provenant des autres sous-programmes ou du programme principal Le sous-programme appelant peut ainsi disposer des informations l usage de l appel dna sle m canisme de communication appel tube ou zone des param tres Il existe deux mani res de passer des param tres un sous-programme par le tube sch mas Le passage par valeur Le sous-programme appel re oit une copie des param tres pass s par la fonction appelante et manipule uniquement cette copie consid r e alors comme une variable locale La valeur de la variable transmise par l appelant ne peut pas tre modifi e par le sous-programme appel Exemple int addition int a int b a a b return a Le passage par adresse Les pointeurs vu dans un chapitre pr c dent sont galement utilis s lors du passage de param tres une fonction Ils permettent le m canisme dit de donn es modifi es c'est- -dire la modification d une variable appartenant au sous-programme appelant A retenir Le tube est un duplicateur Cela signifie que tous les param tres envoy s une fonction sont dupliqu s dans une zone m moire nouvelle et porteront le nom associ aux param tres en r ception sch ma La fonction travaille donc sur une copie de l original et toute modification de la copie n est pas r percut e l appelant Cependant si vous envoyez en param tre l appel une variable de type pointeur contenant une adresse par exemple X de type int contenant x celle-ci sera re ue dans une copie de type pointeur par exemple Y de type int qui contiendra galement x Le param tre est bien dupliqu et son contenu recopi Par contre ce contenu tant une adresse de zone m moire on dira que X et Y pointent d sormais tous les deux sur la m me zone Toute modification de la zone point e par Y modifie galement la zone point e par X c est la m me Nous avons donc r ussi faire un passage dit par adresse ou par r f rence correspondant aux donn es modifi es x X x Y Le sous-programme appel re oit les adresses des param tres et travaille par pointeur directement sur la variable transmise en param tre Cette variable est alors partag e par l appelant et l appel toute modification tant donc r percut e Exemple int addition int a int b int c a a c a b return c Cas particulier des tableaux En langage C les tableaux sont automatiquement pass s par adresse afin de ne pas faire de copie m moire de structure de donn es trop lourde Ce passage se fait sans l utilisation de l Toute modification d une des cases du tableau par le sous-programme appel est donc automatiquement r percut e Exemple void saisie int tab int i for i i i scanf d tab i Passage d arguments la fonction main la ligne de commande Le programme principal qui correspond la fonction MAIN en C peut recevoir des param tres venant de l ext rieur au moment du lancement du programme Ces param tres sont transmis au MAIN par l interm diaire de la ligne de commande Par exemple si votre ex cutable s appelle prog test la ligne de commande prog test durant envoie les cha nes de caract res et durant au programme principal Pour ce m canisme le MAIN doit tre crit de la mani re suivante void main int argc char argv argc nombre d arguments pass s au main nom du programme compris argv tableau de pointeurs sur cha ne de caract res contenant chacun des arguments Le premier l ment du tableau ARGV c est dire argv contient le nom du programme ex cutable ce qui correspond dans notre exemple prog test Chapitre La r cursivit D finition De m me que chaque sous programme peut en appeler un autre chaque sous programme peut s appeler lui-m me En langage C toute fonction a la possibilit de s appeler elle-m me ce qui en fait une fonction r cursive Il est donc possible d crire des fonctions r cursives comme par exemple la fonction factorielle ci-dessous Exemple long int fact int n if n return else return n fact n- Cette fonction peut galement tre crite de mani re plus concise long int fact int n return n n fact n- Utilit Le r cursif est un mode de pens e Tout programme r cursif aura un algorithme quivalent en mode it ratif classique L inverse n est pas vrai Un algorithme r cursif est souvent tr s concis en termes de lignes de code Il est par contre plus gourmand en place m moire La r cursivit s applique lorsque le traitement effectuer concerne un ensemble d objets et que le traitement d un des objets de l ensemble r duit l ensemble des objets traiter jusqu l ensemble vide Relisez bien le paragraphe pr c dent pour en dig rer le contenu - Un exemple pour vous aider Trier en r cursif un ensemble d entiers en ordre croissant consiste rechercher le plus petit entier de l ensemble puis trier l ensemble des entiers priv de cet l ment Et ce jusqu ce qu il n y ait plus d entier trier Notion de clone De m me qu appeler un sous programme revient se mettre en attente et lui confier le processeur lorsqu un sous-programme s appelle lui-m me il se met en attente pause et g n re un clone qui prend la main du processeur A sa terminaison le clone rendra la min son parent afin que celui-ci poursuive son ex cution partir de son point de mise en attente Chaque clone tant identique son parent il va lui-m me g n rer un autre clone apr s s tre mis en pause La cha ne de clone va ainsi s agrandir ind finiment si elle n est pas contr l e par une condition d arr t Chaque point de mise en attente de chacun des clones est stock e dans une pile d adresse afin de permettre chacun de reprendre correctement son ex cution lorsqu il r cup rera la main sur le processeur Condition d arr t Cette condition est une instruction souvent un test permettant un clone de ne pas g n r de successeur Il va alors se terminer normalement sans se mettre en attente Il va donc rendre la main son parent qui pourra son tour poursuivre son ex cution et se terminer rendant ainsi la main son parent etc Le d pilement des clones peut alors commencer et se d rouler correctement jusqu l initiateur de la cha ne de r cursion Proc dure r cursive Exemple Binarisation r cursive voisins Tri de tableau d entiers Fonction r cursive Exercice corriger en TD Ecrivez un programme permettant de calculer l l vation d un nombre a une puissance b puissance a b Vous le d composerez en sous-programmes Chapitre - Les structures et les unions Les Structures Il arrive tr s souvent qu'une variable ne se d crive pas seulement par un entier un r el ou une autre valeur simple mais que sa description demande plusieurs informations de type diff rents Par exemple pour d crire une personne on utilisera des cha nes de caract res pour le nom et le pr nom des entiers pour sa date de naissance Dans ces cas il est int ressant d'avoir des m canismes permettant de regrouper un certain nombre de variables de type diff rents C'est le concept de structure Une structure est un ensemble de donn es regroup es sous un m me nom Les l ments d'une structure ou membre d'une structure peuvent tre de types diff rents tableau autre structure etc Il ne faut pas confondre la d claration d'un type de structure avec la d claration d'une variable de structure Rappel sur le typedef Nous avons d j eu l occasion de voir le mot clef typedef qui s utilise en biblioth que personnelle et permet de se d finir de nouveau type Attention typedef ne r serve pas d'espace m moire Le nom est un type il est donc inaccessible comme variable Attention typedef ne r serve pas d'espace m moire Le nom est un type il est donc inaccessible comme variable typedef description du type nom type D claration de type structure La d claration d'un type de structure se fait dans la biblioth que personnelle comme suit typedef struct nomDeStructure type nomChamp type nomChamp type nomChamp type nomChamp typeN nomChampN nom du type Exemple typedef struct personne synonyme synonyme char nom char prenom int age char sexe t pers Un type de structure est donc d clar par le mot cl typedef d finition de type suivi de struct suivi d'un nom facultatif ici personne Ce nom est une tiquette qui pourra tre ensuite utilis e pour d signer le type de structure Le nom de type t pers est un alias du type struct personne d crit entre accolades Il permet de faire plus simplement r f rence au type struct personne Cette d claration ne provoque pas d'allocation m moire il s'agit uniquement de la d finition d'un nouveau type aussi appel nouveau concept dont le nom est struct personne ou encore t pers D claration d'une variable de type structure La d claration d'une variable de type structure personne ou t pers struct personne toto ou encore t pers toto Cela permet de cr er une variable on dit aussi instance de type ou objet nomm e toto ou toto de type structure personne pr c demment d finie Cette fois ci contrairement au point le compilateur alloue de la m moire pour ces variables Pour info Une autre mani re de d clarer une variable de type structure personne est la suivante notez ici l absence du mot clef typedef int main struct personne char nom char prenom int age char sexe pers d but des traitement pers age return On d clare ci-dessus simultan ment un type de structure d fini entre les accolades et une variable de ce type pers Cette d claration n est valable qu l int rieur du bloc form par les accolades o se trouve la d claration Ici le type de structure n'a pas de nom ou d alias ou d' tiquette ce qui g ne le passage de structure en param tre un sous-programme Les donn es membres d'une structure les champs Les membres d'une structure peuvent tre de types quelconques type scalaire de base char int float pointeurs mais aussi tableaux ou encore autres structures Une structure peut donc comporter plusieurs niveaux hi rarchiques de structures Exemple l utilisation ou non des typedef ne change rien cet exemple struct date int jour int mois int annee struct adresse int numero char rue long codePostal char localite struct identit char nom char prenom struct adresse adr struct date naissance Acc s aux champs d un objet structure L'acc s aux membres de structure se fait en utilisant l'op rateur L'op rateur relie le nom d'une variable de type structure un de ses membres nom de structure nom membre Exemple Soit le programme suivant ifndef COUCOU define COUCOU typedef struct personne char nom char prenom int age char sexe t pers endif include void main d claration de pers t pers pers cette variable non-initialis e ne sera pas utilis e dans cet exemple d claration et initialisation imm diate de pers t pers pers DUPONT RENE 'M' printf n voici les donn es de pers d signation de l' l ment nom et de l' l ment prenom de la variable pers printf n n NOM s PRENOM s pers nom pers prenom printf n AGE d pers age printf n SEXE c n pers sexe 'M' MASCULIN FEMININ Acc s aux champs d un objet structure via un pointeur On peut utiliser l'op rateur - pour acc der aux membres d'une structure par l'interm diaire d'un pointeur Cet op rateur relie le pointeur de la structure au membre que l'on d sire atteindre pointeur de structure - nom membre Exemple dans la biblio perso typedef struct adresse int numero char rue long codePostal char localite t adr dans le code C struct adresse adr ptad ici adr est une variable un objet de type t adr ptad est un pointeur sur variable objet de type t adr Attention Adr numero est quivalent ptad- numero Adr rue est quivalent ptad- rue ptad codePostal est quivalent ptad- code postal Remarque Pour adresser par pointeur le code postal de la structure adresse les parenth ses sont n cessaires car la priorit de l'op rateur est plus lev e que celle de l'op rateur Acc s aux donn es membres de structure dans le cas de structures imbriqu es Dans le cas o plusieurs structures sont imbriqu es l'acc s un membre de structure de bas niveau se fait en utilisant plusieurs fois l'op rateur Exemple typedef struct date int jour int mois int annee typedef struct identite char nom char prenom struct date naissance t ident main t ident homme Durand Marcel if - homme naissance annee printf s s est majeur n homme nom homme prenom else printf s s n'est pas majeur n homme nom homme prenom Op ration sur les structures Les op rateurs classiques math matiques comparaisons utilis s pour les variables simples scalaires ne s'appliquent pas aux structures Seul l'op rateur permet d'obtenir l'adresse de tout objet en C et donc d'une structure Les comparaisons se feront donc champ par champ Les tableaux de structures On utilise fr quemment les tableaux de structures l'instruction ci-dessous permet de d clarer un tableau de structures de type personne struct personne char nom char prenom int age char sexe tabDePersonnes L'acc s un l ment du tableau peut se faire en utilisant un indice compris entre et ou bien encore un pointeur de tableau Exemple typedef struct personne char nom char prenom int age char sexe t pers main t pers tabDePersonnes int i struct personne ptr tabDePersonnes lecture du nom de chaque personne en utilisant l'indice du tableau for i i i scanf s tabDePersonnes i nom impression du nom de chaque personne en utilisant le pointeur for i i i printf s n ptr - nom La r cursivit et les structures La r cursivit ne peut pas s'appliquer au niveau des structures Il n'est pas possible de d clarer une structure qui contient un membre d signant directement la structure initiale Cependant un membre d'une structure peut toujours r f rencer une autre structure du m me type l'aide d'un pointeur vers cette structure C est le principe des listes cha n es struct liste char nom char prenom struct date naissance struct liste suiv o suiv est le pointeur vers une structure de type liste Exemple La structure liste d clar e pr c demment permet de construire les listes cha n es comme sur le sch ma ci-dessous Chaque l ment de cette liste est de type struct liste - Ritchie Dennis Ritchie Dennis Kernighan Brian Kernighan Brian Nous reviendrons en d tail sur les listes cha n es dans un prochain chapitre Les unions Une union est une structure de donn es qui permet de ranger la m me adresse en m moire des variables de types diff rents Sur le plan syntaxique la d claration d'une union est parfaitement identique celle d'une structure Cette d claration permet au compilateur de prendre connaissance des diff rents types de donn es que cette union peut contenir Contrairement la structure toutes les donn es de l'union sont rang es la m me adresse La taille m moire nombre d'octets r serv e par le compilateur est la taille de la donn e la plus grande Exemple union unionDef char cvar int ivar long lvar double dvar unionVar De m me que pour les structures c'est la d claration d'une variable de type union qui d clenche l'allocation de m moire par le compilateur La d claration d'un type union ne g n re pas d'allocation m moire Dans l'exemple ci-dessus le nom du type unionDef est facultatif unionDef d finit un type d'union compos e de diff rents types d'objets unionVar repr sente une variable de type unionDef Le sch ma ci-dessous nous montre les diff rences d'implantations en m moire entre une structure et une union struct structDef char cvar int ivar long lvar double dvar structVar union unionDef char cvar int ivar long lvar double dvar unionVar MERGEFORMAT Chapitre - Les fichiers Les donn es stock es en m moire sont perdues d s la sortie du programme Les fichiers sur support magn tique bande disquette disque sont par contre permanents mais au prix d'un temps d'acc s aux donn es tr s sup rieur On peut distinguer les fichiers s quentiels on acc de au contenu dans l'ordre du stockage ou acc s direct on peut directement acc der n'importe quel endroit du fichier Les fichiers que nous allons consid rer sont des fichiers s quentiels Les fichiers sont soit binaires un float sera stock comme il est cod en m moire d'o gain de place mais incompatibilit entre logiciels soit format ASCII un float binaire sera transform en d cimal puis on crira le caract re correspondant chaque chiffre Les fichiers tant d pendants du mat riel ils ne sont pas pr vus dans la syntaxe du C mais par l'interm diaire de fonctions sp cifiques Fichier ASCII Cr ation et Ouverture d'un fichier Un fichier peut tre repr sent de mani res Son nom externe C'est le nom que lui a donn son propri taire au moment de sa cr ation sous la forme d'une cha ne de caract res Son nom interne C'est le nom que lui a donn le syst me au moment de l'ouverture de ce fichier Ce nom interne est une structure de fichier de type FILE obligatoirement en majuscules et qui contient les informations suivantes mode d'ouverture du fichier num ro du descripteur de fichier informations concernant le tampon associ au fichier pour les op rations de lecture criture pointeur courant dans le fichier A chaque fois que l'on pr voit d'appeler des fonctions d'E S de la biblioth que standard il convient d'inclure le fichier stdio h qui contient les d finitions et les prototypes des fonctions d'E S Il existe fichiers standard associ s l' cran du terminal stdin fichier d'entr e nom interne stdout fichier de sortie nom interne stderr fichier de sortie erreur nom interne Pour ouvrir un fichier il faut d clarer un pointeur de type FILE et faire appel la fonction fopen dont le prototype est le suivant FILE fopen const char path const char mode La fonction fopen retourne un pointeur sur une structure de type FILE ou bien un pointeur NULL si l'op ration a chou Exemple FILE fp fp fopen nom-de-fichier w Il existe plusieurs modes d'ouverture d'un fichier mode Fonction r Ouvre un fichier existant pour la lecture w Cr e et ouvre un fichier pour l' criture Tout fichier existant est remplac Un nouveau fichier est cr s'il n'en existe pas a Ouvre un fichier en ajout L'ajout se fait la fin d'un fichier existant Un nouveau fichier est cr s'il n'en existe pas r Ouvre un fichier existant pour la lecture et l' criture w Cr e et ouvre un fichier existant pour la lecture et l' criture Tout fichier existant est remplac a Ouvre un fichier pour la lecture et l'ajout de donn es la fin d'un fichier existant Un fichier est cr s'il n'en existe pas Chacun de ces droits peut tre suivi d un b pour pr ciser le mode binaire ex wb Lecture Ecriture dans un fichier texte De nombreuses fonctions permettent l' criture ou la lecture d'un fichier texte Voici leur prototype Lecture int fscanf FILE stream const char format argument int fgets char string int n FILE stream int fgetc FILE stream Ecriture int fprintf FILE stream const char format argument int fputs const char string FILE stream int fputc int c FILE stream Fermeture d'un fichier Tout fichier ouvert doit tre ferm La fonction fclose permet de fermer le fichier rep r par son pointeur int fclose FILE stream Principe de manipulation des fichiers Pour manipuler un fichier il faut toujours avoir ouvert ce fichier au pr alable Il vaut mieux refermer un fichier inutilis L'instruction exit referme galement tous les fichiers ouverts et vide les m moires tampons Exemple creer le fichier fichier - ecrire dans le fichier include stdio h main FILE fp static char t j'ecris ce que je veux

Related Downloads
Explore
Post your homework questions and get free online help from our incredible volunteers
  1262 People Browsing
Your Opinion
What's your favorite funny biology word?
Votes: 328