Polycopié du cours, travaux dirigés et travaux pratiques ...
Transcript of Polycopié du cours, travaux dirigés et travaux pratiques ...
Reacutepublique Algeacuterienne Deacutemocratique et Populaire
Ministegravere de lEnseignement Supeacuterieur et de la Recherche Scientifique
Ecole Supeacuterieure en Geacutenie Electrique et Energeacutetique drsquoOran
Polycopieacute du cours travaux dirigeacutes et travaux pratiques
des premieacuteres anneacutees du cycle preacuteparatoire
-Module Informatique-
Reacutedigeacute par Docteur Sabria HADJ TAYEB
Anneacutee Universitaire
2018- 2019
SOMMAIRE
Avant propos INFORMARIQUE 1
Chapitre 1 Architecture des ordinateurs 1 Deacutefinition drsquoun ordinateurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 2 Composants drsquoun ordinateurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 21 Processeur helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 211 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 212 Composants drsquoun CPUhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 22 La meacutemoire centrale helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 2 221 Types de meacutemoireshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 222 Les registres de la meacutemoire centralehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 223 Capaciteacute de la meacutemoirehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 224 Notion de meacutemoires cacheshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 23 Les peacuteripheacuteriqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 4 24 Les bushelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 4 3 Scheacutema reacutecapitulatifhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 5
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction 1Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 6 2 Cycle drsquoexeacutecution drsquoune instructionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 6 21 Phase 1 Recherche drsquoinstructionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 6 22 Phase 2 Recherche des opeacuterandes et exeacutecutionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 7 23 Phase 3 Passage agrave lrsquoinstruction suivantehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 8 Chapitre 3 Repreacutesentation des nombres 1Systeacuteme de numeacuterationhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 9 2 Conversions et changements de basehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 10 21Conversion drsquoun nombre deacutecimal en binaire helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 10 22Conversion drsquoun nombre de base N vers la base 10helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 11 3 Repreacutesentation des nombres neacutegatifshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 11 4 Repreacutesentation en virgule fixehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 13 41 Conversion drsquoun nombre de base N vers la base 10helliphelliphelliphelliphelliphelliphelliphelliphelliphellip 13 42 Conversion drsquoun nombre binaire en deacutecimalhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 13 5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754helliphelliphelliphelliphelliphelliphelliphelliphellip 13 Chapitre 4 Algeacutebre de BOOLE 1 Deacutefinition helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 15 2 Axiomes et postulatshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 15 3Fonctions logiques agrave deux variableshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 16 4 Proprieacuteteacutes de lrsquoalgeacutebre de Boolehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 16 5Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteennehelliphelliphelliphelliphelliphelliphelliphelliphellip 17 51 Premieacutere forme canoniquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 17 52 Deuxieacuteme forme canoniquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 18 6 Tableau de Karnaughhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 18 61Principehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 18
SOMMAIRE
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacentshelliphelliphelliphelliphelliphelliphelliphelliphellip 18 Chapitre 5 Algorithmique 1Deacutefinition drsquoun algorithmehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 2Structure geacuteneacuterale drsquoun algorithmehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 3Notions algorithmiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 31 Identificateurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 32Variable et constantehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 23 33 Les types standardshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 23 34 LrsquoAffectationhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 24 4 Les fonctions de lecture Ecriturehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 25 41 Eacutecriture des donneacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 25 42 Lecture des donneacutees helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 26 5Les structures alternatives helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 51Alternative reacuteduitehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 52Alternative complegravetehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 53Alternative imbriqueacuteehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 28 6Les structures iteacuterativeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 61 Structure REPETER JUSQUA helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 62 Structure TANT QUE FAIRE helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 63Structure POUR Indice DE A FAIRE helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 30 7 Les tableaux statiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 71 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 72 Deacuteclaration drsquoun tableau statiquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture) helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 731 Lecture drsquoun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 732 Ecriture ou affichage drsquoun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 8 Matrices statiques helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 81 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 82 Deacuteclaration drsquoune matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture) helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 831 Lecture drsquoune matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 832 Ecriture de la matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 Travaux dirigeacuteshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 38
INFORMATIQUE 2
Chapitre 1 De lrsquoalgorithmique agrave la programmation 1Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 51 2 Struture geacuteneacuterale drsquoun programme Chelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52
3 Les bibliothegraveques de fonctions preacutedeacutefinieshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52
4 Etapes de geacuteneacuteration de fichier exeacutecutablehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52 5 Types et variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53 51Les principaux typeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53 52Les variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
SOMMAIRE
53Les commentaireshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
6Expressions et opeacuterateurs helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
7Caractegraveres et chaines de caractegravereshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
8Lire et eacutecrire des donneacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
81La fonction printf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
82La fonction scanf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 9Les structures alternatives et iterativeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 Chapitre 2 Les fonctions en C Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 1Deacuteclaration dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 2Variables globaleshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 61 3Variables localeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 4Passage des paramegravetres dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire Partie I Les pointeurs 66 1 Notions de basehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 11 Rappelhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 12 Notion de pointeurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 2 Parameacutetres de fonction avec les pointeurshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 68 3 Pointeurs et tableauxhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 69 Partie II Allocation dynamique de da meacutemoire 71 1Taille meacutemoire des variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 71 2Allocation de meacutemoire dynamiquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 72 3Allocation dynamique dun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 73
Chapitre 4 La reacutecursiviteacute 1Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 2 Reacutesolution reacutecursive drsquoun problegravemehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 3 Structure drsquoune fonction reacutecursivehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 4 Types de reacutecursiviteacute helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 41Fonction reacutecursive terminale helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 42Fonction reacutecursive non terminalehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 5Passage du reacutecursif agrave lrsquoiteacuteratifhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 78 Chapitre 5 Structures complexes listes chaineacutees et piles 1Deacutefinition drsquoune structurehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 2Les listes chaineacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 21 Creacuteation drsquoune liste videhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 81 22 Insertion dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 221 Insertion en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 222 Insertion en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 83 223 Insertion au milieu dune listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 84 23 Suppression dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 231 Suppression en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85
SOMMAIRE
232 Suppression en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 233 Suppression au milieu de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 86 3Les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 31 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 32Opeacuterations sur les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 88 3 3 Repreacutesentation des pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 331 Repreacutesentation contigueumlhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 332 Repreacutesentation chaicircneacutee helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 Travaux pratiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 93
Avant propos
Ceci est un polycopieacute peacutedagogique du module Informatique des premiegraveres
anneacutees classes preacuteparatoires sciences et techniques
Ce manuel comprend lrsquoensemble des cours travaux dirigeacutes et travaux pratiques durant le premier et le deuxiegraveme semestre de lrsquoanneacutee 20182019 conformeacutement au
programme ministeacuteriel des classes preacuteparatoires en sciences et techniques mis en
vigueur en 2015
Le premier semestre intituleacute Informatique 1 comprend cinq chapitres
Dans le premier chapitre intituleacute laquo Architecture des ordinateurs raquo lrsquoeacutetudiant aura un aperccedilu sur la structure de lrsquoordinateur tout en assimilant les fonctionnaliteacutes de chaque
composant
Le but du de second chapitre 2 laquo Machine de John von Newmann raquo est de connaitre
le cycle drsquoexeacutecution de lrsquoinstructions de maniegravere tregraves geacuteneacuterale
Le troisiegraveme chapitre intituleacute laquo Systegraveme de numeacuteration raquo agrave pour but la maicirctrise des
quatre opeacuterations de base la repreacutesentation des nombres neacutegatifs lrsquoarithmeacutetique binaire et les conversions en format IEEE 754
Le quatriegraveme chapitre laquo Algeacutebre de Boole raquo comprend geacuteneacuteralement la
compreacutehension de la notion drsquoexpression algeacutebrique des portes logiques et la
simplification des expressions algeacutebriquement et via le tableau de Karnaugh
Enfin le cinquiegraveme et important chapitre laquo Algorithmique raquo agrave pour objectif
drsquoassimiler agrave lrsquoeacutetudiant les bases algorithmiques A la fin de ce chapitres lrsquoeacutetudiant
sera apte agrave eacutecrire un algorithme seacutequentiel conditionnel iteacuteratif et avec types
complexes (tableaux et matrices)
Un ensemble drsquoexemples et drsquoexercices seront traiteacutes en cours pour chaque partie et agrave
chaque chapitre est associeacutee une fiche de travaux dirigeacutes
Le deuxiegraveme semestre intituleacute Informatique 2 comprend aussi cinq chapitres
Le premier chapitre de laquo De lrsquoalgorithmique agrave la programmation raquo a pour objectif
lrsquoeacutetude et la maitrise de la syntaxe et concepts de base du langage du programmation
et la translation drsquoun algorithme en un code C Lrsquoobjectif du deuxiegraveme chapitre intituleacute laquo Les fonctions raquo est de preacutevoir concevoir
et utiliser les fonctions tout en mettant lrsquoaccent sur les limites que peuvent apporter le
passage par valeurs drsquoougrave lrsquoutilisation des pointeurs Le troisiegraveme chapitre laquo Pointeurs et allocation dynamique raquo comprend en premier lieu
la maitrise du concept pointeur et la manipulation des pointeurs comme arguments
dans les fonctions La deuxiegraveme partie est de maicirctriser les principes de lrsquoallocation dynamique
Le quatriegraveme chapitre laquo La reacutecursiviteacute raquo est la compreacutehension et lrsquoimpleacutementation de
la reacutecursiviteacute
Le dernier chapitre laquo Structures complexes listes chaineacutees et pilesraquo vise agrave assimiler
et impleacutementer les structures complexes agrave savoir les listes chaineacutees et les piles
Chaque partie du cours est suivie par des exemples ouet exercice en code C
Trois fiches de travaux pratiques avec corrigeacutes englobent des exercices en C de
lrsquoensemble des chapitres du deuxiegraveme semestre
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 1
Architecture drsquoun ordinateur 1 Deacutefinition dun ordinateur
Un ordinateur est une machine de traitement de linformation Il est capable
dacqueacuterir de linformation de la stocker de la transformer en effectuant des
traitements quelconques puis de la restituer sous une autre forme
2 Composants drsquoun ordinateur
En ouvrant le boitier drsquoun ordinateur nous trouvons une carte megravere qui sert agrave
rassembler tous les composants de lrsquoordinateurs (CPU meacutemoire les disques les cartes drsquoextensionhellip)
21 Le processeur (CPU)
211 Deacutefinition Le CPU (Central Processing Unit) est un circuit eacutelectronique
complexe permettant de manipuler et de traiter les donneacutees qui lui sont
fournies
212 Composants drsquoun CPU
CPU= Bloc logique de commande (seacutequenceur) + Uniteacute de Traitement (UT)
a) Bloc logique de commande (seacutequenceur) Il organise lexeacutecution des
instructions au rythme drsquoune horloge et eacutelabore tous les signaux de
synchronisation internes ou externes du microprocesseur Il contient
- Le Compteur Ordinal (CO) appeleacute aussi Compteur de programme
(CP) ou instruction pointer (IP) Le CO est un registre dont le contenu
est initialiseacute avec ladresse de la premiegravere instruction du programme Il
contient toujours lrsquoadresse de lrsquoinstruction agrave exeacutecuter
- Le Registre dInstruction (RI) Il contient linstruction en cours de
traitement
b) Uniteacute de Traitement (UT) Cette uniteacute contient une UAL et des registres
- Uniteacute Arithmeacutetique et Logique (UAL) Un circuit complexe assurant
les fonctions logiques (ET OU Comparaisonhellip) ou arithmeacutetiques
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
SOMMAIRE
Avant propos INFORMARIQUE 1
Chapitre 1 Architecture des ordinateurs 1 Deacutefinition drsquoun ordinateurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 2 Composants drsquoun ordinateurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 21 Processeur helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 211 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 212 Composants drsquoun CPUhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 1 22 La meacutemoire centrale helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 2 221 Types de meacutemoireshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 222 Les registres de la meacutemoire centralehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 223 Capaciteacute de la meacutemoirehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 224 Notion de meacutemoires cacheshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 3 23 Les peacuteripheacuteriqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 4 24 Les bushelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 4 3 Scheacutema reacutecapitulatifhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 5
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction 1Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 6 2 Cycle drsquoexeacutecution drsquoune instructionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 6 21 Phase 1 Recherche drsquoinstructionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 6 22 Phase 2 Recherche des opeacuterandes et exeacutecutionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 7 23 Phase 3 Passage agrave lrsquoinstruction suivantehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 8 Chapitre 3 Repreacutesentation des nombres 1Systeacuteme de numeacuterationhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 9 2 Conversions et changements de basehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 10 21Conversion drsquoun nombre deacutecimal en binaire helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 10 22Conversion drsquoun nombre de base N vers la base 10helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 11 3 Repreacutesentation des nombres neacutegatifshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 11 4 Repreacutesentation en virgule fixehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 13 41 Conversion drsquoun nombre de base N vers la base 10helliphelliphelliphelliphelliphelliphelliphelliphelliphellip 13 42 Conversion drsquoun nombre binaire en deacutecimalhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 13 5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754helliphelliphelliphelliphelliphelliphelliphelliphellip 13 Chapitre 4 Algeacutebre de BOOLE 1 Deacutefinition helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 15 2 Axiomes et postulatshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 15 3Fonctions logiques agrave deux variableshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 16 4 Proprieacuteteacutes de lrsquoalgeacutebre de Boolehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 16 5Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteennehelliphelliphelliphelliphelliphelliphelliphelliphellip 17 51 Premieacutere forme canoniquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 17 52 Deuxieacuteme forme canoniquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 18 6 Tableau de Karnaughhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 18 61Principehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 18
SOMMAIRE
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacentshelliphelliphelliphelliphelliphelliphelliphelliphellip 18 Chapitre 5 Algorithmique 1Deacutefinition drsquoun algorithmehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 2Structure geacuteneacuterale drsquoun algorithmehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 3Notions algorithmiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 31 Identificateurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 32Variable et constantehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 23 33 Les types standardshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 23 34 LrsquoAffectationhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 24 4 Les fonctions de lecture Ecriturehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 25 41 Eacutecriture des donneacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 25 42 Lecture des donneacutees helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 26 5Les structures alternatives helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 51Alternative reacuteduitehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 52Alternative complegravetehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 53Alternative imbriqueacuteehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 28 6Les structures iteacuterativeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 61 Structure REPETER JUSQUA helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 62 Structure TANT QUE FAIRE helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 63Structure POUR Indice DE A FAIRE helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 30 7 Les tableaux statiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 71 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 72 Deacuteclaration drsquoun tableau statiquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture) helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 731 Lecture drsquoun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 732 Ecriture ou affichage drsquoun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 8 Matrices statiques helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 81 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 82 Deacuteclaration drsquoune matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture) helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 831 Lecture drsquoune matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 832 Ecriture de la matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 Travaux dirigeacuteshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 38
INFORMATIQUE 2
Chapitre 1 De lrsquoalgorithmique agrave la programmation 1Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 51 2 Struture geacuteneacuterale drsquoun programme Chelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52
3 Les bibliothegraveques de fonctions preacutedeacutefinieshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52
4 Etapes de geacuteneacuteration de fichier exeacutecutablehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52 5 Types et variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53 51Les principaux typeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53 52Les variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
SOMMAIRE
53Les commentaireshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
6Expressions et opeacuterateurs helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
7Caractegraveres et chaines de caractegravereshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
8Lire et eacutecrire des donneacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
81La fonction printf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
82La fonction scanf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 9Les structures alternatives et iterativeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 Chapitre 2 Les fonctions en C Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 1Deacuteclaration dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 2Variables globaleshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 61 3Variables localeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 4Passage des paramegravetres dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire Partie I Les pointeurs 66 1 Notions de basehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 11 Rappelhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 12 Notion de pointeurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 2 Parameacutetres de fonction avec les pointeurshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 68 3 Pointeurs et tableauxhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 69 Partie II Allocation dynamique de da meacutemoire 71 1Taille meacutemoire des variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 71 2Allocation de meacutemoire dynamiquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 72 3Allocation dynamique dun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 73
Chapitre 4 La reacutecursiviteacute 1Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 2 Reacutesolution reacutecursive drsquoun problegravemehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 3 Structure drsquoune fonction reacutecursivehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 4 Types de reacutecursiviteacute helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 41Fonction reacutecursive terminale helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 42Fonction reacutecursive non terminalehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 5Passage du reacutecursif agrave lrsquoiteacuteratifhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 78 Chapitre 5 Structures complexes listes chaineacutees et piles 1Deacutefinition drsquoune structurehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 2Les listes chaineacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 21 Creacuteation drsquoune liste videhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 81 22 Insertion dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 221 Insertion en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 222 Insertion en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 83 223 Insertion au milieu dune listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 84 23 Suppression dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 231 Suppression en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85
SOMMAIRE
232 Suppression en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 233 Suppression au milieu de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 86 3Les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 31 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 32Opeacuterations sur les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 88 3 3 Repreacutesentation des pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 331 Repreacutesentation contigueumlhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 332 Repreacutesentation chaicircneacutee helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 Travaux pratiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 93
Avant propos
Ceci est un polycopieacute peacutedagogique du module Informatique des premiegraveres
anneacutees classes preacuteparatoires sciences et techniques
Ce manuel comprend lrsquoensemble des cours travaux dirigeacutes et travaux pratiques durant le premier et le deuxiegraveme semestre de lrsquoanneacutee 20182019 conformeacutement au
programme ministeacuteriel des classes preacuteparatoires en sciences et techniques mis en
vigueur en 2015
Le premier semestre intituleacute Informatique 1 comprend cinq chapitres
Dans le premier chapitre intituleacute laquo Architecture des ordinateurs raquo lrsquoeacutetudiant aura un aperccedilu sur la structure de lrsquoordinateur tout en assimilant les fonctionnaliteacutes de chaque
composant
Le but du de second chapitre 2 laquo Machine de John von Newmann raquo est de connaitre
le cycle drsquoexeacutecution de lrsquoinstructions de maniegravere tregraves geacuteneacuterale
Le troisiegraveme chapitre intituleacute laquo Systegraveme de numeacuteration raquo agrave pour but la maicirctrise des
quatre opeacuterations de base la repreacutesentation des nombres neacutegatifs lrsquoarithmeacutetique binaire et les conversions en format IEEE 754
Le quatriegraveme chapitre laquo Algeacutebre de Boole raquo comprend geacuteneacuteralement la
compreacutehension de la notion drsquoexpression algeacutebrique des portes logiques et la
simplification des expressions algeacutebriquement et via le tableau de Karnaugh
Enfin le cinquiegraveme et important chapitre laquo Algorithmique raquo agrave pour objectif
drsquoassimiler agrave lrsquoeacutetudiant les bases algorithmiques A la fin de ce chapitres lrsquoeacutetudiant
sera apte agrave eacutecrire un algorithme seacutequentiel conditionnel iteacuteratif et avec types
complexes (tableaux et matrices)
Un ensemble drsquoexemples et drsquoexercices seront traiteacutes en cours pour chaque partie et agrave
chaque chapitre est associeacutee une fiche de travaux dirigeacutes
Le deuxiegraveme semestre intituleacute Informatique 2 comprend aussi cinq chapitres
Le premier chapitre de laquo De lrsquoalgorithmique agrave la programmation raquo a pour objectif
lrsquoeacutetude et la maitrise de la syntaxe et concepts de base du langage du programmation
et la translation drsquoun algorithme en un code C Lrsquoobjectif du deuxiegraveme chapitre intituleacute laquo Les fonctions raquo est de preacutevoir concevoir
et utiliser les fonctions tout en mettant lrsquoaccent sur les limites que peuvent apporter le
passage par valeurs drsquoougrave lrsquoutilisation des pointeurs Le troisiegraveme chapitre laquo Pointeurs et allocation dynamique raquo comprend en premier lieu
la maitrise du concept pointeur et la manipulation des pointeurs comme arguments
dans les fonctions La deuxiegraveme partie est de maicirctriser les principes de lrsquoallocation dynamique
Le quatriegraveme chapitre laquo La reacutecursiviteacute raquo est la compreacutehension et lrsquoimpleacutementation de
la reacutecursiviteacute
Le dernier chapitre laquo Structures complexes listes chaineacutees et pilesraquo vise agrave assimiler
et impleacutementer les structures complexes agrave savoir les listes chaineacutees et les piles
Chaque partie du cours est suivie par des exemples ouet exercice en code C
Trois fiches de travaux pratiques avec corrigeacutes englobent des exercices en C de
lrsquoensemble des chapitres du deuxiegraveme semestre
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 1
Architecture drsquoun ordinateur 1 Deacutefinition dun ordinateur
Un ordinateur est une machine de traitement de linformation Il est capable
dacqueacuterir de linformation de la stocker de la transformer en effectuant des
traitements quelconques puis de la restituer sous une autre forme
2 Composants drsquoun ordinateur
En ouvrant le boitier drsquoun ordinateur nous trouvons une carte megravere qui sert agrave
rassembler tous les composants de lrsquoordinateurs (CPU meacutemoire les disques les cartes drsquoextensionhellip)
21 Le processeur (CPU)
211 Deacutefinition Le CPU (Central Processing Unit) est un circuit eacutelectronique
complexe permettant de manipuler et de traiter les donneacutees qui lui sont
fournies
212 Composants drsquoun CPU
CPU= Bloc logique de commande (seacutequenceur) + Uniteacute de Traitement (UT)
a) Bloc logique de commande (seacutequenceur) Il organise lexeacutecution des
instructions au rythme drsquoune horloge et eacutelabore tous les signaux de
synchronisation internes ou externes du microprocesseur Il contient
- Le Compteur Ordinal (CO) appeleacute aussi Compteur de programme
(CP) ou instruction pointer (IP) Le CO est un registre dont le contenu
est initialiseacute avec ladresse de la premiegravere instruction du programme Il
contient toujours lrsquoadresse de lrsquoinstruction agrave exeacutecuter
- Le Registre dInstruction (RI) Il contient linstruction en cours de
traitement
b) Uniteacute de Traitement (UT) Cette uniteacute contient une UAL et des registres
- Uniteacute Arithmeacutetique et Logique (UAL) Un circuit complexe assurant
les fonctions logiques (ET OU Comparaisonhellip) ou arithmeacutetiques
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
SOMMAIRE
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacentshelliphelliphelliphelliphelliphelliphelliphelliphellip 18 Chapitre 5 Algorithmique 1Deacutefinition drsquoun algorithmehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 2Structure geacuteneacuterale drsquoun algorithmehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 3Notions algorithmiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 31 Identificateurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 22 32Variable et constantehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 23 33 Les types standardshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 23 34 LrsquoAffectationhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 24 4 Les fonctions de lecture Ecriturehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 25 41 Eacutecriture des donneacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 25 42 Lecture des donneacutees helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 26 5Les structures alternatives helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 51Alternative reacuteduitehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 52Alternative complegravetehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 27 53Alternative imbriqueacuteehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 28 6Les structures iteacuterativeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 61 Structure REPETER JUSQUA helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 62 Structure TANT QUE FAIRE helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 29 63Structure POUR Indice DE A FAIRE helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 30 7 Les tableaux statiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 71 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 72 Deacuteclaration drsquoun tableau statiquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 32 73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture) helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 731 Lecture drsquoun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 732 Ecriture ou affichage drsquoun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 33 8 Matrices statiques helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 81 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 82 Deacuteclaration drsquoune matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 34 83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture) helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 831 Lecture drsquoune matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 832 Ecriture de la matricehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 35 Travaux dirigeacuteshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 38
INFORMATIQUE 2
Chapitre 1 De lrsquoalgorithmique agrave la programmation 1Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 51 2 Struture geacuteneacuterale drsquoun programme Chelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52
3 Les bibliothegraveques de fonctions preacutedeacutefinieshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52
4 Etapes de geacuteneacuteration de fichier exeacutecutablehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 52 5 Types et variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53 51Les principaux typeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53 52Les variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
SOMMAIRE
53Les commentaireshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
6Expressions et opeacuterateurs helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
7Caractegraveres et chaines de caractegravereshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
8Lire et eacutecrire des donneacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
81La fonction printf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
82La fonction scanf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 9Les structures alternatives et iterativeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 Chapitre 2 Les fonctions en C Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 1Deacuteclaration dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 2Variables globaleshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 61 3Variables localeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 4Passage des paramegravetres dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire Partie I Les pointeurs 66 1 Notions de basehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 11 Rappelhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 12 Notion de pointeurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 2 Parameacutetres de fonction avec les pointeurshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 68 3 Pointeurs et tableauxhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 69 Partie II Allocation dynamique de da meacutemoire 71 1Taille meacutemoire des variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 71 2Allocation de meacutemoire dynamiquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 72 3Allocation dynamique dun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 73
Chapitre 4 La reacutecursiviteacute 1Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 2 Reacutesolution reacutecursive drsquoun problegravemehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 3 Structure drsquoune fonction reacutecursivehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 4 Types de reacutecursiviteacute helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 41Fonction reacutecursive terminale helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 42Fonction reacutecursive non terminalehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 5Passage du reacutecursif agrave lrsquoiteacuteratifhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 78 Chapitre 5 Structures complexes listes chaineacutees et piles 1Deacutefinition drsquoune structurehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 2Les listes chaineacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 21 Creacuteation drsquoune liste videhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 81 22 Insertion dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 221 Insertion en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 222 Insertion en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 83 223 Insertion au milieu dune listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 84 23 Suppression dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 231 Suppression en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85
SOMMAIRE
232 Suppression en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 233 Suppression au milieu de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 86 3Les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 31 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 32Opeacuterations sur les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 88 3 3 Repreacutesentation des pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 331 Repreacutesentation contigueumlhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 332 Repreacutesentation chaicircneacutee helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 Travaux pratiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 93
Avant propos
Ceci est un polycopieacute peacutedagogique du module Informatique des premiegraveres
anneacutees classes preacuteparatoires sciences et techniques
Ce manuel comprend lrsquoensemble des cours travaux dirigeacutes et travaux pratiques durant le premier et le deuxiegraveme semestre de lrsquoanneacutee 20182019 conformeacutement au
programme ministeacuteriel des classes preacuteparatoires en sciences et techniques mis en
vigueur en 2015
Le premier semestre intituleacute Informatique 1 comprend cinq chapitres
Dans le premier chapitre intituleacute laquo Architecture des ordinateurs raquo lrsquoeacutetudiant aura un aperccedilu sur la structure de lrsquoordinateur tout en assimilant les fonctionnaliteacutes de chaque
composant
Le but du de second chapitre 2 laquo Machine de John von Newmann raquo est de connaitre
le cycle drsquoexeacutecution de lrsquoinstructions de maniegravere tregraves geacuteneacuterale
Le troisiegraveme chapitre intituleacute laquo Systegraveme de numeacuteration raquo agrave pour but la maicirctrise des
quatre opeacuterations de base la repreacutesentation des nombres neacutegatifs lrsquoarithmeacutetique binaire et les conversions en format IEEE 754
Le quatriegraveme chapitre laquo Algeacutebre de Boole raquo comprend geacuteneacuteralement la
compreacutehension de la notion drsquoexpression algeacutebrique des portes logiques et la
simplification des expressions algeacutebriquement et via le tableau de Karnaugh
Enfin le cinquiegraveme et important chapitre laquo Algorithmique raquo agrave pour objectif
drsquoassimiler agrave lrsquoeacutetudiant les bases algorithmiques A la fin de ce chapitres lrsquoeacutetudiant
sera apte agrave eacutecrire un algorithme seacutequentiel conditionnel iteacuteratif et avec types
complexes (tableaux et matrices)
Un ensemble drsquoexemples et drsquoexercices seront traiteacutes en cours pour chaque partie et agrave
chaque chapitre est associeacutee une fiche de travaux dirigeacutes
Le deuxiegraveme semestre intituleacute Informatique 2 comprend aussi cinq chapitres
Le premier chapitre de laquo De lrsquoalgorithmique agrave la programmation raquo a pour objectif
lrsquoeacutetude et la maitrise de la syntaxe et concepts de base du langage du programmation
et la translation drsquoun algorithme en un code C Lrsquoobjectif du deuxiegraveme chapitre intituleacute laquo Les fonctions raquo est de preacutevoir concevoir
et utiliser les fonctions tout en mettant lrsquoaccent sur les limites que peuvent apporter le
passage par valeurs drsquoougrave lrsquoutilisation des pointeurs Le troisiegraveme chapitre laquo Pointeurs et allocation dynamique raquo comprend en premier lieu
la maitrise du concept pointeur et la manipulation des pointeurs comme arguments
dans les fonctions La deuxiegraveme partie est de maicirctriser les principes de lrsquoallocation dynamique
Le quatriegraveme chapitre laquo La reacutecursiviteacute raquo est la compreacutehension et lrsquoimpleacutementation de
la reacutecursiviteacute
Le dernier chapitre laquo Structures complexes listes chaineacutees et pilesraquo vise agrave assimiler
et impleacutementer les structures complexes agrave savoir les listes chaineacutees et les piles
Chaque partie du cours est suivie par des exemples ouet exercice en code C
Trois fiches de travaux pratiques avec corrigeacutes englobent des exercices en C de
lrsquoensemble des chapitres du deuxiegraveme semestre
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 1
Architecture drsquoun ordinateur 1 Deacutefinition dun ordinateur
Un ordinateur est une machine de traitement de linformation Il est capable
dacqueacuterir de linformation de la stocker de la transformer en effectuant des
traitements quelconques puis de la restituer sous une autre forme
2 Composants drsquoun ordinateur
En ouvrant le boitier drsquoun ordinateur nous trouvons une carte megravere qui sert agrave
rassembler tous les composants de lrsquoordinateurs (CPU meacutemoire les disques les cartes drsquoextensionhellip)
21 Le processeur (CPU)
211 Deacutefinition Le CPU (Central Processing Unit) est un circuit eacutelectronique
complexe permettant de manipuler et de traiter les donneacutees qui lui sont
fournies
212 Composants drsquoun CPU
CPU= Bloc logique de commande (seacutequenceur) + Uniteacute de Traitement (UT)
a) Bloc logique de commande (seacutequenceur) Il organise lexeacutecution des
instructions au rythme drsquoune horloge et eacutelabore tous les signaux de
synchronisation internes ou externes du microprocesseur Il contient
- Le Compteur Ordinal (CO) appeleacute aussi Compteur de programme
(CP) ou instruction pointer (IP) Le CO est un registre dont le contenu
est initialiseacute avec ladresse de la premiegravere instruction du programme Il
contient toujours lrsquoadresse de lrsquoinstruction agrave exeacutecuter
- Le Registre dInstruction (RI) Il contient linstruction en cours de
traitement
b) Uniteacute de Traitement (UT) Cette uniteacute contient une UAL et des registres
- Uniteacute Arithmeacutetique et Logique (UAL) Un circuit complexe assurant
les fonctions logiques (ET OU Comparaisonhellip) ou arithmeacutetiques
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
SOMMAIRE
53Les commentaireshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
6Expressions et opeacuterateurs helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 53
7Caractegraveres et chaines de caractegravereshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
8Lire et eacutecrire des donneacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
81La fonction printf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 54
82La fonction scanf()helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 9Les structures alternatives et iterativeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 55 Chapitre 2 Les fonctions en C Introductionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 1Deacuteclaration dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 59 2Variables globaleshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 61 3Variables localeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 4Passage des paramegravetres dune fonctionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 62 Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire Partie I Les pointeurs 66 1 Notions de basehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 11 Rappelhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 12 Notion de pointeurhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 66 2 Parameacutetres de fonction avec les pointeurshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 68 3 Pointeurs et tableauxhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 69 Partie II Allocation dynamique de da meacutemoire 71 1Taille meacutemoire des variables helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 71 2Allocation de meacutemoire dynamiquehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 72 3Allocation dynamique dun tableauhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 73
Chapitre 4 La reacutecursiviteacute 1Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 2 Reacutesolution reacutecursive drsquoun problegravemehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 3 Structure drsquoune fonction reacutecursivehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 75 4 Types de reacutecursiviteacute helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 41Fonction reacutecursive terminale helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 42Fonction reacutecursive non terminalehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 77 5Passage du reacutecursif agrave lrsquoiteacuteratifhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 78 Chapitre 5 Structures complexes listes chaineacutees et piles 1Deacutefinition drsquoune structurehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 2Les listes chaineacuteeshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 80 21 Creacuteation drsquoune liste videhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 81 22 Insertion dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 221 Insertion en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 82 222 Insertion en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 83 223 Insertion au milieu dune listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 84 23 Suppression dans une listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 231 Suppression en deacutebut de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85
SOMMAIRE
232 Suppression en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 233 Suppression au milieu de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 86 3Les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 31 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 32Opeacuterations sur les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 88 3 3 Repreacutesentation des pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 331 Repreacutesentation contigueumlhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 332 Repreacutesentation chaicircneacutee helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 Travaux pratiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 93
Avant propos
Ceci est un polycopieacute peacutedagogique du module Informatique des premiegraveres
anneacutees classes preacuteparatoires sciences et techniques
Ce manuel comprend lrsquoensemble des cours travaux dirigeacutes et travaux pratiques durant le premier et le deuxiegraveme semestre de lrsquoanneacutee 20182019 conformeacutement au
programme ministeacuteriel des classes preacuteparatoires en sciences et techniques mis en
vigueur en 2015
Le premier semestre intituleacute Informatique 1 comprend cinq chapitres
Dans le premier chapitre intituleacute laquo Architecture des ordinateurs raquo lrsquoeacutetudiant aura un aperccedilu sur la structure de lrsquoordinateur tout en assimilant les fonctionnaliteacutes de chaque
composant
Le but du de second chapitre 2 laquo Machine de John von Newmann raquo est de connaitre
le cycle drsquoexeacutecution de lrsquoinstructions de maniegravere tregraves geacuteneacuterale
Le troisiegraveme chapitre intituleacute laquo Systegraveme de numeacuteration raquo agrave pour but la maicirctrise des
quatre opeacuterations de base la repreacutesentation des nombres neacutegatifs lrsquoarithmeacutetique binaire et les conversions en format IEEE 754
Le quatriegraveme chapitre laquo Algeacutebre de Boole raquo comprend geacuteneacuteralement la
compreacutehension de la notion drsquoexpression algeacutebrique des portes logiques et la
simplification des expressions algeacutebriquement et via le tableau de Karnaugh
Enfin le cinquiegraveme et important chapitre laquo Algorithmique raquo agrave pour objectif
drsquoassimiler agrave lrsquoeacutetudiant les bases algorithmiques A la fin de ce chapitres lrsquoeacutetudiant
sera apte agrave eacutecrire un algorithme seacutequentiel conditionnel iteacuteratif et avec types
complexes (tableaux et matrices)
Un ensemble drsquoexemples et drsquoexercices seront traiteacutes en cours pour chaque partie et agrave
chaque chapitre est associeacutee une fiche de travaux dirigeacutes
Le deuxiegraveme semestre intituleacute Informatique 2 comprend aussi cinq chapitres
Le premier chapitre de laquo De lrsquoalgorithmique agrave la programmation raquo a pour objectif
lrsquoeacutetude et la maitrise de la syntaxe et concepts de base du langage du programmation
et la translation drsquoun algorithme en un code C Lrsquoobjectif du deuxiegraveme chapitre intituleacute laquo Les fonctions raquo est de preacutevoir concevoir
et utiliser les fonctions tout en mettant lrsquoaccent sur les limites que peuvent apporter le
passage par valeurs drsquoougrave lrsquoutilisation des pointeurs Le troisiegraveme chapitre laquo Pointeurs et allocation dynamique raquo comprend en premier lieu
la maitrise du concept pointeur et la manipulation des pointeurs comme arguments
dans les fonctions La deuxiegraveme partie est de maicirctriser les principes de lrsquoallocation dynamique
Le quatriegraveme chapitre laquo La reacutecursiviteacute raquo est la compreacutehension et lrsquoimpleacutementation de
la reacutecursiviteacute
Le dernier chapitre laquo Structures complexes listes chaineacutees et pilesraquo vise agrave assimiler
et impleacutementer les structures complexes agrave savoir les listes chaineacutees et les piles
Chaque partie du cours est suivie par des exemples ouet exercice en code C
Trois fiches de travaux pratiques avec corrigeacutes englobent des exercices en C de
lrsquoensemble des chapitres du deuxiegraveme semestre
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 1
Architecture drsquoun ordinateur 1 Deacutefinition dun ordinateur
Un ordinateur est une machine de traitement de linformation Il est capable
dacqueacuterir de linformation de la stocker de la transformer en effectuant des
traitements quelconques puis de la restituer sous une autre forme
2 Composants drsquoun ordinateur
En ouvrant le boitier drsquoun ordinateur nous trouvons une carte megravere qui sert agrave
rassembler tous les composants de lrsquoordinateurs (CPU meacutemoire les disques les cartes drsquoextensionhellip)
21 Le processeur (CPU)
211 Deacutefinition Le CPU (Central Processing Unit) est un circuit eacutelectronique
complexe permettant de manipuler et de traiter les donneacutees qui lui sont
fournies
212 Composants drsquoun CPU
CPU= Bloc logique de commande (seacutequenceur) + Uniteacute de Traitement (UT)
a) Bloc logique de commande (seacutequenceur) Il organise lexeacutecution des
instructions au rythme drsquoune horloge et eacutelabore tous les signaux de
synchronisation internes ou externes du microprocesseur Il contient
- Le Compteur Ordinal (CO) appeleacute aussi Compteur de programme
(CP) ou instruction pointer (IP) Le CO est un registre dont le contenu
est initialiseacute avec ladresse de la premiegravere instruction du programme Il
contient toujours lrsquoadresse de lrsquoinstruction agrave exeacutecuter
- Le Registre dInstruction (RI) Il contient linstruction en cours de
traitement
b) Uniteacute de Traitement (UT) Cette uniteacute contient une UAL et des registres
- Uniteacute Arithmeacutetique et Logique (UAL) Un circuit complexe assurant
les fonctions logiques (ET OU Comparaisonhellip) ou arithmeacutetiques
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
SOMMAIRE
232 Suppression en fin de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 85 233 Suppression au milieu de listehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 86 3Les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 31 Deacutefinitionhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 87 32Opeacuterations sur les pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 88 3 3 Repreacutesentation des pileshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 331 Repreacutesentation contigueumlhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 332 Repreacutesentation chaicircneacutee helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 89 Travaux pratiqueshelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip 93
Avant propos
Ceci est un polycopieacute peacutedagogique du module Informatique des premiegraveres
anneacutees classes preacuteparatoires sciences et techniques
Ce manuel comprend lrsquoensemble des cours travaux dirigeacutes et travaux pratiques durant le premier et le deuxiegraveme semestre de lrsquoanneacutee 20182019 conformeacutement au
programme ministeacuteriel des classes preacuteparatoires en sciences et techniques mis en
vigueur en 2015
Le premier semestre intituleacute Informatique 1 comprend cinq chapitres
Dans le premier chapitre intituleacute laquo Architecture des ordinateurs raquo lrsquoeacutetudiant aura un aperccedilu sur la structure de lrsquoordinateur tout en assimilant les fonctionnaliteacutes de chaque
composant
Le but du de second chapitre 2 laquo Machine de John von Newmann raquo est de connaitre
le cycle drsquoexeacutecution de lrsquoinstructions de maniegravere tregraves geacuteneacuterale
Le troisiegraveme chapitre intituleacute laquo Systegraveme de numeacuteration raquo agrave pour but la maicirctrise des
quatre opeacuterations de base la repreacutesentation des nombres neacutegatifs lrsquoarithmeacutetique binaire et les conversions en format IEEE 754
Le quatriegraveme chapitre laquo Algeacutebre de Boole raquo comprend geacuteneacuteralement la
compreacutehension de la notion drsquoexpression algeacutebrique des portes logiques et la
simplification des expressions algeacutebriquement et via le tableau de Karnaugh
Enfin le cinquiegraveme et important chapitre laquo Algorithmique raquo agrave pour objectif
drsquoassimiler agrave lrsquoeacutetudiant les bases algorithmiques A la fin de ce chapitres lrsquoeacutetudiant
sera apte agrave eacutecrire un algorithme seacutequentiel conditionnel iteacuteratif et avec types
complexes (tableaux et matrices)
Un ensemble drsquoexemples et drsquoexercices seront traiteacutes en cours pour chaque partie et agrave
chaque chapitre est associeacutee une fiche de travaux dirigeacutes
Le deuxiegraveme semestre intituleacute Informatique 2 comprend aussi cinq chapitres
Le premier chapitre de laquo De lrsquoalgorithmique agrave la programmation raquo a pour objectif
lrsquoeacutetude et la maitrise de la syntaxe et concepts de base du langage du programmation
et la translation drsquoun algorithme en un code C Lrsquoobjectif du deuxiegraveme chapitre intituleacute laquo Les fonctions raquo est de preacutevoir concevoir
et utiliser les fonctions tout en mettant lrsquoaccent sur les limites que peuvent apporter le
passage par valeurs drsquoougrave lrsquoutilisation des pointeurs Le troisiegraveme chapitre laquo Pointeurs et allocation dynamique raquo comprend en premier lieu
la maitrise du concept pointeur et la manipulation des pointeurs comme arguments
dans les fonctions La deuxiegraveme partie est de maicirctriser les principes de lrsquoallocation dynamique
Le quatriegraveme chapitre laquo La reacutecursiviteacute raquo est la compreacutehension et lrsquoimpleacutementation de
la reacutecursiviteacute
Le dernier chapitre laquo Structures complexes listes chaineacutees et pilesraquo vise agrave assimiler
et impleacutementer les structures complexes agrave savoir les listes chaineacutees et les piles
Chaque partie du cours est suivie par des exemples ouet exercice en code C
Trois fiches de travaux pratiques avec corrigeacutes englobent des exercices en C de
lrsquoensemble des chapitres du deuxiegraveme semestre
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 1
Architecture drsquoun ordinateur 1 Deacutefinition dun ordinateur
Un ordinateur est une machine de traitement de linformation Il est capable
dacqueacuterir de linformation de la stocker de la transformer en effectuant des
traitements quelconques puis de la restituer sous une autre forme
2 Composants drsquoun ordinateur
En ouvrant le boitier drsquoun ordinateur nous trouvons une carte megravere qui sert agrave
rassembler tous les composants de lrsquoordinateurs (CPU meacutemoire les disques les cartes drsquoextensionhellip)
21 Le processeur (CPU)
211 Deacutefinition Le CPU (Central Processing Unit) est un circuit eacutelectronique
complexe permettant de manipuler et de traiter les donneacutees qui lui sont
fournies
212 Composants drsquoun CPU
CPU= Bloc logique de commande (seacutequenceur) + Uniteacute de Traitement (UT)
a) Bloc logique de commande (seacutequenceur) Il organise lexeacutecution des
instructions au rythme drsquoune horloge et eacutelabore tous les signaux de
synchronisation internes ou externes du microprocesseur Il contient
- Le Compteur Ordinal (CO) appeleacute aussi Compteur de programme
(CP) ou instruction pointer (IP) Le CO est un registre dont le contenu
est initialiseacute avec ladresse de la premiegravere instruction du programme Il
contient toujours lrsquoadresse de lrsquoinstruction agrave exeacutecuter
- Le Registre dInstruction (RI) Il contient linstruction en cours de
traitement
b) Uniteacute de Traitement (UT) Cette uniteacute contient une UAL et des registres
- Uniteacute Arithmeacutetique et Logique (UAL) Un circuit complexe assurant
les fonctions logiques (ET OU Comparaisonhellip) ou arithmeacutetiques
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Avant propos
Ceci est un polycopieacute peacutedagogique du module Informatique des premiegraveres
anneacutees classes preacuteparatoires sciences et techniques
Ce manuel comprend lrsquoensemble des cours travaux dirigeacutes et travaux pratiques durant le premier et le deuxiegraveme semestre de lrsquoanneacutee 20182019 conformeacutement au
programme ministeacuteriel des classes preacuteparatoires en sciences et techniques mis en
vigueur en 2015
Le premier semestre intituleacute Informatique 1 comprend cinq chapitres
Dans le premier chapitre intituleacute laquo Architecture des ordinateurs raquo lrsquoeacutetudiant aura un aperccedilu sur la structure de lrsquoordinateur tout en assimilant les fonctionnaliteacutes de chaque
composant
Le but du de second chapitre 2 laquo Machine de John von Newmann raquo est de connaitre
le cycle drsquoexeacutecution de lrsquoinstructions de maniegravere tregraves geacuteneacuterale
Le troisiegraveme chapitre intituleacute laquo Systegraveme de numeacuteration raquo agrave pour but la maicirctrise des
quatre opeacuterations de base la repreacutesentation des nombres neacutegatifs lrsquoarithmeacutetique binaire et les conversions en format IEEE 754
Le quatriegraveme chapitre laquo Algeacutebre de Boole raquo comprend geacuteneacuteralement la
compreacutehension de la notion drsquoexpression algeacutebrique des portes logiques et la
simplification des expressions algeacutebriquement et via le tableau de Karnaugh
Enfin le cinquiegraveme et important chapitre laquo Algorithmique raquo agrave pour objectif
drsquoassimiler agrave lrsquoeacutetudiant les bases algorithmiques A la fin de ce chapitres lrsquoeacutetudiant
sera apte agrave eacutecrire un algorithme seacutequentiel conditionnel iteacuteratif et avec types
complexes (tableaux et matrices)
Un ensemble drsquoexemples et drsquoexercices seront traiteacutes en cours pour chaque partie et agrave
chaque chapitre est associeacutee une fiche de travaux dirigeacutes
Le deuxiegraveme semestre intituleacute Informatique 2 comprend aussi cinq chapitres
Le premier chapitre de laquo De lrsquoalgorithmique agrave la programmation raquo a pour objectif
lrsquoeacutetude et la maitrise de la syntaxe et concepts de base du langage du programmation
et la translation drsquoun algorithme en un code C Lrsquoobjectif du deuxiegraveme chapitre intituleacute laquo Les fonctions raquo est de preacutevoir concevoir
et utiliser les fonctions tout en mettant lrsquoaccent sur les limites que peuvent apporter le
passage par valeurs drsquoougrave lrsquoutilisation des pointeurs Le troisiegraveme chapitre laquo Pointeurs et allocation dynamique raquo comprend en premier lieu
la maitrise du concept pointeur et la manipulation des pointeurs comme arguments
dans les fonctions La deuxiegraveme partie est de maicirctriser les principes de lrsquoallocation dynamique
Le quatriegraveme chapitre laquo La reacutecursiviteacute raquo est la compreacutehension et lrsquoimpleacutementation de
la reacutecursiviteacute
Le dernier chapitre laquo Structures complexes listes chaineacutees et pilesraquo vise agrave assimiler
et impleacutementer les structures complexes agrave savoir les listes chaineacutees et les piles
Chaque partie du cours est suivie par des exemples ouet exercice en code C
Trois fiches de travaux pratiques avec corrigeacutes englobent des exercices en C de
lrsquoensemble des chapitres du deuxiegraveme semestre
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 1
Architecture drsquoun ordinateur 1 Deacutefinition dun ordinateur
Un ordinateur est une machine de traitement de linformation Il est capable
dacqueacuterir de linformation de la stocker de la transformer en effectuant des
traitements quelconques puis de la restituer sous une autre forme
2 Composants drsquoun ordinateur
En ouvrant le boitier drsquoun ordinateur nous trouvons une carte megravere qui sert agrave
rassembler tous les composants de lrsquoordinateurs (CPU meacutemoire les disques les cartes drsquoextensionhellip)
21 Le processeur (CPU)
211 Deacutefinition Le CPU (Central Processing Unit) est un circuit eacutelectronique
complexe permettant de manipuler et de traiter les donneacutees qui lui sont
fournies
212 Composants drsquoun CPU
CPU= Bloc logique de commande (seacutequenceur) + Uniteacute de Traitement (UT)
a) Bloc logique de commande (seacutequenceur) Il organise lexeacutecution des
instructions au rythme drsquoune horloge et eacutelabore tous les signaux de
synchronisation internes ou externes du microprocesseur Il contient
- Le Compteur Ordinal (CO) appeleacute aussi Compteur de programme
(CP) ou instruction pointer (IP) Le CO est un registre dont le contenu
est initialiseacute avec ladresse de la premiegravere instruction du programme Il
contient toujours lrsquoadresse de lrsquoinstruction agrave exeacutecuter
- Le Registre dInstruction (RI) Il contient linstruction en cours de
traitement
b) Uniteacute de Traitement (UT) Cette uniteacute contient une UAL et des registres
- Uniteacute Arithmeacutetique et Logique (UAL) Un circuit complexe assurant
les fonctions logiques (ET OU Comparaisonhellip) ou arithmeacutetiques
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 1
Architecture drsquoun ordinateur 1 Deacutefinition dun ordinateur
Un ordinateur est une machine de traitement de linformation Il est capable
dacqueacuterir de linformation de la stocker de la transformer en effectuant des
traitements quelconques puis de la restituer sous une autre forme
2 Composants drsquoun ordinateur
En ouvrant le boitier drsquoun ordinateur nous trouvons une carte megravere qui sert agrave
rassembler tous les composants de lrsquoordinateurs (CPU meacutemoire les disques les cartes drsquoextensionhellip)
21 Le processeur (CPU)
211 Deacutefinition Le CPU (Central Processing Unit) est un circuit eacutelectronique
complexe permettant de manipuler et de traiter les donneacutees qui lui sont
fournies
212 Composants drsquoun CPU
CPU= Bloc logique de commande (seacutequenceur) + Uniteacute de Traitement (UT)
a) Bloc logique de commande (seacutequenceur) Il organise lexeacutecution des
instructions au rythme drsquoune horloge et eacutelabore tous les signaux de
synchronisation internes ou externes du microprocesseur Il contient
- Le Compteur Ordinal (CO) appeleacute aussi Compteur de programme
(CP) ou instruction pointer (IP) Le CO est un registre dont le contenu
est initialiseacute avec ladresse de la premiegravere instruction du programme Il
contient toujours lrsquoadresse de lrsquoinstruction agrave exeacutecuter
- Le Registre dInstruction (RI) Il contient linstruction en cours de
traitement
b) Uniteacute de Traitement (UT) Cette uniteacute contient une UAL et des registres
- Uniteacute Arithmeacutetique et Logique (UAL) Un circuit complexe assurant
les fonctions logiques (ET OU Comparaisonhellip) ou arithmeacutetiques
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 2
- Registre deacutetat (PSW) Crsquoest un ensemble de bits au sein du CPUougrave
chacun est un indicateur dont leacutetat deacutepend du reacutesultat de la derniegravere
opeacuteration effectueacutee par lrsquoUAL Les drapeaux preacutesents dans la plupart des
microprocesseurs actuels sont
Drapeau Z (Zeacutero) Indique que le reacutesultat de lrsquoopeacuteration est nul
Drapeau C (Carry) Indique que le reacutesultat nrsquoest pas complet puisqursquoil ya une retenue
Drapeau NS (Negative Signe) Indique que le reacutesultat est
infeacuterieur agrave 0
Drapeau VO (OVerflow) Indique un deacutepassement de capaciteacute (la
taille du processeur est petite pour stocker le reacutesultat)
- Registre accumulateur (ACC) Crsquoest des registres de travail servant agrave
stocker une opeacuterande (donneacutee) au deacutebut dune opeacuteration arithmeacutetique et le
reacutesultat agrave la fin de lopeacuteration
22 La meacutemoire centrale (MC)
La MC est diviseacutee physiquement en cases de taille fixe Chaque case possegravede une
adresse
Les cases peuvent ecirctre adresseacutees par une opeacuteration de lecture ou drsquoeacutecriture
Selon le type drsquoun ordinateur une case est constitueacutee de 8 bits (BInary digiT eacuteleacutement
eacuteleacutementaire drsquoinformation) ou drsquoun nombre plus grand de bits 16 32hellip on parle
alors drsquoun mot meacutemoire (word)
DONC
Un mot meacutemoire repreacutesente une uniteacute drsquoinformation adressable ( que toute opeacuteration
de RW porte sur un mot meacutemoire)
A chaque mot meacutemoire est associeacute une adresse unique indiquant la position en
meacutemoire (les adresses sont seacutequentielles) et un contenu repreacutesentant une instruction
ou une donneacutee
La MC contient principalement deux types drsquoinformations
- Les instructions des diffeacuterents programmes
- Les donneacutees neacutecessaires agrave lrsquoexeacutecution des programmes
Les principales caracteacuteristiques dune meacutemoire sont les suivantes
- La capaciteacute repreacutesentant le volume global dinformations (en bits) que
la meacutemoire peut stocker
- Le temps daccegraves correspondant agrave lintervalle de temps entre la
demande de lectureeacutecriture et la disponibiliteacute de la donneacutee
- Le temps de cycle repreacutesentant le temps minimal entre 2 acceacutees
meacutemoires successifs
- Le deacutebit deacutefinissant le nombre drsquoinformations lues ou ecrites seconde
- La non volatiliteacute caracteacuterisant laptitude dune meacutemoire agrave conserver les
donneacutees lorsquelle nest plus alimenteacutee eacutelectriquement
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 3
221 Types de meacutemoires Il existe de types de meacutemoires les meacutemoires vives
(RAM) et les meacutemoires mortes (ROM)
a) Les meacutemoires vives (RAM ) La RAM (Random Acces Memory) est une
uniteacute de stockage permettant le sauvegarde des informations pendant tout
le temps de fonctionnement drsquoun ordinateur La RAM est une meacutemoire volatile et dont son contenu peut ecirctre modifieacute
(RW) On trouve les SRAM les DRAM les SDRAM et actuellement crsquoest les DDR
b) Les meacutemoires mortes (ROM) La ROM (Read Only Memory) est une
meacutemoire non volatile et dont le contenu ne peut ecirctre modifieacute (R)
Les ROMs stockent des programmes invariables comme par exemple le
programme exeacutecuteacute au deacutemarrage (BIOS)
Nous trouvons PROM EPROM EEPROM FLASH EPROM
222 Les registres de la meacutemoire centrale Dans la meacutemoire on trouve deux
types de registres
- Le registre drsquoadresse meacutemoire (RAM) Il contient lrsquoadresse drsquoun mot meacutemoire
- Le registre de donneacutees (mot) meacutemoire (RDM) Il contient le contenu
du mot meacutemoire
223 Capaciteacute de la meacutemoire La capaciteacute de la meacutemoire srsquoexprime en fonction du nombre de mots meacutemoire ainsi qursquoau nombre de bit par mot
- Soit k la taille du bus drsquoadresses (taille du registre RAM) - Soit n la taille du bus de donneacutees (taille du registre RDM ou la taille
drsquoun mot meacutemoire) On peut exprimer la capaciteacute de la meacutemoire centrale soit en nombre de
mots meacutemoire ou en bits ( octets kilo-octetshellip)
224 Notion de meacutemoires caches Le cache est une meacutemoire rapide contenant une
copie dune zone de meacutemoire centrale il sert de couche intermeacutediaire entre le
CPU et la meacutemoire ceci afin de diminuer les temps daccegraves et acceacuteleacuterer le
traitement des instructions
Calcul de la capaciteacute de la MC
La capaciteacute = 2k Mots meacutemoire
La capaciteacute = 2k n Bits
Avec k taille du registre adresse
meacutemoire
n taille du registre donneacutees
meacutemoire
Conversions
1 Octet= 1 Byte = 8 bits
1 KO (kilo octet) = 1024 Octets = 210
Octets
1 MO (mega octet) = 1024 KO
1 GO (giga octet) = 1024 MO
1 TO (Tera octet) = 1024 GO
1 PO (Peta octet) = 1024 TO
1 EO (Exa octet) = 1024 PO
1 ZO (Zetta octet) = 1024 EO
1 YO (Yotta octet) = 1024 ZO
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 4
a) Fonctionnement de la meacutemoire cache
1 Le CPU demande une information
2 La recherche se fait drsquoabord dans la meacutemoire cache
- Si lrsquoinformation existe dans la meacutemoire cache elle est transmise au CPU on parle de succegraves de cache (cache hit )
- Si elle nrsquoexiste pas dans la cache on parle alors de deacutefaut de cache
(cache miss) et la recherche se fera dans la MC Dans ce cas la
meacutemoire cache enregistre la copie de lrsquoinformation trouveacutee pour
utilisation ulteacuterieure si besoin
b) Type de cache
- Le Cache L1 (primaire) directement inteacutegreacute dans le CPU cette
meacutemoire est tregraves rapide et de petite taille Elle est diviseacutee en L1
donneacutees et L1 instructions
- Le Cache L2 (secondaire) est situeacute au niveau du boicirctier contenant le
processeur (dans la puce)
Ce cache contient les donneacutees qui ne se trouvent pas dans L1
Cette meacutemoire est plus grande que L1
- Le Cache L3 (externe) est situeacutee au niveau de la carte megravere il stocke
les donneacutees qui ne se trouvent pas dans la L1 et la L2
Crsquoest une meacutemoire beaucoup plus lente que L1 et L2
23 Les peacuteripheacuteriques
Nous distinguons quatre sortes de peacuteripheacuteriques
- Les peacuteripheacuteriques dentreacutee Ils permettent effectivement de fournir agrave
lordinateur les donneacutees agrave traiter (Claviersouris scanner hellip) - Les peacuteripheacuteriques de sortie Ils permettent agrave lutilisateur de recevoir
des informations venant de la machine eacutecran imprimante
- Les Peacuteripheacuteriques drsquoentreacutee sortie Ils permettent la circulation de
linformation dans les deux sens disque dur lecteur de disquettes
- Les peacuteripheriques de stockage Ils sont des peacuteripheriques drsquoEntreacutee sortie permettant le stockage drsquoinformation de manieacutere permanente
(disque dur hellip)
24 Les bus
Un bus est lrsquoensemble de liaisons physiques (cacircbles pistes de circuits
imprimeacutes etc) pouvant ecirctre exploiteacutees en commun par plusieurs eacuteleacutements mateacuteriels
afin de communiquer
Il existe 3 sous ensembles de bus
a) Le bus dadresses
- Il transporte les adresses meacutemoire auxquelles le processeur souhaite
acceacuteder pour lire ou eacutecrire une donneacutee
- Il sagit dun bus unidirectionnel
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Chapitre 1 Architecture des ordinateurs
Dr HADJ TAYEB S 5
b) Le bus de donneacutees
- Il veacutehicule les instructions en provenance ou agrave destination du
processeur
- Il sagit dun bus bidirectionnel
c) Le bus de controcircle (bus de commandes) Il transporte les ordres et les
signaux de synchronisation en provenance de luniteacute de commande et agrave
destination de lensemble des composants mateacuteriels
Nous trouvons 2 types de bus
a) Le bus systegraveme (bus interne) permet au processeur de communiquer avec
la MC
b) Le bus dextension (bus dentreacuteesortie) permet aux divers composants
lieacutes agrave la carte-megravere de de communiquer entre eux
3 Schema reacutecapitulatif
Peacuteriphrique
drsquoentreacutee Peacuteripheacuterique de
sortie
Bloc logique de commande UT
CO
RI
Reg Etat
ACCs
UAL
Meacutemoire Centrale (RAM ampROM)
Peacuteripheriques de stockage
CPU
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 6
Machine VON NEUMANN et exeacutecution
drsquoinstruction
1 Introduction
En 1945 le matheacutematicien John VON NEUMANN proposa la construction de la
machine modegravele EDVAC Une machine caracteacuteriseacutee par la preacutesence drsquoune uniteacute arithmeacutetique
et logique une uniteacute de controcircle drsquoune unique meacutemoire centrale qui contient agrave la fois les
instructions du programme et les donneacutees manipuleacutees et de dispositifs drsquoEntreacutee sortie
Pour exeacutecuter une instruction au niveau il faut
- Rechercher lrsquoinstruction dans la meacutemoire - Deacutecoder linstruction
- Recherche dans la meacutemoire les donneacutees concerneacutees par linstruction
- Deacuteclencher lopeacuteration adeacutequate sur lUAL ou lES
- Range au besoin le reacutesultat dans la meacutemoire
2 Cycle drsquoexeacutecution drsquoune instruction 21 Phase 1 Recherche dinstruction
Etape 1 Le compteur ordinal contient ladresse de linstruction suivante du programme
Cette valeur est placeacutee sur le bus dadresse par lrsquouniteacute de commande qui eacutemet un ordre de lecture
Etape 2 Au bout dun certain temps (temps daccegraves agrave la meacutemoire) le contenu de la case
meacutemoire est mis dans sur le bus de donneacutee
Etape 3 Lrsquoinstruction est stockeacutee dans le registre dinstruction RI
1 Lrsquouniteacute arithmeacutetique et logique (UAL)
pour drsquoeffectuer les opeacuterations de base
2 Lrsquouniteacute de controcircle chargeacutee du seacutequenccedilage
des opeacuterations
3 La meacutemoire (RAM et ROM)
4 Les dispositifs drsquoentreacutee-sortie pour la
communication avec le monde exteacuterieur
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 7
Etape 4 Le RI contient maintenant le premier mot de linstruction qui peut ecirctre codeacutee sur
plusieurs mots Ce premier mot contient le code opeacuteratoire qui deacutefinit la nature de lopeacuteration
agrave effectuer (addition ) et le nombre de mots de linstruction
Etape 5 Luniteacute de commande transforme linstruction en une suite de commandes
eacuteleacutementaires neacutecessaires au traitement de linstruction
22 Phase 2 Recherche des opeacuterandes et exeacutecution
Etape 1 Si linstruction neacutecessite une donneacutee en provenance de la meacutemoire luniteacute de
commande reacutecupegravere sa valeur sur le bus de donneacutees
Etape 2 Lrsquoopeacuterande est stockeacutee dans un registre Etape 3 Un ordre est donneacute par lrsquouniteacute de commande agrave lrsquoUAL pour effectuer lrsquoopeacuteration
Figure 1 Phase 1 drsquoexeacutecution drsquoune instruction
Figure 2 Les 3 eacutetape de la phase de recherche
drsquoopeacuterande et drsquoexeacutecution drsquoune instruction
Chapitre 2 Machine VON NEUMANN et exeacutecution drsquoinstruction
Dr HADJ TAYEB S 8
Etape 4 Le micro-programme reacutealisant linstruction est exeacutecuteacute
Etape 5 Les drapeaux sont positionneacutes (registre deacutetat)
23 Phase 3 Passage agrave lrsquoinstruction suivante
Luniteacute de commande positionne le PC pour linstruction suivante
Etapes 4 et 5 de
la phase 2
Phase 3
Figure 3 Etapes 4-5 de la phase 2 et etape1 et phase 3 drsquoexeacutecution drsquoune instruction
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 9
Repreacutesentation des nombres
1 Systegraveme de numeacuteration
Le codage drsquoune information consiste agrave eacutetablir une correspondance entre la repreacutesentation externe ou deacutecimal et sa repreacutesentation interne (suite de 0 et 1)
4 systegravemes sont identifieacutes
a)Le systegraveme deacutecimal Le systegraveme deacutecimal est un systegraveme de numeacuteration
utilisant la base dix Dans ce systegraveme les puissances de dix et leurs multiples
beacuteneacuteficient dune repreacutesentation privileacutegieacutee
b) Le systegraveme binaire Le systegraveme binaire est un systegraveme de numeacuteration
utilisant la base 2 Les valeurs permises sont 0 et 1
On passe dun nombre binaire au suivant en ajoutant 1 comme en deacutecimal sans
oublier les retenues et en utilisant les tables dadditions suivantes
0+0=0 0+1=1 1+0=1 1+1=10
Larithmeacutetique binaire est utiliseacutee par les machines eacutelectroniques les plus courantes
(calculatrices ordinateurs etc) car la preacutesence ou labsence de courant peuvent servir
agrave repreacutesenter les deux chiffres 0 et 1
0 repreacutesente leacutetat fermeacute 1 repreacutesente leacutetat ouvert
c) Le systegraveme octal Le systegraveme octal utilise un systegraveme de numeacuteration ayant
comme base 8
Il faut noter que dans ce systegraveme nous naurons plus 10 symboles mais 8 seulement
0 1 2 3 4 5 6 7
d) Le systegraveme hexadeacutecimal Le systegraveme hexadeacutecimal utilise les 16 symboles
suivants 0 1 2 3 4 5 6 7 8 9 A B C D E F
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 10
Tableau 1 Tableau de correspondance
base 2 base 10 et base 16
2 Conversions et changements de base
21 Conversion drsquoun nombre deacutecimal en binaire La meacutethode consiste agrave diviser le nombre donneacute par la base demandeacutee tant que
crsquoest possible On rassemble ensuite les restes en partant de la fin et on obtient lrsquoeacutecriture dans la nouvelle base
Exemple 1 (170)10=( )2
170
On fait des divisions successives on srsquoarrecircte quand le quotient =0
(193)10 = (10101010)2
2
1 0
2 5 0
2
42
21 0
2
0 85
1
2
10 1
2
2 1
2
0 ARRET 1
2
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 11
22 Conversion drsquoun nombre de base N vers la base 10
Pour passer dun nombre en base N agrave un nombre en base 10 on peut appliquer la
meacutethode suivante Soit K le nombre en base N agrave convertir Pour tout chiffre c de rang
r dans K on calcule ctimesN r La repreacutesentation de K en base 10 est la somme de tous les
produits
Le comptage de r commence agrave zeacutero de la droite vers la gauche
Exemple 2 (10110)2= 1times24 + 0times23 + 1times22 + 1times21 + 0times20 = (22)10
(3FA)16= 3times162 + 15times161 + 10times160 = (1 018)10
(745)8 = 7 times82 + 4 times 81 + 5 times 80= (485)10
(5AF)16 = 5 times162 + A times161 + F times 160 = (1455)10
3 Repreacutesentation des nombres relatifs
Il faut pouvoir eacutecrire des entiers neacutegatifs en preacutevoyant un bit de signe placeacute en
tecircte Un bit de signe nul indique une valeur positive un bit de signe positionneacute agrave 1
indique une valeur neacutegative
- Compleacutement agrave 1 Ce codage fort simple consiste agrave inverser la valeur de chaque
bit composant une valeur binaire si le nombre est neacutegatif
- Compleacutement agrave 2 On a introduit la repreacutesentation par compleacutement agrave deux Celle-ci
consiste agrave reacutealiser un compleacutement agrave un de la valeur puis dajouter 1 au reacutesultat
Exemple 3 Sur une machine de 8 bits
(-7)10= ()ca2
(-7)10 = (0 0000111)bp (bp binaire pur ou valeur absolue )
(-7)10 = (1 0000111)bs (bs binaire signeacute =gt introduire le signe )
Remarques importantes
1 Repreacutesentation du nombre
-Si le nombre est positif alors Binaire pur=binaire signeacute = Compleacutement agrave1= Compleacutement agrave2
-Si le nombre est neacutegatif alors Compleacutement agrave1= Inverser tous les bit sauf le bit du signe
Compleacutement agrave2= Compleacutement agrave 1 +1
2 Les additions sont font en compleacutement agrave 2
Nous avons un deacutebordement
- Si la somme de deux nombres positifs donne un nombre neacutegatif
- Ou la somme de deux nombres neacutegatifs donne un nombre positif
Il ne peut jamais y avoir un deacutebordement si les deux nombres sont de signes diffeacuterents
Ce qui est logique Supposant que jai A+ B (avec A positif et B neacutegatif) avec A et B sont
repreacutesenteacutes sur 8 bits Laddition me donne un reacutesultat qui doit ecirctre entre B et A ce qui
veut dire que le reacutesultat est repreacutesentable sur 8 bits
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 12
Exemple 4 Voici une addition de -7 et +9 reacutealiseacutee en Ca2 sur une machine de 8 bits
Nombre Binaire pur Binaire signeacute Ca1 Ca2
(-7)10 (00000111) (10000111) (11111000) (11111001)
(+9)10 (00001001) (00001001) (00001001) (00001001)
Lrsquoaddition en ca2 (11111001)ca2 +(00001001)ca2= (100000010 ) ca2
Nous avons une machine de 8 bits et le resultat est sur 9 bits
On effectue lrsquoaddition de 2 nombres de signes differents DONC
on ignore la retenue Donc le reacutesultat = (00000010) ca2 = (+2)10
Exemple 5 Coder les entiers 61 et -61 sur un octet en utilisant la repreacutesentation par le
signe et la valeur absolue Montrer que lrsquoaddition binaire de ces entiers ainsi codeacutes produit un reacutesultat incorrect Montrer qursquoen revanche le reacutesultat est correct si ces entiers sont codeacutes en utilisant la repreacutesentation par le compleacutement agrave 2
Addition en binaire
(61)10 (00111101) 2
(-61) 10 +(10111101)2
_________________
= (11111010)2 = (-122)10
Crsquoest incorrect Addition en Compleacutement agrave 2
(61)10 (00111101) ca2
(-61) 10 + (11000011)ca2
_____________
00 (0)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 13
4 Repreacutesentation en virgule fixe
41 Conversion drsquoun nombre deacutecimal en binaire
Exemple 6 Soit le nombre (10625)10 en convertir en binaire en virgule fixe
La partie entiegravere 10 pas de changement on utilise la meacutethode des divisions successives par 2
(10)10=(1010)2
On prend 0625x2 (base)=125 (on garde le 1)
On prend 025x2=05(on garde le 0)
On prend 05x2=10 (on garde le 1 et on srsquoarrecircte car apregraves la virgule il ya un zeacutero)
On prend les chiffres du haut vers le base ce qui donne en virgule fixe (1010101)2
42 Conversion drsquoun nombre binaire en deacutecimal
Exemple 7 (1010101)2=( )10
=
5Repreacutesentation des nombres reacuteels suivant la norme IEEE 754
Les nombres agrave virgule flottante sont les nombres les plus souvent utiliseacutes dans un
ordinateur pour repreacutesenter des valeurs non entiegraveres Ce sont des approximations de
nombres reacuteels Les nombres agrave virgule flottante possegravedent
- un signe s (dans -1 1)
- une mantisse m
- un exposant e
Un tel triplet repreacutesente un reacuteel smbe ougrave b est la base de repreacutesentation (geacuteneacuteralement 2 sur
ordinateur mais aussi 16 sur certaines anciennes machines 10 sur de nombreuses
calculatrices ou eacuteventuellement toute autre valeur) En faisant varier e on fait laquo flotter raquo la
virgule deacutecimale Geacuteneacuteralement m est dune taille fixeacutee
Ceci soppose agrave la repreacutesentation dite en virgule fixe ougrave lexposant e est fixeacute
La norme IEEE 754 speacutecifie deux formats de nombres en virgule flottante (et deux
formats eacutetendus optionnels) et les opeacuterations associeacutees Les deux formats fixeacutes par la norme
IEEE 754 sont sur 32 bits (laquo simple preacutecision raquo) et 64 bits (laquo double preacutecision raquo)
Chapitre 3 Repreacutesentation des nombres
Dr HADJ TAYEB S 14
Encodage Signe Exposant Mantisse Preacutecision Chiffres
significatifs
Simple
preacutecision 32 bits 1 bit 8 bits 23 bits 24 bits 7
Double
preacutecision 64 bits 1 bit 11 bits 52 bits 53 bits 16
Dans le format IEEE simple preacutecision
Exposant Biaiseacute = Exposant normaliseacute + Biais
Biais=2taille de lrsquoexposant-1-1=127
Exemple 8 Convertir (-118625)10 en virgule flottante selon la norme IEEE 754
bull Le signe neacutegatif =gt bit de signe eacutegal agrave 1
bull Convertir en binaire le nombre 118625 en virgule fixe
0 625x2=125
025x2=05
05x2=10 on srsquoarrecircte car il ya un zeacutero apregraves la virgule
118625= (1110110 101)2
bull Deacutecalage Il faut deacutecaler la virgule vers la gauche de faccedilon agrave ne laisser qursquoun seul 1sur la gauche ce qui donne (1110110 101)2= 1110110 101x26
On a trouveacute exposant=6 et Mantisse pseudo normaliseacute =110110101
bull Calcul de lrsquoexposant biaiseacute
Exposant Biaiseacute = Exposant normaliseacute + Biais =6+127=(133)10=(10000101)2
Donc (-118625)10 en virgule flottante est
Signe Exposant biaiseacute Mantisse
1 10000101 110110 10100000000000000
Exemple 9 (5255)10 en virgule flottante IEEE
bull 5255 est positif donc le 1er bit sera 0
bull Sa repreacutesentation en base 2 est la suivante (10000011011) 2
bull En normalisant on trouve 1000001101129
bull On ajoute 127 agrave lexposant qui vaut 9 ce qui donne 136 soit en base 2 10001000
bull La mantisse pseudo normaliseacute 0000011011
La repreacutesentation du nombre 5255 en binaire avec la norme IEEE est donc
0 1000 1000 0000 0110110000000000000 = (4403600)16
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 15
Algegravebre DE BOOLE 1 Deacutefinition
Lrsquoalgegravebre de Boole est une algegravebre binaire qui eacutetudie la logique Elle est utiliseacutee pour faire
lrsquoeacutetude des systegraveme posseacutedant deux eacutetats qui srsquoexclus mutuellement
- Un interrupteur est ouvert ou non ouvert (fermeacute) - Une lampe allumeacutee ou non allumeacutee (eacuteteinte) - Une porte ouverte ou non ouverte (fermeacutee)hellip
Une variable booleacuteenne ou logique est une variable qui prend deux valeurs VRAI ou FAUX ou bien encore 1 ou 0
Une fonction logique ou booleacuteenne relie N variables via un ensemble drsquoopeacuterateurs logiques
Il existe 3 opeacuterateurs logiques de base - Un operateur unaire Non (NOT) - Deux opeacuterateurs binaires lrsquoopeacuterateur ET (AND) et lrsquoopeacuterateur OU (OR) + Nous pouvons consigner le reacutesultat obtenu dans une table de veacuteriteacute
Les opeacuterateurs logiques de base peuvent ecirctre reacutealiseacutes par des circuits eacutelectroniques ils sont alors appeleacutes Portes logiques
2 Axiomes et postulats
Une algegravebre de Boole est constitueacutee de 1 un ensemble E 2 deux eacuteleacutements particuliers de E 0 et 1 (correspondant respectivement agrave FAUX et
VRAI) 3 deux opeacuterations binaires sur E + et (correspondant respectivement au OU et ET
logiques) 4 une opeacuteration unaire sur E macr (correspondant agrave la neacutegation logique)
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 16
On acceptera les postulats suivants
De ces postulats deacutecoulent les axiomes suivants Soient a b et c des eacuteleacutements de E
3 Fonctions logiques agrave deux variables
1 Conjonction AB est VRAI (a and b) si et seulement si A est vrai et B est vrai
2 Disjonction A+ B est VRAI (A ou B) si et seulement si A est vrai ou B est vrai
3 Negation Le contraire de A est vrai est faux
4 Le OU EXCLUSIF (XOR) ou (oplus) Il se compose de la maniegravere suivante Aoplus = + = + +
5 Le OU EXCLUSIF (XNOR) ou (otimes) Le XNOR repreacutesente la neacutegation de XOR oplus = otimes = A B + = A + B + B
4 Proprieacuteteacutes de lrsquoalgeacutebre de Boole
Theacuteoregraveme 1 Involution =
Theacuteoregraveme 2 Idempotence + = et =
Theacuteoregraveme 3 Eleacutement absorbant + = =
Theacuteoregraveme 4 Absorption a+ab=a et a(a+b)=a
Theacuteoregraveme 5 Loi de Morgan + = = +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 17
+ = + + =
Deacutemonstration du theacuteoregraveme 3 eacuteleacutement absorbant
Deacutemonstration du theacuteoregraveme 6 Morgan
5 Passage drsquoune table de veacuteriteacute en une en une fonction booleacuteenne Agrave partir de la table de veacuteriteacute nous pouvons avoir deux formes analytiques deacutenommeacutees formes canoniques ndash 1ere forme canonique somme canonique de produits ndash 2eme forme canonique produit canonique de sommes
51 Premiegravere forme canonique
- La premiegravere forme canonique est une forme ΣΠ - Chaque intersection contient les n variables - Ses intersections sont appeleacutees laquo mintermes raquo - Le reacutesultat est la somme des mintermes vrais de la fonction
Exemple 1 Soit la table de veacuteriteacute suivante Donner la 1ere forme canonique
=gt
+ = + + = + + = + =
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoassociativiteacute
Drsquoapregraves le theacuteoregraveme 2
Drsquoapregraves lrsquoaxiome de compleacutementation
+ = + + = + + =
Drsquoapregraves lrsquoaxiome de la distributiviteacute
Drsquoapregraves lrsquoaxiome de compleacutementation
Drsquoapregraves lrsquoaxiome de lrsquoeacuteleacutement neutre
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 18
52 Deuxiegraveme forme canonique
- La deuxiegraveme forme canonique est une forme ΠΣ - Chaque reacuteunion contient les n variables - Ses reacuteunions sont appeleacutees laquo maxtermes raquo - Le reacutesultat est le produit des maxtermes compleacutementaires des points faux de la fonction
Exemple 2 Soit la table de veacuteriteacute suivante Donner la 2eme forme canonique
6 Tableau de Karnaugh
61 Principe
Le tableau de Karnaugh est une repreacutesentation sous une forme particuliegravere de la table de veacuteriteacute dune fonction logique
Il consiste en la deacutetermination des blocs rectangulaires de taille 2n (168 4 2 1) de 1 adjacents
Les etapes sont - On en deacuteduit la fonction simplifieacutee associeacutee agrave la table de veacuteriteacute - On repreacutesente un tableau agrave 2 dimensions - Le passage dune colonne agrave une colonne adjacente ou dune ligne agrave une ligne
adjacente modifie la valeur dune seule variable - Le tableau se referme sur lui-mecircme la colonne la plus agrave gauche est voisine de la
colonne la plus agrave droite idem pour les lignes du haut et du bas - Une case du tableau contient une valeur booleacuteenne(1-0) deacutetermineacutee agrave partir de la
table de veacuteriteacute ou de la fonction booleenne 1 FC ou 2FC Dans le cas drsquoune fonction en entreacutee 1ere FC nous remplissons le tableau par des 1 en nous basant sur le principe des variables booleacuteennes de la 1ere FC Dans le cas drsquoune fonction en entreacutee 2eacuteme FC nous remplissons le tableau par des 0 en nous basant sur le principe des variables booleacuteennes de la 2eacuteme FC
62 Regroupement en blocs rectangulaires des bits agrave 1 adjacents Le regroupement doit suivre des conditions qui sont
- Tous les 1 du tableau doivent ecirctre englobeacutes dans au moins un bloc (un bloc agrave une taille de 16 8 4 2 1 de bits 1 adjacents) Un bit agrave 1 peut appartenir agrave plusieurs
blocs On doit creacuteer les blocs les plus gros possibles
- A chaque bloc correspond un terme formeacute comme suit
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 19
Pour le bloc si une une variable prend les valeurs 0 et 1 on ne la prend pas On ne conserve que les variables qui ne varient pas Si une variable a reste agrave 1
on note a si reste agrave 0 on note
Le terme logique du bloc correspond au ET de ses variables qui ne changent pas
La fonction logique simplifieacutee est le OU de tous les termes des blocs trouveacutes
Exemple3 Tableau de Karnaugh agrave deux variables
Table de veacuteriteacute tableau de Karnaugh
On remplie le tableau de karnaugh en nous basant sur la table de veacuteriteacute les cas ougrave la fonction f (ab)=1 Nous avons 2 groupes de 2 bits adjacents
- Pour le vertical on a toujours a = 1 =gt on aura le terme a - Pour lhorizontal on a toujours b =1=gt on aura le terme b
Donc la simplification est f(ab) = a + b
Exemple 4 Tableau de Karnaugh agrave 3 variables
Table de veacuteriteacute Tableau de Karnaugh
Exemple 5 Tableau de Karnaugh de 4 variables agrave partir drsquoune fonction booleacuteenne = + + + + + + + + +
Cette fonction est donneacutee en 1ere forme canonique ceci veut dire que la fonction vaut 1 dans un des chaques termes
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 20
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le 1er regroupement est de huit uns adjacents
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1
Il reste deux 1 qui nrsquoappartiennent agrave aucun groupe il faut faire un groupe de 4 mieux que un groupe de 2
cd ab
00 01 11 10
00 1 1 01 1 1 1
11 1 1 1
10 1 1 Le c ne change pas =1 Le d ne change pas =1 Le b ne change pas =1
La fonction simplifieacutee F= d + bc Nou pouvons obtenir le mecircme resultat en nous basant sur la simplification algeacutebrique = + + + + + + + + +
= + + + + + + + +
Chapitre 4 Algegravebre de BOOLE
Dr HADJ TAYEB S 21
= + + = + = + + )
F= +
Pour finir le cours voici des exemples de rgroupement de Karnaugh
Exemples de regroupements possibles
Exemples de regroupement impossibles
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 22
Introduction agrave lrsquoalgorithmique 1 Deacutefinition drsquoun algorithme
Lrsquoalgorithme est une suite drsquoactions appeleacutees instructions dont lrsquoexeacutecution fournit le reacutesultat rechercheacute
2 Structure geacuteneacuterale drsquoun algorithme Un algorithme se compose de
Entecircte Identifie le problegraveme agrave reacutesoudre Il est introduit par le mot cleacute Algorithme nom
algorithme
Un bloc composeacute de
bull Un environnement de reacutesolution du problegraveme qui rassemble les deacuteclarations drsquoobjets non primitifs concerneacutes par les traitements
bull Un algorithme qui deacutecrit les traitements
Entecircte
Environnement
Algorithme
3 Notions algorithmiques
31 Identificateur
Un identificateur est un nom explicite drsquoune constante drsquoune variable ou drsquoune fonction
Algorithme nom_algorithme
Constantes
Liste des constantes
Variables
Liste des variables
Deacutebut
Instruction 1
Instruction 2
hellip Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 23
32 Variable et constante
Une variable ou une constante sert agrave meacutemoriser une valeur donneacutee durant un
algorithme
- Constante Une donneacutee manipuleacutee par un programme et ne pouvant ecirctre modifieacutee
Syntaxe Constante NomConstante = Valeur
Exemple Constante Pi = 3141559 Constante Nombrejour = 7
- Variable Une donneacutee manipuleacutee par un programme et pouvant ecirctre modifieacutee
Une variable peut ecirctre une donneacutee drsquoentreacutee le reacutesultat final drsquoun calcul un reacutesultat intermeacutediaire de calcul
Syntaxe Variable NomVariable Type
Exemple Variable Rayon Reel
Variable Compteur Entier
33 Les types standards
Tout langage de programmation offre un certain nombre de types standards preacutealablement
deacutefinis Il existe 5 types standards
1 Type logique (booleacuteen) Valeur pouvant ecirctre soit Vraie soit Fausse
Exemple Constante true = Vrai
Variable B1B2 booleen
Opeacuterateurs du type Booleacuteen la conjonction (et) la disjonction (ou) et la neacutegation = lt gt
Daggerhellip
2 Type entier Valeur numeacuterique entiegravere pouvant ecirctre signeacutee ou non signeacutee (codeacutee sur un
ou plusieurs octets)
Exemple Constante moins_quarante= -40
Variable E1 entier
Les opeacuterations possibles sur les entiers sont
- Operations matheacutematiques +- div (division entiegravere ou euclidienne) mod (reste
de division entiegravere)
- Les fonctions standards
sqr (n) cette fonction fournit le carreacute drsquoun entier n abs (n) cette fonction fournit la valeur absolue drsquoun entier n succ (n) cette fonction fournit le successeur drsquoun entier n = n+1 pred (n) cette fonction fournit le preacutedeacutecesseur drsquoun entier n = n-1
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 24
3 Type reacuteel Les valeurs numeacuteriques du type reacuteel sont codeacutees avec une mantisse et un
exposant
Exemple Constante PI=314
Variable R1R2 reacuteel
Les opeacuterations des reacuteels sont addition soustraction multiplication division
Exemples de fonctions matheacutematiques classiques
- sin tg hellip Les fonctions trigonomeacutetriques
- sqr La fonction carreacute
- abs La fonction qui renvoie la valeur absolue
- sqrt La fonction racine carreacutee
Les fonctions speacutecifiques au traitement informatiques
- trunc (r) Cette fonction fournit la partie entiere drsquoun reacuteel
- round (r) cette fonction engendre lrsquoentier le plus proche drsquoun reacuteel
4 Type caractegravere Ce type comporte les lettres de lrsquoalphabet les chiffres de 0 agrave
9 les signes de ponctuation ( etc) les caractegraveres speacuteciaux ( etc) Les operateurs (+
- gt etc)
Exemple Constante six = lsquo6rsquo Variable C1 C2 caractegravere
Les fonctions preacutedeacutefinis sur les caractegraveres
- succ (c) fonction successeur qui fournit le caractegravere suivant du caractegravere c
- pred (c) fonction preacutedeacutecesseur qui fournit le preacuteceacutedent du caractegravere c
5 Type chaicircne Une chaine est une suite de caractegraveres du code Ascii
Exemple Constante Bahia = lsquoORANrsquo Espace= lsquo rsquo Variable Nomprenom chaine
Les fonctions preacutedeacutefinis sur les chaines
- Length (c) Cette fonction fournit la longueur de la chaine c
- concat (c1c2) Cette fonction fournit une chaine obtenue par concateacutenation de la chaine
c1 et c2
34 Affectation
Une affectation est une instruction qui stocke dans une variable une valeur drsquoune expression
Syntaxe geacuteneacuterale Variable Expression Cette eacutecriture se lit La variable reccediloit lrsquoexpression
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 25
Exemple Etat de la meacutemoire
A B entier
A B
A 5 A
B A -2 B
A B-A A (La valeur 5 est eacutecraseacutee)
4 Les fonctions de lecture Ecriture
Lalgorithme a besoin de donneacutees en entreacutee et fournit un reacutesultat en sortie Lorsquon
utilise un ordinateur le clavier permet de saisir les donneacutees et leacutecran dafficher un reacutesultat ou
des textes qui donnent des directives sur les donneacutees agrave fournir
Lorsquon voudra afficher un texte sur leacutecran on utilisera une fonction nommeacutee Ecrire
permettant drsquoaffiche agrave leacutecran les arguments quon lui demande dafficher Nous utiliserons
eacutegalement une autre fonction nommeacutee Lire qui permet de stocker la ou les donneacutees saisies au
clavier dans des variables
41 Eacutecriture des donneacutees
Trois cas peuvent ecirctre rencontreacutes
- Afficher un texte Ecrire (rsquotexte agrave afficherrsquo) - Afficher la valeur dune variable Ecrire (nom_de_la_variable)
- Meacutelange de texte et de valeurs Ecrire (rsquotexte rsquo nom_de_la_variable
rsquo textersquo nom_de_la_variable)
Remarques
La virgule seacutepare les chaicircnes de caractegraveres et la variable
Tout le texte contenu entre des guillemets est eacutecrit agrave leacutecran alors que lorsquune variable
apparaicirct dans linstruction Ecrire cest sa valeur qui est afficheacutee
-2
5
3
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 26
Exemple
Algorithme Affichage
42 Lecture des donneacutees Syntaxe lire (nom de variable)
Cela va neacutecessiter lrsquoutilisation drsquoun clavier la valeur saisie au clavier va ecirctre enregistreacutee dans variable
Attention une constante nrsquoest jamais lue
Exemple
mem Exeacutecution
Exercices faits en cours 1 Ecrire un algorithme qui calcule et affiche la somme de deux entiers
2 Ecrire un algithme qui affiche le carreacute drsquoun nombre reacuteel 3 Ecrire un algorithme qui lit une chaine de caracteacuteres et affiche sa longueur
Ecrire (rsquonombre rsquo) nb 10
Ecrire (nb)
Ecrire (rsquonb vaut rsquo nb rsquo rsquo)
Algorithme saisi
variable nom chaine
Debut Ecrire (rsquo entrer votre nom de famille rsquo) Lire (nom)
Ecrire (rsquo Votre nom estrsquo nom)
Fin
Etat de la Meacutemoire
nom
nom
Ahmed
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 27
5 Les structures alternatives
La seacutelection exprime un enchainement conditionnel (en fonction dune condition le
programme exeacutecute des opeacuterations diffeacuterentes)
On distingue lrsquoalternative reacuteduite complegravete et imbriqueacutee 51 Alternative reacuteduite Algo 1 Ecrire un algorithme qui calcule la racine drsquoun nombre
Algorithme racine
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors r sqrt (x)
eacutecrire (la racine de x est r)
FinSi
Fin
52 Alternative complegravete Algo 2 Ecrire un algorithme qui calcule la racine drsquoun nombre et affiche erreur un message si ya erreur
Si condition Alors
Bloc drsquoinstructions
Finsi
Si condition Alors
Bloc 1
Sinon
Bloc 2
Finsi
Si la condition est VRAI le bloc drsquoinstructions est exeacutecuteacute
Si la condition est VRAI le bloc 1 drsquoinstructions est exeacutecuteacute
Si la condition est FAUSSE le bloc 2 drsquoinstruction est exeacutecuteacute
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 28
Algorithme racine2
Variable x entier
Debut
eacutecrire (Saisir le nombre x)
lire (x)
Si (x gt 0) Alors
r sqrt (x)
eacutecrire (la racine de x est r)
Sinon
eacutecrire (Erreur veuillez saisir un nombre
positif)
FinSi
Fin
Algo 3 Ecrire un algorithme qui affiche la valeur absolue dlsquoun nombre
Algorithme absolue
Variable n entier
Debut
eacutecrire (Saisir le nombre )
lire (n)
Si (n gt= 0) Alors
eacutecrire (la valeur absolue de n est n)
Sinon
eacutecrire (la valeur absolue de n est -n)
FinSi
Fin
53 Alternative imbriqueacutee
Si condition1 Alors
bloc 1
Sinon Si condition2 Alors
bloc 2
Sinon Si condition3 Alors
bloc 3
Sinon
bloc 4
Finsi Finsi Finsi
Plusieurs alternatives peuvent ecirctre imbriqueacutees il srsquoagit drsquoun choix de multiple
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 29
Algo4 Afficher lrsquoeacutetat de lrsquoeau (glace eau vapeur) suivant les diffeacuterentes tempeacuteratures Algorithme tempeacuterature
Variable Temp Entier
Deacutebut
Ecrire (Entrez la tempeacuterature de lrsquoeau ) Lire(Temp)
Si (Temp lt=0) Alors Ecrire (Cest de la glace)
Sinon
Si (Temp lt 100) Alors Ecrire (Crsquoest du liquide) Sinon Ecrire (Crsquoest de la vapeur)
Finsi
Finsi
Fin
6 Les structures iteacuteratives On appelle iteacuteration toute reacutepeacutetition de lrsquoexeacutecution drsquoun traitement
A la notion drsquoiteacuteration est associeacutee la notion de boucle Le nombre drsquoiteacuteration doit ecirctre fini soit par une condition soit par un compteur
Il existe trois types de structures drsquoiteacuterations (boucles) reacutepeacuteter tant que pour
61 Structure REPETER JUSQUA Une action ou un groupe drsquoactions est exeacutecuteacute reacutepeacutetitivement jusquagrave ce qursquoune condition soit veacuterifieacutee La condition est formuleacutee par une expression booleacuteenne
Syntaxe Reacutepeacuteter bloc drsquoinstruction Jusqursquoa Condition vrai
Remarque la veacuterification de la condition srsquoeffectue apregraves les actions Donc le bloc est
exeacutecuteacute au moins une fois
62 Structure TANT QUE FAIRE Le bloc drsquoinstructions est exeacutecuteacute reacutepeacutetitivement tout le temps ougrave une condition
est vraie
Syntaxe TantQue Condition vrai Faire Bloc drsquoinstructions FinFaire
Remarque la veacuterification de la condition srsquoeffectue avant les actions Donc le bloc peut ne
jamais ecirctre exeacutecuteacute (minimim 0 fois)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 30
63 Structure POUR Indice DE A FAIRE
Le scheacutema pour utilise une variable appeleacutee compteur drsquoiteacuteration afin de controcircler le
nombre de reacutepeacutetitions
Syntaxe
Pour i de Val1 a Val2 pas Val3 Faire bloc drsquoinstructions FinFaire
Avec i variable compteur qui doit absolument ecirctre de type entier
Val1 valeur initiale
Val2 valeur finale
Val3 le pas
Remarque Les valeurs initiale (Val1) et finale (Val2) sont incluses dans le comptage
Par deacutefaut le pas drsquoincreacutementation est agrave 1 mais il est eacuteventuellement possible de speacutecifier un
autre pas drsquoincreacutementation (+2+10-1 -2)
Algo 5 Ecrire un algorithme qui demande un nombre de deacutepart n et qui calcule la somme des
entiers jusqursquoagrave ce nombre On souhaite afficher uniquement le reacutesultat final
(Exemple si lrsquoon entre n = 5 le programme doit calculer1+ 2+ 3+4+5 =15
Faut veacuterifier que n saisi est positif
Solution avec la boucle POUR Algorithme Sommation
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 Il faut absolument initialiser la Som parce que
dans la boucle vous avez ancienne et nouvelle
valeur de som
Pour i de 1 agrave N faire
Som larr Som + i fin pour
Ecrire( La somme est Som)
Fin
Cette boucle veacuterifie que le N saisi est positif Donc
A chaque fois ougrave on entre un nombre neacutegatif il
nrsquoest pas accepteacute et on doit re saisir un autre On
sort de la boucle degraves qursquoon saisi un nombre positif
Pour chaque i allant de 1 agrave N on calcule la somme
Som
Puisque le pas =1 on ne lrsquoeacutecrit pas
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 31
Solution avec la boucle TANT QUE Algorithme summation 2
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre )
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0
i larr1 Tant que ilt=N faire
Som larr Som + i i larr i+1 fin faire
Ecrire( La somme est Som)
Fin
Solution avec la boucle REPETER Algorithme summation 3
Variables N i Som Entier
Debut
Reacutepeacuteter
Ecrire( Entrez un nombre
)
Lire (N)
Jusqursquoagrave (ngt0)
Som larr 0 i larr1 repeter
Som larr Som + i i larr i+1 jusqursquoa (igtN) fin pour
Ecrire( La somme est
Som)
Fin
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 32
Exercices faits en cours
1 Ecrire un algorithme qui calcule le factoriel drsquoun nombre entier N
2 Ecrire un algorithme qui calcule la puissance Xn
3 Ecrire un algorithme qui calcule pour une valeur X reacuteelle la valeur numeacuterique
dun polynocircme de degreacute n
P(X) = AnXn + An-1Xn-1 + + A1X + A0
La valeur de n et X et les coefficients An A0 et de X seront entreacutees au clavier
Utilisez le scheacutema de Horner
7 Les tableaux statiques 71 Deacutefinition
Un tableau unidimensionnel ou tableau lineacuteaire est une variable indiceacutee permettant de
stocker n valeurs de mecircme type
Le nombre maximal deacuteleacutements preacuteciseacute agrave la deacuteclaration sappelle la dimension (ou capaciteacute)
du tableau
Le type du tableau est le type de ses eacuteleacutements
La position dun eacuteleacutement sappelle indice ou rang de leacuteleacutement
Puisque la dimension est preacuteciseacutee dans le code nous parlerons drsquoun tableau statique
72 Deacuteclaration drsquoun tableau statique Syntaxe Variable nomtableau Tableau [1dimension] de type
Exemple Deacuteclaration drsquoun tableau entier de 8 cases
Variable Tab Tableau [18] de entier
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 33
73 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
Pour pouvoir remplir (ou afficher) un tableau il faudra saisir (ou afficher) des valeurs
dans les cases ceci neacutecessitera lrsquoutilisation drsquoune boucle pour parcourir le tableau
731 Lecture drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo]ldquo) Lire (Tab[i])
Finfaire
Nous aurons donc apregraves exeacutecution
732 Ecriture ou affichage drsquoun tableau Syntaxe Pour i de 1 agrave dimension faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo Tab[i]) Finfaire
Nous obtenons donc apregraves deacuteroulement cet affichage agrave lrsquoeacutecran
La case 1 contient la valeur 12
La case 2 contient la valeur 0
La case 3 contient la valeur 60
La case 4 contient la valeur -2
La case 5 contient la valeur 8
La case 6 contient la valeur 10
La case 7 contient la valeur 11
La case 8 contient la valeur -15
Exercice
Soit un tableau de n cases entiegraveres eacutecrire un algorithme qui somme les valeurs positives et
neacutegatives de ce tableau
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 34
Solution Etapes
- Deacuteclarer un tableau avec une taille maximale preacutedeacutefinie par exemple 50 cases
- Entrer le nombre de cases reacuteel n de notre tableau
- Saisir les n valeurs du tableau tout en testant le signe
Algorithme sommation
Variable Tab tableau [150] de entier
insomPsomN entier
Debut
Ecrire (ldquodonnez la dimension reacuteelle du tableauldquo) Lire (n)
SomP 0
SomN0
Pour i de 1 agrave n faire
Ecrire (ldquodonnez la valeur de la case[ldquoi ldquo]ldquo) Lire (Tab[i])
Si (Tab[i]gt=0) alors SomP SomP+Tab[i]
Sinon SomN SomN+Tab[i]
Finfaire
Ecrire (ldquoLa somme des valeurs positives est ldquo SomP ldquoet laa somme des valeurs negatives positive est ldquo SomN ) Fin
8 Matrices statiques 81 Deacutefinition
Les matrices sont des tableaux agrave deux dimensions
a11 a12 a13 a14 hellip a1m
a21 a22 a23 a24 hellip a2m
helliphelliphelliphelliphellip an1 an2 an3 an4 hellip anm
82 Deacuteclaration drsquoune matrice Syntaxe On deacuteclare une matrice agrave deux dimensions de la faccedilon suivante
Variable nomVariable Tableau[Dimension 1][Dimension2 ] de type
Colonnes 1m
Lignes 1 n
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 35
Exemple Deacuteclarer une matrice entiegravere de 2 lignes e 3 colonnes
Variable Mat Tableau [12][13] de entier
Nous avons donc deacuteclareacute un matrice entieacutere de 2 lignes et 3 colonnes
83 Saisi et affichage drsquoun tableau (Lecture et eacutecriture)
On accegravede (en lecture ou en eacutecriture) agrave la i egraveme ligne et la j egraveme colonne de la matrice
ceci neacutecessitera lrsquoutilisation drsquoune boucle pour les lignes et une autre boucle pour les
colonnes
831 Lecture drsquoune matrice
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Exemple Pour i de 1 agrave 2 faire
Pour j de 1 agrave 3 faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo) Lire (M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves exeacutecution
Pour i=1 (1ere ligne) et variation de j (les colonnes)
M[1][1]=15
M [1][2]=2
M [1][3]=0
Pour i=2 (2eme ligne) et variation de j (les colonnes) M [2][1]=-2
M [2][2]=13
M [2][3]=-20
15 2 0
-2 13 -20
832 Ecriture de la matrice
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 36
Syntaxe Pour i de 1 agrave dimension1 faire
Pour j de 1 agrave dimension2 faire
Ecrire (ldquola ligneldquoi ldquoet la colonne ldquoj ldquocontient la valeurldquo M[i][j])
Finfaire
Finfaire
Nous aurons donc apregraves execution pour 2lignes et 3 colonnes
La ligne 1 et la colonne 1 contient la valeur 15
La ligne 1 et la colonne 2 contient la valeur 2
La ligne 1 et la colonne 3 contient la valeur 0
La ligne 2 et la colonne 1contient la valeur -2
La ligne 2 et la colonne 2 contient la valeur 13
La ligne 2 et la colonne 3 contient la valeur -20
Exercice Soit une matrice reacuteelle eacutecrire un programme qui permet drsquoextraire la valeur maximale de chaque ligne et stocke le reacutesultat dans un tableau
Solution Etapes -Deacuteclarer une matrice reacuteelle avec par exemple de 20 lignes et 30 colonnes -Deacuteclarer un tableau reacuteel de 20 lignes - donner le nombre de lignes et le nombre de colonnes reacuteel (n m)
- Saisir toutes les valeurs de la matrice de n lignes et m colonnes
- Pour chaque ligne i de la matrice supposer que le premier eacuteleacutement M[i][1] est ma maximal
- Parcourir les colonnes j+1 agrave m et tester les valeurs
- Avant de passer agrave la ligne suivante enregistrer dans le tableau reacutesultat la valeur maximale
- Refaire le proceacutedeacute jusqursquoagrave la fin des lignes - Afficher le tableau reacutesultat
Algorithme maximum
Type Mat =tableau [20][30] de reel
Tab=tableau [20] de reel
Variable
M Mat
T Tab
inm Entier
max reel
Debut
Ecrire (ldquodonnez le nombre de lignes et le nombre de colonnes de votre matriceldquo) Lire (nm)
Pour i de1 agrave n faire
Pour j de 1 agrave m faire
Ecrire (ldquodonnez la valeur de la case [ldquoi ldquo][ldquoj ldquo]ldquo)
Chapitre 5 Introduction agrave lrsquoalgorithmique
Dr HADJ TAYEB S 37
Lire (M[i][j])
Finfaire
Finfaire
Pour i de1 agrave n faire
Max M [i][1]
Pour j de 2 agrave m faire
Si (M [i][j]gt=Max) alors Max M [i][j]
fsi
Finpour
T[i] Max
Finpour
Pour i de1 agrave n faire
Ecrire (ldquola caseldquoi ldquocontient la valeur ldquo T[i]) Finfaire
Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 38
TD 1 Architecture de lrsquoordinateur
I Geacuteneacuteraliteacutes - Crsquoest quoi une carte megravere - Crsquoest quoi le programme BIOS et agrave quoi sert la pile situeacutee sur la carte megravere - Quelle est la signification des acronymes CPU UAL RAM ROM - Donner une bregraveve deacutefinition du CPU UAL Socket Chipset RAM ROM
II QCM Choisissez-la ou les bonnes reacuteponses
1 Il est possible de deacutemarrer un pc sans la carte megravere a Vrai b Faux
2 Lrsquoordinateur neacutecessite a La meacutemoire morte pour deacutemarrer b Lrsquoordinateur neacutecessite la meacutemoire vive pour deacutemarrer c Aucune bonne reacuteponse
3 Lrsquohorloge systegraveme permet de a Synchroniser les diffeacuterentes opeacuterations de base b Afficher la date est lrsquoheure c Faire circuler les informations
4 Le microprocesseur comprend a LrsquoUAL ou lrsquoUCC b Uniteacute arithmeacutetique et logique c Uniteacute de commande et de controcircle d LrsquoUAL et lrsquoUCC e Aucune bonne reacuteponse
5 Lrsquouniteacute de commande et de controcircle a Produit des ordres b Reacutealise des instructions de lecture c Reacutealise des instructions arithmeacutetiques et logiques
6 La ROM et la RAM repreacutesentent des meacutemoires a Secondaires b Principales c De stockage
7 Le Disque dur CDROM flash disque repreacutesentent des meacutemoires a Auxiliaires b Secondaires c De masse
8 Le compteur ordinal stocke a Lrsquoinstruction en cours exeacutecution b Lrsquoexeacutecution en cours drsquoinstruction c Lrsquoadresse de lrsquoinstruction en cours exeacutecution d Aucune bonne reacuteponse
9 Lrsquoaccumulateur stocke a Lrsquoopeacuterande et reacutesultat de lrsquoinstruction en cours exeacutecution
Travaux dirigeacutes
Dr HADJ TAYEB S 39
b Lrsquoadresse de lrsquoinstruction en cours exeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
10 Le registre drsquoinstruction stocke a Toutes les instructions du programme b Lrsquoadresse et lrsquoinstruction en cours drsquoexeacutecution c Lrsquoinstruction en cours drsquoexeacutecution
11 La RAM est le lieu a De stockage des programmes b Drsquoexeacutecution des programmes
III Meacutemoire et registres
- Crsquoest quoi le deacutebit drsquoune meacutemoire centrale - Quelles sont les opeacuterations que la meacutemoire peut effectuer et quelle est la
diffeacuterence entre elles - En se basant sur un tableau donnez 4 diffeacuterences entre la RAM la ROM et
les meacutemoires de masse - Quelle est la diffeacuterence entre la SRAM et la DRAM - Quels sont les liens physiques entre le CPU et la meacutemoire
Corrigeacute
I Geacuteneacuteraliteacute 1 Une carte megravere est une plaque meacutetallique composeacutee de circuits et de ports de
connexion permettant la liaison de tous les composants et peacuteripheacuteriques (disque dur meacutemoires vives CPU cartes drsquoextensionhellip) afin qursquoils puissent ecirctre reconnus et par le CPU gracircce au programme BIOS
2 Le programme BIOS ( Basic input output system) est petit programme situeacute sur la carte megravere dans une puce de type ROM Le bios est le premier programme chargeacute en meacutemoire deacutes que le pc est mis en tension Le bios est stockeacute dans une meacutemoire de lecture seule les modifications que lrsquouser peut apporter comme effectuer un mot de passe au niveau du bios ou reacutegler la date ouhellip sont enregistreacutes dans une meacutemoire volatile appeleacute la CMOS Puisqursquoelle est volatile donc il lui faut une alimentation quand le pc est mis en tension le problegraveme ne se pose pas mais quand le pc est eacuteteint crsquoest la pile qui prend le relai Donc de maniegravere geacuteneacuterale la pile maintient le bios en tension
3 Acronymes CPU Central Processing Unit UAL Uniteacute Arithmeacutetique et Logique RAM Random Access Memory ROM Read Only Memory
4 Bregraveves deacutefinitions de
Travaux dirigeacutes
Dr HADJ TAYEB S 40
bull CPU Le CPU (Central Processing Unit) est le cerveau de lordinateur Il permet de manipuler et de traiter les donneacutees qui lui sont fournies
bull UAL Un circuit complexe assurant les fonctions logiques (ET OU Comparaison Deacutecalage etchellip) ou arithmeacutetiques (Addition soustraction)
bull Socket est lrsquoemplacement du processeur nous trouvons deux types de sockets ZIF (Zero insertion force) et LIF (Low insertion force)
bull Chipset Le chipset (jeu de composants) est une puce eacutelectronique chargeacutee de coordonner les eacutechanges de donneacutees entre les diffeacuterents composants de lrsquoordinateur le processeur la meacutemoire vive etc En drsquoautres termes crsquoest la plateforme centrale de la carte megravere Nous trouvons le - North bridge (pont nord) est la partie la proche du cpu il controcircle les
eacuteleacutements les plus rapides du pc en geacuterant les eacutechanges avec la meacutemoire le bus pc express (les anciens bus AGP pour la carte graphique et pc pour les autres cartes drsquoextension)
- Le south bridge Il est relieacute au CPU agrave travers le north bridge il gegravere les entreacutees sorties (controcircleur Pata Sata port USBhellip)
II QCM
1 Il est possible de deacutemarrer un pc sans la carte megravere Faux 2 Lrsquoordinateur neacutecessite ab 3 Lrsquohorloge systegraveme permet de a 4 Le microprocesseur comprend bcd 5 Lrsquouniteacute de commande et de controcircle a 6 La ROM et la RAM repreacutesentent des meacutemoires b 7 Le Disque dur CDROM Flash disque repreacutesentent des meacutemoires abc 8 Le compteur ordinal stocke c 9 Lrsquoaccumulateur stocke a 10 Le registre drsquoinstruction stocke c
11 La RAM est le lieu b
III Meacutemoire et registres
1 Le deacutebit repreacutesente le nombre drsquoinformations (exprimeacute en bits) lues ou eacutecrites par seconde
2 Les opeacuterations possibles en MC sont la lecture et lrsquoeacutecriture 3 Deacutefinition de RAM et ROM RAM est une meacutemoire stockant les programmes et les donneacutees en cours drsquoexeacutecution donc elle est directement accessible par le processeur ROM est une meacutemoire dont le contenu ne peut ecirctre modifieacute en usage normal
Travaux dirigeacutes
Dr HADJ TAYEB S 41
4 Tableau comparatif entre RAM et ROM et meacutemoire de masse RAM ROM Masse
Appellation Vivante morte Masse Volatiliteacute Oui Non Non Lectureeacutecriture Oui Lecture seul Oui Contenu Programme et
donneacutees en cours drsquoexeacutecution
Programme de base
Les programmes et donneacutees (ex disque dur CDhellip)
Taille En GO En Ko Tera
5 La SRAM est baseacutee sur des transistors et la DRAM sur des condensateurs ce qui neacutecessite leur rafraichissement
6 Les 3 liens physiques sont bus de donneacutees bus drsquoadresse bus de systeacuteme
Travaux dirigeacutes
Dr HADJ TAYEB S 42
Fiche TD 2 Repreacutesentation des nombres et algegravebre de BOOLE
Exercice 1 Conversion de base en base
Convertir ces nombres dans leurs bases approprieacutees (10011001)2 = ( )10 (10011110)2 = ( )8
(126875)10 = ( )2
(BAFFE)16 = ( )2
Exercice 2 Conversions et opeacuterations en compleacutement agrave 2
1 Soit une machine agrave 8 bits remplissez le tableau Deacutecimal Binaire pur Binaire signeacute Ca1 Ca2
+71 -51 +1 -10 -560 +127
2 Effectuer en compleacutement agrave 2 les opeacuterations suivantes (+71) 10+ (-51) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+1) 10+ (+127) 10 = ( )ca2= ( )ca1= ( )2== ( )10 (+127)10 + (-10) 10 = ( )ca2= ( )ca1= ( )2== ( )10
(-51)10 + (+1) 10 = ( )ca2= ( )ca1= ( )2== ( )10
Exercice 3 La norme IEEE 754
1 Donnez la conversion des nombres (- 3550)10 et (-12375)10 en format IEEE 754 simple preacutecision puis convertir les reacutesultats sous forme octale et hexadeacutecimale
2 Quelle est la valeur deacutecimale de la repreacutesentation IEEE 754 suivante (ES 1) 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Exercice 1 Simplifications Algeacutebriques
PARTIE 2 ALGEBRE DE BOOLE
PARTIE 1 Repreacutesentation des nombres
Travaux dirigeacutes
Dr HADJ TAYEB S 43
Exercice 3 Karnauguh (ES 1)
1 Donner lrsquoexpression eacutequivalente agrave ce circuit
2 Donner lrsquoexpression simplifieacutee en utilisant le tableau de Karnaugh
1 Deacutemonter algeacutebriquement que
2 Consideacuterer la fonction deacutefinie par la table de veacuteriteacute - Geacuteneacuterer une expression logique correspondante sous
forme de premiegravere forme canonique et deuxiegraveme forme canonique - Simplifier les deux fonctions trouveacutees algeacutebriquement
Exercice 4 Problegraveme de controcircle qualiteacute
Un controcircle de qualiteacute est effectueacute sur des briques dans une usine chaque brique possegravede quatre critegraveres de qualiteacutes son poids P son eacutepaisseur e sa longueur L sa largeur l Ces quatre grandeurs sont mesureacutees sur chaque brique Elles sont classeacutees en trois cateacutegories - Qualiteacute A Le poids et deux dimensions au moins sont corrects - Qualiteacute B Le poids est incorrect et les autres dimensions correctes ou le poids correct et au moins deux dimensions incorrectes - Qualiteacute C Le poids P est incorrect ainsi quune ou plusieurs dimensions
- Extraire la table de veacuteriteacute - Simplifier les fonctions A B C avec KARNAUGH - Tracer le logigramme des fonctions simplifieacutees avec
Les portes ET OU et les inverseurs Les portes NON ET et les inverseurs
Exercices suppleacutementaires
Exercice 1 Soient les deux nombres suivants codeacutes selon la norme IEEE 754 simple preacutecision et repreacutesenteacutes en hexadeacutecimal (3EE00000)16 et (3D800000) 16 Calculez la somme de ces deux nombres et donnez le reacutesultat sous forme IEEE 754 simple preacutecision et sous forme deacutecimale
Travaux dirigeacutes
Dr HADJ TAYEB S 44
Exercice 2 (ES1 2016- 2017)
Les conditions drsquoinscription au concours ndeg 2 sont les suivantes - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe masculin et marieacute ou bien - Nrsquoavoir pas eacuteteacute inscrit au concours ndeg 1 ecirctre du sexe feacuteminin et marieacutee ou
bien - Avoir eacuteteacute inscrit au concours ndeg 1 ecirctre marieacute et acircgeacute de moins de 25 ans ou
bien - Ecirctre marieacute et avoir plus de 25 ans ou bien - Ecirctre du sexe masculin et acircgeacute de moins de 25 ans
1 Exprimez sous forme dune expression logique F les conditions drsquoinscription
au concours ndeg2 2 Donnez la table de veacuteriteacute correspondante 3 Simplifiez lrsquoexpression logique par le tableau de karnaugh
Travaux dirigeacutes
Dr HADJ TAYEB S 45
TD 3
Algorithmique
PARTIE 1 Les structures seacutequentielles
Exercice 1
Exercice 2
- Ecrire un algorithme qui calcule et affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle
- Ecrire un algorithme qui affiche la surface (S) et le peacuterimegravetre (P) drsquoun rectangle - Quel est lrsquoalgorithme le plus optimal et pourquoi
Deacuterouler les deux algorithmes
Algorithme affecter1 Variables ABC entier Deacutebut A larr6 B larr12 C larrB+2 AlarrA-2 BlarrC2 Fin
Algorithme affecter 2 Variables ABC entier Deacutebut A larr7 B larrA+1 C larrB2 ClarrC-2 AlarrB Fin
Citer et corriger les erreurs commises dans les 2 algorithmes suivants Algorithme erreur1 Constante R=3
Variables X entier Deacutebut Lire (R) X larr1 Y larrR-X Ecrire ( Y= Y ) Fin
Algorithme erreur2 Variables X chaine de caractegravere Y entier Deacutebut X larr Annee Y larr 2018 Ecrire ( La concatenation obtenue est concat (XY) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 46
Exercice 3 Soit lrsquoalgorithme de permutation
PARTIE 2 Les structures conditionnelles Exercice 1 Donnez lrsquoalgorithme qui permet de calculer U tel que = A + Si A geA Sinon
Exercice 2 Deacuteroulez lrsquoalgorithme suivant eacutetape par eacutetape
1 Quelles sont les valeurs finales de A B 2 Inversez lrsquoordre des instructions 3 et 4 et redeacuteroulez Que concluez- vous 3 Que doit- on ajouter pour effectuer la permutation 4 Proposer un algorithme en ce sens
Algorithme Affecter variable XYZ entier debut X larr 1 Y larr 3 Z larr 0 Si (X gt Y) Alors X larr 5 Sinon Si (X gt 0) Alors X larr - 1 Sinon X larr 4 finSi finSi Si (X gt Z) Alors X larr 2 Sinon X larr 3 finSi Ecrire (lsquoX=rsquoX rsquoY=rsquo Y rsquoZ=rsquoZ) Fin
Algorithme permuter Variable A B entier Deacutebut
Ecrire( donnez deux valeurs entiegraveres ) Lire (A B) A larr B B larr A Ecrire ( Les deux valeurs apregraves permutation sont A B) Fin
Travaux dirigeacutes
Dr HADJ TAYEB S 47
Exercice 3 Ecrire un algorithme qui affiche les jours drsquoun mois donneacute de lrsquoanneacutee 2018 (ES1 2017) PARTIE 3 Les structures iteacuteratives
Exercice 1 Ecrire un algorithme qui permet de calculer la somme (utiliser les 3 boucles)
S= -1+ minus + minus + minus + minus hellip Exercice 2 Ecrire un algorithme qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 3 Calculez par des soustractions successives le quotient entier et le reste de la division entiegravere de deux entiers entreacutes au clavier
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui affiche le carreacute de 5 nombres paires saisis au clavier (Veacuterifier drsquoabord si le nombre est paire) Exercice 2 Eacutecrire un algorithme permettant drsquoeacutecrire un eacutechiquier de 8 fois 8 On repreacutesentera les case noires par des rsquoxrsquo et les cases blanches par des espaces
Exercice 3 Ecrire un algorithme permettant de calculer pour une valeur X reacuteelle la valeur numeacuterique dun polynocircme de degreacute n P(X) = AnXn + An-1Xn-1 + + A1X + A0 Les valeurs de n des coefficients An A0 et de X seront entreacutees au clavier Utilisez le scheacutema de Horner
Travaux dirigeacutes
Dr HADJ TAYEB S 48
PARTIE 4 Tableaux et matrices
Exercice 1 Ecrire un algorithme qui - Lit la dimension N drsquoun tableau reacuteel - Saisi les valeurs du tableau - Affiche le tableau ainsi que la somme de tous ses eacuteleacutements
Exercice 2 Ecrire un algorithme permettant drsquoordonner un tableau drsquoentiers de maniegravere croissante Exercice 3 Ecrire un algorithme qui
- Demande la dimension N drsquoun tableau drsquoentiers - Rempli un tableau de N entiers - Saisi une position drsquoun tableau - Supprime la valeur relative agrave cette position (ceci implique le deacutecalage des
valeurs) - Affiche le tableau apregraves suppression
Exercice 4 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la premiegravere diagonale drsquoune matrice entiegravere
Exercice 5 Soit une matrice entiegravere de N lignes M colonnes Ecrire un algorithme qui permet drsquoextraire le minimum de chaque ligne de la matrice et enregistre les reacutesultats dans un tableau de N lignes
Exercices suppleacutementaires
Exercice 1 Ecrire un algorithme qui - Demande la dimension N drsquoun tableau drsquoentier tab avec le test - Rempli un tableau de N entiers - Met dans un tableau tab_P les valeurs positives du tab - Met dans un tableau tab_N les valeurs neacutegatives ou nulles du tab - Affiche les 2 tableaux reacutesultats tab_P et tab_N
Exercice 2 Ecrire un algorithme qui calcule la somme des eacuteleacutements de la deuxiegraveme diagonale drsquoune matrice entiegravere
Exercice 3 Soit un tableau reacuteel de N lignes Ecrire un algorithme qui extrait la valeur minimale et maximale avec leurs positions respectives
Exercice 4 Ecrire un algorithme qui fait la multiplication entre deux matrices entiegraveres M1 et M2
Travaux dirigeacutes
Dr HADJ TAYEB S 49
Corrigeacute Partie 2- Exercice 2
Algorithme calcul
Variable
A entier
U reacuteel
Debut
Ecrire (lsquoDonner un nombrersquo) Lire (A)
Si (Agt=0) alors U(AAA)2 +1
Sinon UAA
Finsi
Ecrire (U)
Fin
Partie 3 Exercice 2
Algorithme moyenne
Variable SX reels
Deacutebut
S0
Ecrire (lsquoDonner un nombrersquo) Lire (X)
Tant que (Xge0) faire SS+X
Lire (X)
Finfaire
Ecrire (S)
FIN
Partie 4 Exercice 4 Algorithme diagonale
Variable
Mat=tableau [120][120] entier
Sijn entier
Debut
Ecrire (lsquoDonner le nombre de ligne de votre matricersquo) Lire (n)
Pour i =1 agrave n faire
Pour j =1 agrave n faire
Ecrire (lsquoDonner une valeur de la lignersquoirsquocolonne lsquoj) Lire (Mat[i][j])
Fpour
Fpour
S0
Pour i =1 agrave n faire
SS+Mat[i][i]
Travaux dirigeacutes
Dr HADJ TAYEB S 50
Fpour
Ecrire (lsquola somme de la 1ere diagonale estrsquoS) Fin
INFORMATIQUE
2
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 51
De lrsquoalgorithmique agrave la programmation
1Introduction
Les langages de programmation permettent aux utilisateurs de creacuteer des instructions
permettant agrave un ordinateur deffectuer des tacircches
Il existe trois cateacutegories de langages de programmation les langages de programmation de haut
niveau le langage dassemblage et le langage de machine
- Les langages de programmation de haut niveau sont plus faciles agrave comprendre pour les
humains
- Le langage dassemblage est une langue intermeacutediaire entre la langue de haut niveau
et la langue de la machine
La diffeacuterence cleacute entre le langage machine et le langage dassemblage est que le langage
machine sexeacutecute directement par un ordinateur et le langage assembleur neacutecessite la
conversion dun assembleur en code machine ou en code objet agrave exeacutecuter par la CPU
Probleacuteme
Reacutesolution algorithmique
Code source (Langage evolueacute)
Compilateur
Code objet(langage drsquoassemblage)
Assembleur
Code machine
Le langage C fait partie de la famille des langages de programmation fonctionnelle de
haut Niveau Il a eacuteteacute conccedilu pour leacutecriture de systegravemes en particulier le systegraveme unix Pour
cette raison ses concepteurs ont fait une seacuteparation entre ce qui est purement algorithmique
(deacuteclarations instructions etc) et tout ce qui est interaction avec le systegraveme (entreacutees sorties
allocation de meacutemoire etc) qui est reacutealiseacute par appel de fonctions se trouvant dans une
bibliothegraveque dite bibliothegraveque standard
Translation
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 52
2 Struture geacuteneacuterale drsquoun programme C
Partie entecircte
(les bibliotheacuteques)
Fontion principale
Debut du programme
Fin du programme
3 Les bibliothegraveques de fonctions preacutedeacutefinies
La pratique en C exige lutilisation de bibliothegraveques de fonctions Ces bibliothegraveques sont
disponibles dans leur forme preacutecompileacutee (extension lib) Pour pouvoir les utiliser il faut
inclure des fichiers en-tecircte (header files - extension h) dans nos programmes Ces fichiers
contiennent des prototypes des fonctions deacutefinies dans les bibliothegraveques et creacuteent un lien entre
les fonctions preacutecompileacutees et nos programmes
include
Linstruction include insegravere les fichiers en-tecircte indiqueacutes comme arguments dans le texte du
programme au moment de la compilation
Par exemple la bibliotheacuteque include ltstdiohgt permet lrsquoutilisation des fonctions drsquoentreacutee sorties
4 Etapes de geacuteneacuteration de fichier exeacutecutable
Lobjectif dun programmeur est bien sur darriver agrave geacuteneacuterer (puis exeacutecuter) un fichier
exeacutecutable
Ceci passe par plusieurs eacutetapes
- La premiegravere eacutetape consiste agrave eacutecrire le programme dans un fichier texte agrave lrsquoaide drsquoun eacutediteur de texte on parle de fichier source (ayant lrsquoextension c) Ce programme est
compreacutehensible par la machine
- La deuxiegraveme eacutetape est leacutetape de preacute-compilation Elle consiste agrave traiter les directives de
compilation (comme linclusion de fichiers dentecircte de bibliothegraveques) Elle geacutenegravere un
fichier texte qui est encore un fichier source en C
- La troisiegraveme eacutetape est la compilation Elle consiste agrave transformer les instructions du
programme source en langage compreacutehensible par le processeur (langage machine) Elle
geacutenegravere un fichier binaire dit fichier objet (extension obj)
- La quatriegraveme eacutetape consiste agrave effectuer leacutedition de liens Le code geacuteneacutereacute agrave la
compilation est compleacuteteacute par le code des fonctions des bibliothegraveques utiliseacutees Cest
seulement apregraves cette eacutetape que lon geacutenegravere un fichier exeacutecutable (extension exe)
include ltstdioh gt include hellip
main ()
hellip hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 53
5 Types et variables
51Les principaux types
int nombre entier
short entier court
long entier long
char caractegravere
float nombre reacuteel simple preacutecision
double nombre reacuteel double preacutecision
Ces types peuvent ecirctre qualifieacutes par les qualificateurs suivants
signed nombre signeacute
unsigned nombre non signeacute
Exemple unsigned short a
52 Les variables
Les variables contiennent les valeurs qui sont utiliseacutees pendant lexeacutecution du programme
Les noms des variables sont des identificateurs quelconques
Syntaxe geacuteneacuterale de deacuteclaration type nomVar
Exemple 1 int x y z
float a b
unsigned short cpt = 1000
53 Les commentaires
Un commentaire commence toujours par les deux symboles et se termine par les
symboles Il est interdit dutiliser des commentaires imbriqueacutes
Ou bien
Ceci est un commentaire correct
ceci est un commentaire
ceci est un commentaire
Exemple 2 int x y z deacuteclaration de 3 variables entiegraveres
float a b deacuteclaration de 2 variables reacuteelles
unsigned short cpt = 1000 deacuteclaration drsquoun entier court non signeacute
6 Expressions et opeacuterateurs
Opeacuterateurs arithmeacutetiques de base + -
(reste de division)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 54
++ incrementation
-- decreacutementation
Opeacuterateurs relationnels Les opeacuterateurs renvoient une valeur entiegravere de type int eacutegale _a 0
(faux) ou a 1 (vrai) suivant le reacutesultat de lopeacuteration
La comparaison gt lt gt= lt=
test eacutegaliteacute ==
test de diffeacuterence =
Opeacuterateurs logiques ET logique ampamp
Ou logique ||
7 Caractegraveres et chaines de caractegraveres
Une constante de type caractegravere se note en eacutecrivant le caractegravere entre apostrophes Une
constante de type chaine de caractegraveres se note en eacutecrivant ses caractegraveres entre guillemets
Par exemple Caracteacutere A 2 et chaine de caracteacutere Bonjour a tous
n nouvelle ligne (LF)
t tabulation (HT)
b espace-arriegravere (BS)
r retour-chariot (CR)
f saut de page (FF)
a signal sonore (BELL)
Une constante de type caractegravere appartient au type char
Le codage interne drsquoune chaine de caractegraveres est celui drsquoun tableau de caractegraveres (crsquoest-`a-dire
char[] )
8 Lire et eacutecrire des donneacutees
La bibliothegraveque standard ltstdiogt contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde exteacuterieur
81La fonction printf()
La fonction printf est utiliseacutee pour transfeacuterer du texte des valeurs de variables ou des reacutesultats
dexpressions vers le fichier de sortie standard stdout (par deacutefaut leacutecran)
Tableau resumant les formats drsquoaffichage
SYMBOLE TYPE IMPRESSION COMME
d ou i int entier relatif
u int entier naturel (unsigned)
o int entier exprimeacute en octal
x int entier exprimeacute en hexadeacutecimal
c int caractegravere
f double rationnel en notation deacutecimale
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 55
e double rationnel en notation scientifique
s char chaicircne de caractegraveres
Exemple 3 La suite dinstructions int A = 1234
int B = 567
printf(i fois i est lin A B (long)AB)
Affichage eacutecran 1234 fois 567 est 699678
82La Fonction scanf()
La fonction scanf est la fonction symeacutetrique agrave printf elle nous offre pratiquement les
mecircmes conversions que printf mais en sens inverse
scanf(ltformatgtltAdrVar1gtltAdrVar2gt )
Exemple 4 int JOUR MOIS ANNEE scanf(ddd ampJOUR ampMOIS ampANNEE)
9 Les structures alternatives et iteratives
Syntaxe de la structure alternative
if (condition)
inst1
inst2
hellip
else
inst3
inst4
hellip
Syntaxe de la boucle pour
for (compteur=valeurInitial condition pas)
instr1
instr2
instr3
hellip
Syntaxe de la boucle tant que
while (condition vrai)
instr1
instr2
instr3
hellip
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 56
Syntaxe de la boucle Reacutepeacuteter jusqursquoagrave
do
instr1
instr2
instr3
hellip while (condition vrai)
Exercice
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Solution avec boucle for
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme for (i=3 ilt=2n+1 i=i+2) p = px2
f = f(i)(i-1) s = s (-1) som=som+spf
printf (La somme est 4lfn som)
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 57
Translation de la boucle for en while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 while (ilt=2n+1)
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2
printf (La somme est 4lfn som)
Translation de la boucle for en boucle do-while
include ltstdiohgt
main()
int n
int idt
double xsomfpx2
int s
do Boucle de test de lrsquoentier n
Chapitre 1 De lrsquoalgorithmique agrave la programmation
Dr HADJ TAYEB S 58
printf(Entrer un entier naturel )
scanf(d ampn)
while (nlt0)
printf(Entrer un reacuteel )
scanf(lf ampx)
Initialisation som=x
f=1
p=x
s=1
x2=xx
Boucle de calcul de la somme i=3 do
p = px2 f = f(i)(i-1) s = s (-1)
som=som+spf i=i+2 while (ilt=2n+1)
printf (La somme est 4lfn som)
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 59
Les Fonctions en C
Introduction
En C un programme peut ecirctre diviseacute en plusieurs fonctions Une seule de ces fonctions est
obligatoire la fonction principale main Cette fonction principale peut appeler une ou plusieurs
fonctions secondaires Chaque fonction secondaire peut appeler dautres fonctions secondaires
ou sappeler elle-mecircme on parlera donc de fonction reacutecursive (cours suivant)
1 Deacuteclaration dune fonction
La deacutefinition dune fonction secondaire doit donc ecirctre placeacutee soit avant soit apregraves la
fonction principale main
Le corps de la fonction contient des deacuteclarations de variables locales agrave cette fonction
Il se termine par linstruction return
Syntaxe Type NomFonction (listes des paramegravetres formels)
Inst1
Inst2
hellip return(expression)
NB
- La fonction de type void ne renvoie rien
- La valeur de lrsquoexpression est la valeur que renvoie la fonction
Exemple 1 Deacuteclaration drsquoune fonction qui retourne la plus grande valeur entre 2 valeurs
float plusGrand(float x float y)
if (x gt y)
return x
else
return y
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 60
Exemple 2
- Ecrire une fonction qui retourne le factoriel drsquoun nombre n - En vous basant sur la fonction factoriel eacutecrire un programme en C qui calcule
= minus
include ltstdiohgt
Deacuteclaration de la fonction
long factoriel(int n)
int ifact
for (i=1fact=1 ilt=n i++)
fact=facti
return fact
Programme principal
main()
int NP
long Res
printf(N = )
scanf(dampN)
printf(P= )
scanf(dampP)
Res=factoriel(N)(factoriel(P)factoriel(N-P))
printf(C (d d)= ld nNPRes)
Exemple 3
- Ecrire une fonction qui extrait le minimum de deux nombres de type double
- Ecrire une fonction qui extrait le maximum de deux nombres de type double
- Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale include ltstdiohgt
Deacuteclaration de la fonction min
double min (double adouble b)
if (altb) return a
else return b
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 61
Deacuteclaration de la fonction max
double max (double adouble b)
if (altb) return b
else return a
Programme principal
main()
double xyzt res1res2
printf (Saisissez 4 nombres)
scanf(lf lflflfampxampyampzampt)
res1=min(min(xy)min(zt))
res2=max(max(xy)max(zt))
printf(Minimum(2lf2lf2lf2lf)=2lfnxyztres1)
printf(Maximum (2lf2lf2lf2lf)=2lfnxyztres2)
2 Variables globales
On appelle variable globale une variable deacuteclareacutee en dehors de toute fonction Les
variables globales sont permanentes (connues dans tous le programme)
Exemple 4 Deacuterouler ce code
include ltstdiohgt
int n=0 n est globale
void incrementer ()
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 2
appel numero 3
appel numero 4
appel numero 5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 62
3 Variables locales
On appelle variable locale une variable deacuteclareacutee agrave linteacuterieur dune fonction Les variables
locales sont temporaires Quand une fonction est appeleacutee elle place ses variables locales dans
la pile A la sortie de la fonction les variables locales sont deacutepileacutees et donc perdues
Exemple 5 Deacuterouler le programme
include ltstdiohgt
int n = 10 variable globale
La fonction incrementer
void incrementer()
int n = 0 variable locale
n++
printf(appel numero dnn)
return
main()
int i
for (i = 0 i lt 5 i++)
incrementer ()
Exeacutecution du programme
appel numero 1
appel numero 1
appel numero 1
appel numero 1
appel numero 1
4 Passage des paramegravetres dune fonction
Pendant lappel de la fonction les paramegravetres effectifs sont copieacutes dans une pile La
fonction travaille alors uniquement sur cette copie
Si la fonction modifie la valeur dun de ses paramegravetres seule la copie sera modifieacutee la variable
du programme principale le programme qui appelle ne sera pas modifieacutee On dit que les
paramegravetres dune fonction sont transmis par valeurs
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 63
Exemple 6 Deacuterouler ce programme
include ltstdiohgt
void echange (int a int b)
int t
t = a
a = b Etape 3 Permutation des copies a et b
b = t
return
main()
int xy
printf(donnez deux entiers)
scanf (dd ampxampy) Etape 1 la saisi des deux valeurs
echange(xy) Etape 2 Appel de la fonctionpassage par valeur
printf(fin programme principal n x = d t y = dnxy) Etape 4 Affichage des valeurs de x et y apregraves permutation
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 64
Deacuteroulement du programme
Problegraveme
Passage par valeur la fonction travaille uniquement sur la copie
La copie est supprimeacutee degraves la fin de la fonction
Pour quune fonction modifie la valeur dun de ses arguments il faut quelle ait pour
paramegravetre ladresse de cet objet et non sa valeur
Par exemple pour eacutechanger les valeurs de deux variables il faut utiliser
Solution 1 Deacuteclaration globale comme une premiegravere solution donc nous aurons le programme
modifieacute
include ltstdiohgt
int ab declaration globale
fonction drsquoechange void echange()
2
2
5
5
2
5
2
5
5
2
2
5
5
2
110
111
x
y
x
a
y
b
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange (xy)
impliquera automatiquement la copie
des valeurs et eacutechange des valeurs a
et b
x
y
Etape 3
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100 100
110
101
100
110
100
101
111 111
x
a
y
b
Etape 4
Affichage des nouvelles valeurs de x et y
a et b seront supprimeacutees deacutes qursquoon sort de la fonction
100
101
x
a
y
b
A la fin du programme a=2 et b=5
Chapitre 2 Les fonctions en C
Dr HADJ TAYEB S 65
int t
t = a
a = b
b = t
return
Fonction principale
main()
printf(donnez deux entiers)
scanf (dd ampaampb)
echange( )
printf(fin programme principal n a = d t b = dnab)
Solution 2 Meilleure solution utiliser le passage par reacutefeacuterence (par adresse)
COURS PROCHAIN
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 66
Pointeurs amp allocation dynamique de la meacutemoire
PARTIE I LES POINTEURS
1 Notions de base 11 Rappel
Rappelons qursquoune variable contient une valeur
Exemple 1 int x Reacuteserve un emplacement pour un entier en meacutemoire
x=10 Ecrit la valeur 10 dans lrsquoemplamcement reacuteserveacute
- Pour afficher la valeur 10 on ecrit printf(x = d nx)
- Pour afficher lrsquoemplacement (adresse=62) de x on ecrit printf(adresse de x = d nampx)
12 Notion de pointeur
Un pointeur est un objet dont la valeur ou le contenu est eacutegale agrave ladresse dun autre
variable objet
On deacuteclare un pointeur par linstruction
type nom-du-pointeur ougrave type est le type de lobjet pointeacute
Reprenant lrsquoexemple 1 et deacuteclarons un pointeur px qui contient lrsquoadresse de la variable x
int px Reacuteservation drsquoun emplamcement pour stocker une adresse meacutemoire px=ampx Ecrire lrsquoadresse de x dans le pointeur px
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 67
Nous deacuteduisons
bull 2 faccedilons pour afficher la valeur de la variable x= 10
En utilisant la variable printf(la valeur de x = d nx)
En utilisant le pointeur printf(la valeur de x = d npx)
bull 2 faccedilons pour afficher lrsquoadresse de x = 62
En utilisant la variable printf(lrsquoadresse de la variable x = p nampx) En utilisant le pointeur printf(lrsquoadresse de la variable x p npx)
Explications
- Lopeacuterateur unaire dindirection permet dacceacuteder directement agrave la valeur de lobjet
pointeacute Ainsi si p est un pointeur vers un entier i alors p deacutesigne la valeur de i
- Lopeacuterateur amp permet dacceacuteder agrave ladresse dune variable
- Le symbole p est uutiliseacute pour afficher lrsquoadresse
Exemple 2 include ltstdiohgt main() int a int xy a = 10 x = ampa printf(dn x) x = 2a printf(a vaut dn a) y = x y = 30 printf(a = dn a)
Que contient la variable a
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 68
2 Parameacutetres de fonction avec les pointeurs
Les pointeurs permettent aux fonctions de modifier les donneacutees elles mecircmes et non
leurs copies (probleacuteme du passage par valeur)=gt Nous parlerons du passage par reacutefeacuterence
Reprenons le mecircme exemple vu dans le cours preacuteceacutedent (Exemple 6 Echanger deux valeurs)
et proposons une solution en se basant sur les pointeurs
Nous aurons include ltstdiohgt
void echange (int pa int pb) int t t = pa pa = pb pb = t return main() int ab printf(donnez deux valeurs)
scanf(d d ampa ampb) Etape 1reacuteservation de deux cases meacutemoires
et saisi de valeurs
echange(ampaampb) Etape2 Appel de la fonction echange par reacutefeacuterence
printf(Apregraves echange a = d t b = dnab)
Deacuteroulement du programme
Nous aurons donc agrave la fin de notre programme a= 5 et b =2
2
5
2
100
5
112
2 5
100
5 2
112
Etape 1 La saisi des valeurs x et y
donc reacuteservation de deux
emplacements meacutemoires
Etape 2
Appel de la fonction echange
(ampaampb)
Etape 3
Echange
pa=a
pb=b
100 100
112
110
112
100
110
112
154
a
b
a
pa=ampa
a
b b
pb=ampb
pa=ampa pa=a
pb=ampb pb=b
154
Etape 3 Etapes drsquoechange
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 69
Exercice 1
Ecrire une fonction qui determine le min et le max de 2 entiers
include ltstdiohgt void minmax(int i int j int min int max) if(iltj) min=i max=j else min=j max=i main() int a b w x printf(Tapez la valeur de a ) scanf(d ampa) printf(Tapez la valeur de b ) scanf(d ampb) minmax(a b ampw ampx) printf(Le plus petit vaut dn w) printf(Le plus grand vaut dn x)
3 Pointeurs et tableaux
Le nom drsquoun tableau contient lrsquoadresse du premier eacuteleacutement du tableau donc le nom du
tableau se nrsquoest rien drsquoautre qursquoun pointeur
Exemple 3 int A[] = 12 23 34 45 56 67 78 89 90 printf(premieacutere valeur = dn A[1]) printf(premiegravere valeur = dn A) printf(lrsquoadresse du 1er element = pn ampA[1]) printf(premieacutere valeur = pn A)
Exemple 4
Soit P un pointeur qui pointe sur un tableau A int A[] = 12 23 34 45 56 67 78 89 90
int P
P = A Initialisation du pointeur P avec le nom du tableau
Quelles valeurs ou adresses fournissent ces expressions P+2 =gt la valeur 14 (P+2) =gt la valeur 34
ampP+1 =gt ampP[1] ampA[4]-3 =gt amp A[1] A+3 =gt amp A[3] P+(P-10) =gt amp A[2] (P+(P+8)-A[7]) =gt la valeur 23
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 70
Exercice 2
1 Ecrire une fonction lectureTab pour la saisi des valeurs drsquoun tableau reacuteel 2 Ecrire une fonction affichageTab pour afficher le tableau
3 Ecrire une fonction plusgrand pour determiner la valeur maximale du tableau avec son
indice
4 Ecrire une fonction somme pour determiner la somme des valeurs inferieures agrave une valeure
donneacutee
5 Testez vos fonctions dans le main
include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) -------------------------------------------------------------- void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) --------------------------------------------------------------- void plusgrand(int TABint Nint maxint posmax) int i max=TABposmax=0 for (i=1 iltN i++) if ((TAB+i)gtmax) max=(TAB+i)posmax=i ---------------------------------------------------------------- int somme (int TAB int N int val) int isom=0 for (i=0iltNi++) if ((TAB+i)ltval) som=som+(TAB+i)
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 71
return som ---------------------------------------------------------------- main() int T[TAILLE] Tableau dentiers int DIM valeur Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) int maxposmax ECRIRE_TAB (T DIM) plusgrand(T DIMampmaxampposmax) printf(maximum=d sa position est d maxposmax ) printf (saisi une valeur ) scanf (dampvaleur) printf (la somme des valeurs inf agrave d= dvaleur somme(TDIMvaleur))
PARTIE II ALLOCATION DYNAMIQUE DE LA MEMOIRE
Un des principaux inteacuterecircts de lallocation dynamique est de permettre agrave un programme
de reacuteserver la place neacutecessaire au stockage dun tableau en meacutemoire dont il ne connaissait pas
la taille avant la compilation En effet jusquici la taille de nos tableaux eacutetait fixeacutee dans le code
source
Avec lrsquoallocation on peut creacuteer des tableaux de faccedilon plus flexible
Quand on deacuteclare une variable on dit quon demande agrave allouer de la meacutemoire
1 Taille meacutemoire des variables
Chaque type de variable occupe un espace meacutemoire Par exemple un int occupe
geacuteneacuteralement 4 octets en meacutemoire et un double 8 octets
Pour connaitre la taille qursquoauccupe chaque type nous nous basons sur lrsquoopeacuterateur sizeof()
Exemple 5
Ecrire un programme C qui affiche la taille meacutemoire qursquooccupe un caracteacutere un entier un entier long et un double
include ltstdiohgt main() printf(char d octetsn sizeof(char)) printf(int d octetsn sizeof(int)) printf(long d octetsn sizeof(long)) printf(double d octetsn sizeof(double))
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 72
Apreacutes exeacutecution
Char 1 octet
Int 4 octets
Long 4 octets
double 8 octets
2 Allocation de meacutemoire dynamique
La bibliothegraveque ltstdlibhgt permet lrsquoallocation meacutemoire dynamque
Cette bibliotheacuteque contient deux fonctions
- malloc laquo Memory ALLOCation raquo permet la demande systegraveme dexploitation la permission
dutiliser de la meacutemoire
void malloc(size_t nombreOctetsNecessaires)
- free permet de libeacuterer la place en meacutemoire void free(void pointeur)
Lrsquoallocation passe donc par
a Appel de malloc pour demander de la meacutemoire
b Veacuterification de la valeur retourneacutee par malloc
c Libeacuteration de lrsquoespace avec free une fois termineacute
Exemple 6
Allouer dynamiquement un espace int tester lallocation et liberer lrsquoespace include ltstdiohgt include ltstdlibhgt main() int MemAllouee = NULL On creacutee un pointeur sur un entier
MemAllouee = malloc(sizeof(int)) La fonction malloc inscrit dans notre pointeur
ladresse qui a eacuteteacute reserveacutee if (MemAllouee == NULL) Si lallocation a eacutechoueacute
exit(0) On arrecircte immeacutediatement le programme
On peut continuer le programme normalement sinon
free(MemAllouee) On na plus besoin de la meacutemoire on la libegravere
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 73
3 Allocation dynamique dun tableau
Pour le moment nous avons utiliseacute lallocation dynamique uniquement pour creacuteer une
petite variable on a besoin de lallocation dynamique pour creacuteer un tableau dont on ne connaicirct
pas la taille avant lexeacutecution du programme
Exemple 7
Ecrire un programme qui stocke lacircge de tous les amis de lutilisateur dans un tableau en
demandant le nombre drsquoamis agrave lrsquoutilisateur Lors de la saisi du code source on ne connait pas la taille de notre tableau Celle-ci sera
connue qursquoagrave lrsquoexecution lorsqursquoon demande le nombre drsquoamis de lrsquoutilisateur Donc nous allons creacutee un tableau dont ses cases sont eacutegales au nombredrsquoamis drsquoougrave lrsquointrecirct de lrsquoallocation dynamique
Etapes
1 Demander agrave lutilisateur combien il a damis
2 Creacuteer un tableau de int ayant une taille eacutegale agrave son nombre damis
3 Demander lacircge de chacun de ses amis un agrave un quon stocke dans le tableau
4 Afficher lacircge des amis pour montrer quon a bien meacutemoriseacute tout cela
5 Puisquon na plus besoin du tableau contenant lacircge des amis le libeacuterer avec la fonction
free
Programme en C
include ltstdiohgt include ltstdlibhgt main () int nombreAmis = 0 i = 0 int ageAmis = NULL Ce pointeur va servir de tableau apregraves lappel du malloc On demande le nombre damis agrave lutilisateur printf(Combien damis avez-vous ) scanf(d ampnombreAmis) if (nombreAmis gt 0) au moins un ami ageAmis = malloc(nombreAmis sizeof(int)) On alloue de la meacutemoire pour le tableau if (ageAmis == NULL) On veacuterifie si lallocation a marcheacute ou non exit(0) On arrecircte tout On demande lacircge des amis un agrave un boucle for for (i = 0 i lt nombreAmis i++) printf(Quel age a lami numero d i + 1) scanf(d ampageAmis[i])
Chapitre 3 Pointeurs amp allocation dynamique de la meacutemoire
Dr HADJ TAYEB S 74
Affichage des acircges stockeacutes un agrave un printf(nnVos amis ont les ages suivants n) for (i = 0 i lt nombreAmis i++) printf(d ansn ageAmis[i]) free(ageAmis) On libegravere la meacutemoire alloueacutee
Exeacutecution du programme
Combien damis avez-vous 3
Quel age a lami numero 1 21
Quel age a lami numero 2 18
Quel age a lami numero 3 20
Vos amis ont les ages suivants
21 ans
18 ans
20 ans
La reacutecursiviteacute
Dr HADJ TAYEB S 75
La reacutecursiviteacute
1 Deacutefinition Une fonction reacutecursive est une fonction qui srsquoappelle elle - mecircme
Lrsquointeacuterecirct drsquoutiliser les fonctions reacutecursives est lrsquoimmense gain de temps
2 Reacutesolution reacutecursive drsquoun problegraveme
Pour creacuteer une fonction reacutecursive il faut
1 Deacutecomposer un problegraveme en un ou plusieurs sous-problegravemes du mecircme type
2 Les sous-problegravemes doivent ecirctre de taille plus petite que le problegraveme initial
3 La deacutecomposition doit conduire agrave un cas eacuteleacutementaire qui lui nrsquoest pas deacutecomposeacute en sous-problegraveme
4 On reacutesout les sous-problegravemes par des appels reacutecursifs
5 Lrsquoarrecirct de lrsquoalgorithme est obtenu quand il n y aura plus drsquoappels
3 Structure drsquoune fonction reacutecursive Type FonctionReacutecursive( type1 p1type2 p2 typek pk)
if (condition) condition drsquoarret return calcul cas eacuteleacutementaire
else
Fonction Reacutecursive() appel recursif
return reacutesultat
Exemple 1 Calcul du factoriel dun nombre
Le factoriel est une fonction matheacutematique qui pour une valeur entiegravere positive
retourne le produit de tous les entiers entre 1 et cette valeur Pour une valeur nulle la
fonction retourne 1
Par exemple 5= 5 4 3 2 1 = 120
On peut eacutecrire la fonction factorielle sous la forme dune simple boucle (impleacutementation
iteacuterative) ou de maniegravere reacutecursive
La reacutecursiviteacute
Dr HADJ TAYEB S 76
Impleacutementation reacutecursive
Sous-problegraveme n=n (n minus 1)
(n minus1)= (n minus1) (n minus 2)
(n minus2)= (n minus2) (n minus 3)
1=10
0 =1
Donc pour n=1 ou n=0 le reacutesultat =1 (cas eacuteleacutementaire)
Sinon on refait le calcul
include ltstdiohgt
unsigned long int n
unsigned long int factoriel(unsigned long int n)
if(n lt= 1)
return 1 cas eacuteleacutementaire
else
return n factoriel(n-1) appel reacutecursif
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
Appel reacutecursif et affichage du reacutesultat final
printf(ld = ldn n factoriel(n))
Deacuteroulement pour n=4
return 4 factoriel(3)
return 3 factoriel (2)
return 2 factoriel (1)
=1 cas eacuteleacutementaire
on remonte
La reacutecursiviteacute neacutecessite lrsquoemploi drsquoune pile pour stocker les reacutesultats intermeacutediaires
Le factoriel peut se reacutesoudre sans reacutecursiviteacute on parle alors drsquoimpleacutementation iteacuterative
1
2
6
24
La reacutecursiviteacute
Dr HADJ TAYEB S 77
Lrsquoavantage de limpleacutementation reacutecursive est le gain de temps Mais son inconveacutenient
reacuteside dans lrsquoutilisation drsquoune grande quantiteacute de meacutemoire
4 Types de reacutecursiviteacute
Il existe deux types de fonctions reacutecursives
- Les fonctions reacutecursives terminales
- Les fonctions reacutecursives non terminales
41 Fonction reacutecursive terminale
Une fonction reacutecursive est dite terminale si aucun traitement nest effectueacute agrave la
remonteacutee dun appel reacutecursif sauf le retour dune valeur Il nrsquoy a pas de calcul entre lrsquoappel reacutecursif et lrsquoinstruction return
Les appels reacutecursifs nont pas besoin decirctre empileacutes dans la pile dexeacutecution car lappel
suivant remplace simplement lappel preacuteceacutedent dans le contexte dexeacutecution
42 Fonction reacutecursive non terminale
Une fonction reacutecursive est dite non terminale si le reacutesultat de lappel reacutecursif est
utiliseacute pour reacutealiser un traitement (en plus du retour dune valeur)
Le factoriel de lrsquoexemple 1 est baseacute sur une reacutecursiviteacute non terminale puisquil y a
multiplication par n avant return
Exemple 2 Ecriture du factoriel sous forme reacutecursiviteacute terminale
Lrsquoideacutee est de supprimer le calcul qui se fait dans lrsquoappel reacutecursif return nfact(n-1) Il faudra donc injecter une variable dans la deacutefinition de la fonction qui va
accumuler les calculs au fur et a mesure Nous aurons donc
Programme C de reacutesolution reacutecursive terminale du factoriel
include ltstdiohgt
unsigned long int nresultat
int factoriel(int n int accu)
if (n == 0) return accu
else return factoriel(n - 1 n accu)
main()
printf(Entrer un entier positif n)
scanf(ld ampn)
resultat=1
Appel reacutecursive et affichage du reacutesultat final
printf(ld = ldn n factoriel(nresultat))
La reacutecursiviteacute
Dr HADJ TAYEB S 78
Lappel reacutecursif return factoriel(n - 1 n accu) est donc terminal
5 Passage du reacutecursif agrave lrsquoiteacuteratif
Un programme iteacuteratif se base sur des boucles pour traiter un certain nombre
deacuteleacutements Le passage du reacutecursif agrave lrsquoiteacuteratif reviendra agrave faire de la deacute-reacutecursiviteacute
On peut transformer une fonction reacutecursive terminale en iteacuteration pour optimiser
lexeacutecution
Une fonction reacutecursive terminale a pour forme geacuteneacuterale Type recursive(P)
I0
if (Condition) return element
else recursive(Prsquo))
Forme geacuteneacuterale pour passage agrave la forme iteacuterative
Type Iteratif(P)
I0
while (non Condition)
Prsquo=f(P) return (resultat)
Avec f la fonction de transformation des paramegravetres P
Exemple 3
unsigned long int factoriel(unsigned long
int n)
if(n lt= 1)
return 1
else
return n factoriel(n-1)
unsigned long int factoriel(unsigned long
int n)
int accu = 1
while (ngt1)
accu = naccu
n = n-1
return accu
La reacutecursiviteacute
Dr HADJ TAYEB S 79
Exemple 4
Proposer une fonction reacutecursive et une autre iteacuterative pour le calcul de la somme
int RecursiveSomme(int n)
if (n lt= 0) return 0
else return (n n n n + Somme(n - 1))
int IterativeSomme(int n)
int isom
for (i=2som=1ilt=ni++)
som=som+ iiii
return som
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 80
Structures complexes listes chaineacutees et piles
1 Deacutefinition drsquoune structure
Nous avons deacutejagrave vu comment le tableau permettait de deacutesigner sous un seul nom un
ensemble de valeurs de mecircme type chacune drsquoentre elles eacutetant repeacutereacutee par un indice La structure quant agrave elle va nous permettre de deacutesigner sous un seul nom un ensemble de
valeurs pouvant ecirctre de types diffeacuterents Lrsquoaccegraves agrave chaque eacuteleacutement de la structure (nommeacute champ) se fera cette fois non plus par une indication de position mais par son nom au sein de
la structure
Exemple 1
Deacutecrire une structure produit servant agrave stocker le numeacutero la quantiteacute et le prix unitaire drsquoun produit
En C nous aurons struct produit int numero int qte float prix
2 Les listes chaineacutees
Les listes sont des structures de donneacutees informatiques qui permettent au mecircme titre
que les tableaux par exemple de garder en meacutemoire des donneacutees en respectant un certain ordre
on peut ajouter supprimer ou consulter un eacuteleacutement en deacutebut ou en fin de liste vider une liste
ou savoir si elle contient un ou plusieurs eacuteleacutements
Les langages de programmation gegraverent les structures de donneacutees permettant lrsquoaccegraves agrave tous les eacuteleacutements de la liste
Une cellule plus connue sous le nom de maillon possegravede un ou plusieurs champs
Les cellules permettent de stocker des donneacutees
Une liste chaicircneacutee deacutesigne une liste ordonneacutee dont la repreacutesentation en meacutemoire est une
succession de maillons
Chaque maillon (cellule) contient une ou plusieurs donneacutees et un pointeur vers le maillon
suivant
Il existe deux plusieurs types de listes chaicircneacutees Liste simplement chaicircneacutee et liste doublement
chaicircneacutee
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 81
Nous nous inteacuteressons aux listes simplement chaineacutees
Les listes simplement chaicircneacutees sont plus flexibles que les tableaux car on peut ajouter
et supprimer des cases agrave nimporte quel moment
Dans une liste simplement chaicircneacutee deux informations composent chaque eacuteleacutement de la liste
chaicircneacutee
bull La valeur associeacutee agrave leacuteleacutement
bull Un pointeur vers leacuteleacutement suivant (successeur)
Comme un seul eacuteleacutement de la liste est pointeacute laccegraves se fait dans un seul sens chaque eacuteleacutement
est une structure qui contient ladresse de leacuteleacutement suivant
Figure1 Repreacutesentation dune liste simplement chaicircneacutee en meacutemoire
Dans une liste nous pouvons inseacuterer des eacuteleacutements ou les supprimer Mais avons ca il
faut au preacutealable creacuteer une liste
21 Creacuteation drsquoune liste vide
La toute premiegravere eacutetape consiste agrave creacuteer une structure Liste contenant par exemple une
donneacutee val et un pointeur pour pointer vers leacuteleacutement suivant suivant
Nous aurons
Figure 2 Creacuteation drsquoune liste vide
NULL
tete
include ltstdiohgt
include ltstdlibhgt
struct Liste
int val
struct Liste suivant
typedef struct Liste maliste
maliste tete=NULL maliste de type Liste est vide
Maillon (cellule)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 82
22 Insertion dans une liste
221 Insertion en deacutebut de liste
La fonction impleacutementeacutee en C insertion_debut a comme paramegravetre le pointeur tete
demaliste et la valeur agrave inseacuterer
Linsertion passe par
1 Allocation meacutemoire pour lrsquoeacuteleacutement (elem) et le maillon agrave inseacuterer (debut)
2 Insertion de leacuteleacutement nouveau en testant si la tete est null (liste vide) ou non
Impleacutementation en C
Remarque Il existe une version plus compresseacutee agrave ce code Reacuteflexion aux eacutetudiants
En scheacutematisant nous aurons deux possibiliteacutes
if(tete==NULL)
Figure 3 Insertion drsquoun eacuteleacutement dans une liste vide
NULL tete
debut
valeur NULL
tete
debut
maliste insertion_debut(maliste teteint valeur) maliste debut = malloc(sizeof(maliste)) if ((debut==NULL)||(elem==NULL)) exit(0) debut-gtval = valeur if(tete==NULL) debut-gtsuivant=NULL tete=debut else debut-gtsuivant=tete tete=debut return tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 83
if (tete =NULL)
Figure 4 Insertion drsquoun eacuteleacutement en deacutebut drsquoune liste
222 Insertion en fin de liste
La fonction impleacutementeacutee en C insertion_fin a comme paramegravetre le pointeur tete de maliste et
la valeur agrave inseacuterer
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inseacuterer (dernier) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle while chaque eacuteleacutement de la liste jusqursquoa ce que elem-gtsuivant=NULL (Fin de liste)
3 On relie les deux eacuteleacutements elem et dernier
Impleacutementation en C
NULL
tete
Debut
maliste insertion_fin(maliste teteint valeur) maliste dernier = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((dernier==NULL)||(elem==NULL)) exit(0) dernier-gtval=valeur dernier-gtsuivant=NULL elem=tete while(elem-gtsuivant=NULL) elem=elem-gtsuivant elem-gtsuivant=dernier return tete
debut
NULL
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 84
Figure 5 Insertion drsquoun eacuteleacutement en queue de liste
223 Insertion au milieu dune liste
La fonction impleacutementeacutee en C insertion_milieu a comme paramegravetre le pointeur tete de
maliste la valeur agrave inseacuterer et la position voulue
Linsertion passe par plusieurs eacutetapes
1 On alloue de la meacutemoire pour le maillon agrave inserer (milieu) et (elem) pour parcourir
maliste
2 On parcourt avec une boucle laquo pour raquo chaque eacuteleacutement de la liste jusqursquoagrave atteindre la position souhaiteacutee
3 On relie les deux eacuteleacutements elem et milieu
Impleacutementation C
maliste insertion_milieu(maliste teteint valeurint position) int i maliste milieu = malloc(sizeof(maliste)) maliste elem = malloc(sizeof(maliste)) if ((milieu==NULL)||(elem==NULL)) exit(0) milieu-gtval=valeur elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant ordre important des 2 instructions suivantes sinon on perd le reste de la liste milieu-gtsuivant=elem-gtsuivant elem-gtsuivant=milieu return tete
NULL
tete
dernier
NULL
tete
dernier
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 85
Figure 6 Ajout au milieu de liste
23 Suppression dans une liste
231 Suppression en deacutebut de liste
La fonction impleacutementeacutee en C supp_debut a comme paramegravetre le pointeur tete de maliste
La suppression deacutebut consiste directement agrave affecter au pointeur tete lrsquoadresse suivante On nrsquooublie pas de libeacuterer lrsquoespace avec la fonction free
Impleacutementation en C
Figure 7 Suppression en tecircte de liste
232 Suppression en fin de liste
maliste supp_debut(maliste tete) int i if (tete == NULL) exit(0) maliste supp_debut=tete tete=tete-gtsuivant free (supp_debut) return tete
NULL
tete
Supp_debut
Etape 2
NULL
Supp_debut
tete Etape 1
NULL
tete
milieu
NULL
tete
milieu
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 86
La fonction impleacutementeacutee en C supp_fin a comme paramegravetre le pointeur tete de maliste
La suppression en queue de liste consiste agrave parcourir la liste jusqursquoau NULL tout en
sauvegardant agrave lrsquoavance lrsquoadresse de lrsquoeacuteleacutement preacuteceacutedent (figure 8)
La derniegravere eacutetape consiste en la libeacuteration de lrsquoespace
Impleacutementation en C
Figure 8 Suppression en queue de liste
233 Suppression au milieu de liste
La fonction impleacutementeacutee en C supp_milieu a comme paramegravetre le pointeur tete de
maliste et la position de suppression
La suppression consiste en
1 Initialiser elem avec la tete de liste
2 Parcourir la liste eacuteleacutement par eacuteleacutement jusqursquoagrave la position Sauvegarder le maillon agrave supprimer dans elem_supp (pour pouvoir le libeacuterer apregraves)
Etablir le lien avec elem-gtsuivant=elem-gtsuivant-gtsuivant
3 Libeacuterer elem_supp
maliste supp_dernier(maliste tete) int i maliste elem_precedent maliste elem_supp=tete while (elem=NULL) elem_precedent=elem_supp sauvegarder le precedent elem_supp=elem_supp-gtsuivant elem_precedent=NULL free(elem_supp) return tete
NULL
tete
Elem_supp elem_precedent
NULL
Elem_precedent
tete
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 87
Impleacutementation en C
Figure 9 Suppression au milieu de liste
3 Les piles
31 Deacutefinition
Une pile est une seacutequence deacuteleacutements accessibles par une seule extreacutemiteacute appeleacutee
sommet Toutes les opeacuterations deacutefinies sur les piles sappliquent agrave cette extreacutemiteacute Leacuteleacutement
situeacute au sommet sappelle le sommet de pile
Une pile est geacutereacutee suivant la politique LIFO (Last In First Out) (dernier arriveacute premier servi)
ce qui signifie en clair que les derniers eacuteleacutements agrave ecirctre ajouteacutes agrave la pile seront les premiers agrave ecirctre
reacutecupeacutereacutes
maliste supp_milieu(maliste teteint position) int i maliste elem_supp maliste elem=tete for(i=0iltposition-2i++) elem=elem-gtsuivant elem_supp=elem-gtsuivant elem-gtsuivant=elem-gtsuivant-gtsuivant free(elem_supp) return tete
NULL
tete
Elem_supp
Etape 2
NULL
Elem_supp
tete
Etape 1 Etablir le lien
elem-gtsuivant =elem-gtsuivant-gtsuivant
Libeacuterer
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 88
Figure 10 Repreacutesentation drsquoune pile
32 Opeacuterations sur les piles
Plusieurs opeacuterations peuvent ecirctre effectueacutees sur les piles dont les plus importantes sont
- Creacuteer une pile vide
- Tester si une pile est vide
- Acceacuteder agrave lrsquoinformation contenue dans le sommet de la pile - Ajouter un eacuteleacutement au sommet de la pile (empiler)
- Supprimer lrsquoeacuteleacutement qui se trouve au sommet de la pile (deacutepiler)
Opeacuterations
pile_vide Pile
est vide Pile booleacuteen
empiler Pile eacuteleacutement Pile Pile
deacutepiler Pile Pile
sommet Pile eacuteleacutement
Les opeacuterations ci-dessus ne sont pas deacutefinies partout on a les preacute-conditions suivantes ougrave P
est de sorte Pile et e est de sorte eacuteleacutement
deacutepiler(P) est deacutefinie ssi est vide(P) = faux
sommet(P) est deacutefinie ssi est vide(P) = faux
En supposant les preacute-conditions veacuterifieacutees ces opeacuterations veacuterifient les axiomes suivants
deacutepiler(empiler(P e)) = P
sommet(empiler(P e)) = e
est vide(pile_vide) = vrai
est vide (empiler(P e))= faux
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 89
3 3 Repreacutesentation des piles
331 Repreacutesentation contigueuml
Dans cette repreacutesentation les eacuteleacutements de la pile sont rangeacutes dans un tableau De plus
il faut conserver lrsquoindice du sommet de la pile et la taille maximale du tableau utiliseacute
332 Repreacutesentation chaicircneacutee
Chaque eacuteleacutement de la pile pointera vers leacuteleacutement preacuteceacutedent La liste pointera toujours
vers le sommet de la pile Voici donc la structure qui constituera notre pile
Chaque case drsquoune pile repreacutesente un eacuteleacutement Les cases sont en quelque sorte emboiteacutees les
unes sur les autres Le pointeur est repreacutesenteacute par le jeton noir (voir figure 10)
Enfin on peut dire que les piles sont un cas particulier des listes chaicircneacutees
a Ajout dun nouvel eacuteleacutement (Empilement)
Lors de lrsquoajout drsquoun eacuteleacutement dans une pile veut ajouter puis nous devrons nouvel eacuteleacutement Ceci dit que le nouvel eacuteleacutement est devenu le sommet de la pile
Fonction en C drsquoempilement
mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete
struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 90
Explication
- On creacutee un nouvel eacuteleacutement de type Pile
- On veacuterifie que leacuteleacutement a bien eacuteteacute creacuteeacute
- On assigne agrave la valeur de cet eacuteleacutement la donneacutee que lon veut ajouter
- On fait pointer cet eacuteleacutement sur le sommet de la pile
- On fait pointer le sommet de pile sur lrsquoeacuteleacutement ajouteacute - On retourne le nouveau sommet de la pile
b Suppression dun eacuteleacutement (deacutepilement)
Dans une pile nous supprimons toujours lrsquoeacuteleacutement qui se trouve en sommet de pile pour ce faire il nous faudra utiliser la fonction free
Si la liste nest pas vide on stocke ladresse du sommet de pile apregraves suppression
Fonction en C de deacutepilement
Explication
- Veacuterifier si la pile nest pas vide
- Si elle ne lest pas stockez dans un eacuteleacutement temporaire lavant-dernier eacuteleacutement de la
pile
- Supprimer le dernier eacuteleacutement dans la tegravete
- Faire pointer la pile vers notre eacuteleacutement temporaire
- On retourne le nouveau sommet de la pile
mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 91
Code C
includeltstdiohgt includeltstdlibhgt ------------------------------------------------------- DECLARATION DE LA STRUCTURE PILE struct Pile int val struct Pile precedent typedef struct Pile mapile mapile tete=NULL ------------------------------------------------------- FONCTION EMPLILEMENT mapile empiler(mapile teteint valeur) mapile p_nouveau = malloc(sizeof(mapile)) if (NULL = p_nouveau) p_nouveau-gtval = valeur p_nouveau-gtprecedent=tete tete=p_nouveau return tete --------------------------------------------------------- FONCTION DEPILEMENT mapile depiler(mapile tete) mapile temp int elem if(tete = NULL) elem = tete-gtval temp = tete-gtprecedent free(tete) tete = temp return tete else printf(La pile est viden) --------------------------------------------------------- main() int ia mapile pp printf (la tete de la pile initialement pointe vers p tete) printf (n Insertion du 1er eacuteleacutement dans la pile t) scanf (dampa) tete=empiler (tete a)
Chapitre 5 Structures complexes listes chaineacutees et piles
Dr HADJ TAYEB S 92
printf (n -----Insertion des eacuteleacutements------- n) do printf (donnez un entier t) scanf (dampa) if (a=0) tete=empiler (tete a) la condition est neacutecessaire pour que le 0 ne sempile pas while (a=0) printf (n ------Affichage des eacuteleacutements inseacutereacutes-------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) La proceacutedure de Deacutepilement int choix printf (n Taper 1 si vous voulez deacutepiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) while (choix==1) tete=depiler(tete) printf (Taper 1 si vous voulez depiler sinon un autre nombre pour arrecirctert) scanf (dampchoix) printf (---------------n) printf (n-----------Etat de la pile apregraves deacutepilement----------n) for (pp=tetepp=NULLpp=pp-gtprecedent) printf (|d|npp-gtval) FIN DU PROGRAMME C
Travaux pratiques
Dr HADJ TAYEB S 93
TP 1
Preacutesentation de lrsquoenvironnement de travail
Un langage de programmation est un moyen formel permettant de deacutecrire des
traitements (ie des tacircches agrave effectuer) sous la forme de programmes (ie de seacutequences drsquoinstructions et de donneacutees de haut niveau crsquoest-agrave-dire compreacutehensibles par le programmeur) et pour lequel il existe un compilateur permettant lrsquoexeacutecution effective des programmes par un ordinateur Les aspects syntaxiques (regravegles drsquoeacutecriture des programmes) et seacutemantiques (deacutefinition des instructions) drsquoun langage de programmation doivent ecirctre speacutecifieacutes de maniegravere preacutecise
Lrsquoeacutecriture la compilation la mise au point et lrsquoexeacutecution drsquoun programme C fait appel agrave diffeacuterents outils Les instructions du programme doivent ecirctre rentreacutees comme du texte normal dans un fichier agrave lrsquoaide drsquoun eacutediteur de texte On parle de programme source Le fichier contenant un programme source doit comporter lrsquoextension c(Ex programmec) Ce fichier source doit ensuite ecirctre compileacute agrave lrsquoaide drsquoun compilateur afin de creacuteer un exeacutecutable (fichier binaire) ou un fichier objet (drsquoextension o) Ceci est fait en utilisant un compilateur Une fois la compilation nous passons agrave lrsquoexeacutecution du programme Il existe diffeacuterents eacutediteurs nous travaillons avec le Code Blocks
Partie 1 Structures alternatives et iteacuteratives
Exercice 1 Ecrire un programme affichant agrave lrsquoeacutecran le message Crsquoest mon premier programme Le compiler puis lrsquoexeacutecuter
Exercice 2 Ecrire un programme qui affiche le maximum et le minimum entre 3 nombres reacuteels saisis au clavier
Exercice 3 Ecrire un programme qui dit si un nombre entier est pair ou impair
Exercice 4 Ecrire un programme en C qui permet de calculer la moyenne drsquoune suite des nombres positifs ou nuls La fin de cette suite est deacutetermineacutee par la lecture drsquoun nombre neacutegatif Exercice 5 En utilisant La boucle forla boucle while et la boucle do ndash while eacutecrire un programme qui calcule
Travaux pratiques
Dr HADJ TAYEB S 94
Partie 2 Tableaux et matrices
Exercice 1
Ecrire un programme qui - Lire la dimension N dun tableau T du type int (dimension maximale 50
composantes) - Remplir le tableau par des valeurs entreacutees au clavier et afficher le tableau - Calculer et afficher la somme des eacuteleacutements du tableau
Exercice 2
Soit une matrice reacuteelle eacutecrire un programme permettant de mettre agrave zeacutero les valeurs de la deuxiegraveme diagonale et de sommer les valeurs de la premiegravere diagonale Afficher la nouvelle matrice et le reacutesultat de la somme trouveacute
Exercices suppleacutementaires
Exercice 1
Ecrire un programme qui affiche la reacutesistance eacutequivalente agrave trois reacutesistances R1 R2 R3 (type double) - si les reacutesistances sont brancheacutees en seacuterie Rseacuterie = R1+R2+R3 - si les reacutesistances sont brancheacutees en parallegravele
Exercice 2
Ecrire un programme qui lit deux nombres entiers a et b et donne le choix agrave lrsquoutilisateur 1 de savoir si la somme a + b est paire 2 de savoir si le produit ab est pair 3 de connaicirctre le signe de la somme a + b 4 de connaicirctre le signe du produit ab
Exercice 3
Soient x et n deux nombres entiers saisis au clavier Calculer
En utilisant La boucle forla boucle while et la boucle do ndash while
Travaux pratiques
Dr HADJ TAYEB S 95
Corrigeacute
Exercice 2 include ltstdiohgt main() int a bcminmax printf (Saisi de 3 nombresn) scanf (dampa) scanf (dampb) scanf (dampc) if (altb) min=a max=b else min=b max=a if (cltmin) min=c else if (cgtmax) max=c printf (le minimum entre (d d d) est d n nabcmin) printf (le maximumn entre (d d d) est d n nabcmax)
Exercice 3 includeltstdiohgt main() int a printf(Donnez un nombre) scanf (dampa) if (a2==0)printf (d est paire a) else printf (d est impaire a)
Exercice 4 include ltstdiohgt main() int nbrs int comp s=0comp=0 do printf (Saisissez un nombre ) scanf (dampnbr) if (nbrgt=0) s=s+nbr comp++
Travaux pratiques
Dr HADJ TAYEB S 96
while (nbrgt=0) printf (La moyenne de la suite saisie es 2f (float) scomp)
Exercice 5
include ltstdiohgt main() int ni double somf int signe Tester le degreacute n do printf(Entrer un entier naturel ) scanf(d ampn) while (nlt0) Initialisation som=0 signe=1 f=1 Resolution avec la boucle pour for (i=1 ilt=n i++) f = fi calcul du factoriel signe= signe (-1) som=som+signe1f printf (La somme est 4lfn som) affichage de resultat avec 4 chiffres apreacutes la virgule
Partie 2 Tableaux et matrices
Exercice 1 include ltstdiohgt define taille 50 main () int tab[taille] deacuteclaration statique dun tableau dentier de dimension maximale =50 int in ETAPE 1 Saisi de la dimension du tableau do
Travaux pratiques
Dr HADJ TAYEB S 97
printf (donnez la dimension de votre tableau t) scanf (dampn) while ((ngttaille)||(nlt1)) ETAPE 2 Boucle de Saisi des valeurs du tableau for (i=0iltni++) printf (donnez la valeur de la case d ti+1) scanf (damptab[i]) ETAPE 3 Boucle daffichage des valeurs du tableau printf (n Affichage du tableau n) for (i=0iltni++) printf (tab [d]=d n itab [i]) ETAPE 4 Boucle pour le calcul de la somme des valeurs du tableau int S=0 for (i=0iltni++) S=S+tab [i] printf (La somme des valeurs du tableau est d nS)
Exercice 2 include ltstdiohgt define taille 50 main () int mat[taille][taille] deacuteclaration statique dune matrice carreacutee de dimension maximale =50 int ijn ETAPE 1 Saisi de la dimension du tableau do printf (donnez la dimension de votre matrice t) scanf (dampn) while ((nlt1)||(ngttaille)) ETAPE 2 Boucle de Saisi des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (Donnez la valeur de la case dd ti+1j+1) scanf (dampmat[i][j]) ETAPE 3 Boucle pour le calcul de la somme des valeurs de la 1ere diagonale int S=0 for (i=0iltni++) S=S+mat [i][i] printf (n)
Travaux pratiques
Dr HADJ TAYEB S 98
printf (La somme des valeurs de la 1ere diagonale de la matrice est d nS) ETAPE 4 Mettre agrave zeacutero les valeurs de la 2eme diagonale for (i=0iltni++) mat [i][n-i-1]=0 printf (Affichage de la matrice apreacutes la mise agrave 0 des valeurs de la 2eacuteme diagonalen) ETAPE 5 Boucle daffichage des valeurs de la matrice for (i=0iltni++) for (j=0jltnj++) printf (mat [d][d]=d n i+1j+1mat [i][j]) printf (n)
Travaux pratiques
Dr HADJ TAYEB S 99
TP2
But Impleacutementer sous C les fonctions et les fonctions reacutecursives Initier lrsquoeacutetudiant aux pointeurs Partie 1 Les Fonctions Exercice 1
1 Variante 1 - Deacuteclarer 2 variables entiegraveres ab dans la classe globale - Ecrire une fonction add qui retourne la somme de deux nombres entiers ab - Ecrire la fonction main qui reacutealise la saisi des deux variables ab et fait appel agrave la
fonction add - Compiler et exeacutecuter 2 Variante 2 - Deacuteclarer 2 variables entiegraveres ab dans la classe main (elles sont locales) - Ecrire une fonction drsquoaddition add retourne la somme des deux variables donneacutees en
paramegravetres (Cette fonction accepte doc 2 paramegravetres x y et retourne un entier) - Ecrire la fonction main qui saisi les deux variables locales ab et fait appel agrave la fonction
add - Compiler et exeacutecuter
Que retenez vous des deux variantes Exercice 2
- Ecrire une fonction qui affiche tous les diviseurs drsquoun nombre et retourne la somme de ses diviseurs
- Tester dans la fonction principale main
Exercice 3 (La reacutecursiviteacute) On rappelle que les nombres de Fibonacci sont deacutefinis de la faccedilon suivante F1=F2=1 Fn=Fnminus1+Fnminus2 pour (n⩾3)
- Ecrire une fonction reacutecursive qui calcule le niegraveme nombre de Fibonacci - Tester la fonction dans un programme principal
Partie 2 Les pointeurs Exercice 1
Deacuteclarer un entier age et un pointeur p pointant vers cet entier Initialiser lrsquoentier agrave la valeur 18 Afficher
- Le contenu de la variable sans le pointeur - Le contenu de la variable en utilisant le pointeur - Lrsquoadresse de la variable sans le pointeur - Lrsquoadresse de la variable en utilisant le pointeur
Travaux pratiques
Dr HADJ TAYEB S 100
Exercice 2 Soit le progamme C include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(xy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
- Lisez les lignes du code compiler et exeacutecuter - Deacutetectez lrsquoerreur et corrigez ce programme
Exercice 3 Soit un tableau drsquoentiers 1 La fonction LIRE_TAB comprenant trois paramegravetres TAB N et NMAX lit la dimension N et les composantes dun tableau TAB La dimension N doit ecirctre infeacuterieure agrave NMAX Impleacutementer la fonction LIRE_TAB 2 La fonction ECRIRE_TAB agrave deux paramegravetres TAB et N qui affiche N composantes du
tableau TAB Impleacutementer cette fonction
3 Ecrire la fonction ECHANGE qui permute le contenue de deux variables entiegraveres (Faites dans lrsquoexercice 2)
4 Ecrire la fonction INVERSE_TAB (TN) qui range les eacuteleacutements dun tableau T dans lordre inverse sans utiliser de tableau daide
5 A laide des fonctions preacuteceacutedentes Ecrire un programme qui lit un tableau T dune dimension DIM (DIMlt=100) et qui affiche le tableau T avant et apregraves lappel de
INVERSE_TAB(T DIM) Exercices suppleacutementaires
Exercice 1 - Ecrire une fonction qui extrait le minimum de deux nombres de type double - Ecrire une fonction qui extrait le maximum de deux nombres de type double - Ecrire une fonction main qui permet de saisir 4 nombres reacuteels et affiche la valeur
minimale et la valeur maximale Exercice 2 Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entiegravere N (positive ou neacutegative) du type long comme paramegravetre et qui fournit le nombre de chiffres de N comme reacutesultat Ecrire un programme qui teste la fonction NCHIFFRES Exemple Introduire un nombre entier 6457392 Le nombre 6457392 a 7 chiffres
Travaux pratiques
Dr HADJ TAYEB S 101
Exercice 3 Eacutecrire un programme en utilisant une fonction reacutecursive permettant de multiplier deux entiers positifs a et b selon le principe reacutecursif suivant ab = a(b-1) +a si b est impair ab = (2a)(b2) si b est pair et diffeacuterent de 0 Exemple 367=366+36 = 723+36 = 722108 =1441+108 =1440+252 =252 Exercice 4
- Proposer une fonction iteacuterative pour la reacutesolution du problegraveme de Fibonacci - Tester la fonction dans un programme principal
Exercice 5
Ecrire un programme en utilisant une fonction qui deacutetermine la plus grande et la plus petite valeur dans un tableau dentiers T Afficher ensuite la valeur et la position du maximum et du minimum Si le tableau contient plusieurs maxima ou minima le programme retiendra la position du premier maximum ou minimum rencontreacute
Corrigeacute
Partie I Les fonctions
Exercice 1 PROGRAMME AVEC VARIABLES LOCALES DANS LA FONCTION main include ltstdiohgt int add (int a int b) return a+b main () int xy scanf (d d ampxampy) printf (la somme de d d est d xyadd (xy)) PROGRAMME AVEC VARIABLES GLOBALES include ltstdiohgt int ab int add ( ) return a+b main () scanf (d d ampaampb) printf (la somme de d d est d abadd ( ))
Travaux pratiques
Dr HADJ TAYEB S 102
Exercice 2 include ltstdiohgt int N int diviseur(int nbr) int icomptsom for (som=0compt=0i=1ilt=Ni++) if (N (i) == 0) compt++ printf (diviseur d est dncompti) som=som+i return (som) main() printf ( Entrer un nombre ) scanf(dampN) printf (la somme des diviseurs est dndiviseur(N))
Exercice 3 include ltstdiohgt int fibonacci_rec(int n) if (n==1 || n==2) return 1 else return fibonacci_rec(n-1)+fibonacci_rec(n-2) main() int n printf (donnez le nombre de fibo) scanf (dampn) printf (fibonnaci (d)=d nnfibonacci_rec (n))
Partie 2 Les pointeurs
Exercice 1 include ltstdiohgt main () int age= 18 int p=NULL creacuteer un pointeur entier p=ampage le pointeur contient ladresse de la variable printf (La variable val contient la valeur d n age) printf (Adresse de la variable = p n ampage) printf (Le pointeur contient lrsquoadresse p n p) printf (Le pointeur contient la valeur d n p)
Travaux pratiques
Dr HADJ TAYEB S 103
Exercice 2
Correction du programme include ltstdiohgt void calcul (int a int b) a=2 a int c = a+b main () int xy printf (donnez une valeur x ) scanf (dampx) printf (donnez une valeur y ) scanf (dampy) calcul(ampxy) printf (les nouvelles valeurs apreacutes appel x=d y=dxy)
Exercice 3 include ltstdiohgt define TAILLE 100 void LIRE_TAB (int TAB int N int NMAX) Variables locales int i Saisie de la dimension du tableau do printf(Dimension du tableau (maxd) NMAX) scanf(d N) while (Nlt=0 || NgtNMAX) Saisie des composantes du tableau for (i=0 iltN i++) printf(Eleacutement[d] i) scanf(d ampTAB[i]) void ECRIRE_TAB (int TAB int N) int i Affichage des composantes du tableau for (i=0 iltN i++) printf(d (TAB+i)) printf(n) void ECHANGE(int a int b)
Travaux pratiques
Dr HADJ TAYEB S 104
int tmp tmp=a a=b b=tmp void INVERSE_TAB(int TAB int N) Variables locales int ij for (i=0 j=N-1 ilt(N)2 i++) Echange de TAB[i] et TAB[j] ECHANGE(TAB+iTAB+j)j-- main() Variables locales int T[TAILLE] Tableau dentiers int DIM Dimension du tableau Traitements LIRE_TAB (T ampDIM TAILLE) printf(Tableau donneacute n) ECRIRE_TAB (T DIM) INVERSE_TAB(T DIM) printf(Tableau inverseacute n) ECRIRE_TAB (T DIM)
Travaux pratiques
Dr HADJ TAYEB S 105
TP3 But
Initier lrsquoeacutetudiant au concept de lrsquoallocation dynamique et des listes chaineacutees Exercice 1
- Ecrire une fonction qui alloue dynamiquement un tableau drsquoentiers - Ecrire une fonction qui saisi les valeurs du tableau - Ecrire une fonction qui affiche les valeurs du tableau - Ecrire une fonction qui recherche le nombre drsquooccurrence drsquoune valeur dans le tableau - Tester vos fonctions dans la fonction main
Exercice 2 Donner les deacuteclarations neacutecessaires qui permettent de creacuteer une liste chaicircneacutee comprenant
- Deux champs Le champ id de type entier et le champ moyenne de type reacuteel - Pointeur next pour pointer sur le maillon suivant
Ecrire - Une fonction qui permet drsquoajouter un maillon agrave la tecircte dune liste - Ecrire une fonction qui affiche les eacuteleacutements drsquoune liste passeacutee comme paramegravetre - Ecrire une fonction qui retourne le nombre des moyennes supeacuterieures ou eacutegale agrave 10 - Ecrire une fonction qui cherche un identificateur (id) dans une liste et retourne son pointeur - Ecrire une fonction qui supprime un identificateur id de la liste - Ecrire une fonction menu () afficher un menu qui preacutesente les traitements agrave reacutealiser sous
forme drsquooptions de choix ---------------------------------------------
MENU PRINCIPAL
1 - Ajout un eacuteleacutement agrave la liste
2 - Afficher la liste
3 - Supprimer un identificateur de la liste
4 ndash Affiche le nombre des moyennes supeacuterieures ou eacutegales agrave 10
5 - Quitter
---------------------------------------------
Taper votre choix
- Tester vos fonctions Exercice suppleacutementaire - Ecrire une fonction qui alloue dynamiquement une matrice reacuteelle - Ecrire une fonction qui saisi les valeurs de la matrice - Ecrire une fonction qui affiche la matrice - Ecrire une fonction qui retourne la somme des valeurs de la matrice
Corrigeacute Exercice 1 includeltstdiohgt includeltstdlibhgt int i Allocation dynamique int allouevecteur(int dimension)
Travaux pratiques
Dr HADJ TAYEB S 106
int vecteur = malloc(dimensionsizeof(int)) return vecteur Affichage du vecteur void affiche(int vecteurint dimension) for (i=0iltdimensioni++) printf (d t(vecteur+i)) Saisi du vecteur void saisi(int vecteurint dimension) for (i=0iltdimensioni++) printf (case d= i) scanf (d= vecteur+i) Rechercher int occurence (int vecteurint dimension int valeur) int occ for (i=0occ=0iltdimensioni++) if (valeur==(vecteur+i)) occ++ return occ Liberer void liberevecteur(int vecteur) free(vecteur) main() int vecteur=NULL int dim int valeur printf (La dimension de mon tableau est ) scanf(dampdim) vecteur=allouevecteur(dim) printf (La saisi du tableau n) saisi(vecteurdim) printf (Affichage du tableau saisi n) affiche(vecteurdim) printf (nLa valeur agrave rechercher est ) scanf(dampvaleur) printf (Le nombre doccurence de la valeur d est d nvaleur occurence(vecteur dimvaleur)) liberevecteur(vecteur)
Exercice 2
Travaux pratiques
Dr HADJ TAYEB S 107
includeltstdiohgt includeltstdlibhgt struct liste int id float moyenne struct liste next typedef struct liste maliste maliste tete=NULL fonction qui ajoute un eacuteleacutement agrave la liste maliste ajouter(maliste teteint valeur float moy) maliste elem = malloc(sizeof(maliste)) if (elem == NULL) exit(0) elem-gtid =valeur elem-gtmoyenne= moy if(tete==NULL) elem-gtnext=NULL else elem-gtnext=tete tete=elem return tete fonction qui affiche les elements de la liste void afficher(maliste tete) maliste pp printf(Affichage de la listen) for(pp=tetepp=NULLpp=pp-gtnext) printf(Identificateur dtpp-gtid) printf(Moyenne fnpp-gtmoyenne) fonction qui retourne le nombre de moyenne gt=10 int Nombre(maliste tete) int nb maliste pp for(pp=tetenb=0pp=NULLpp=pp-gtnext) if (pp-gtmoyennegt=10) nb++ else pp-gtnext return nb fonction qui retourne un pointeur sur un valeur rechercheacutee (id) maliste rechercher(maliste teteint valeur) maliste pp for(pp=tetepp=NULLpp=pp-gtnext)
Travaux pratiques
Dr HADJ TAYEB S 108
if(pp-gtid==valeur) return pp return NULL fonction qui supprime une valeur de la liste (id) maliste supprimer(maliste tete int valeur) maliste pppp1 pp=rechercher(tetevaleur) if (pp=NULL) if (pp==tete) tete=tete-gtnext free(pp) else pp1=tete while(pp1-gtnext=pp) pp1=pp1-gtnext pp1-gtnext=pp-gtnext free(pp) else printf(Identificateur introuvablen) return tete fonction menu principal void menu() printf(---------------------------------------------n) printf(tMENU PRINCIPALn) printf(1 - Ajout un eacuteleacutement agrave la listen) printf(2 - Afficher la listen) printf(3 - Supprimer un identificateur de la listen) printf(4 ndash Affiche le nombre des moyennes gt10 de la listen) printf(5 ndash Quittern) printf(Taper votre choix ) main() char choix int code float moyenne maliste pppp1 do menu() choix=getchar() switch(choix) case 1printf(Donner un identificateur )scanf(dampcode) printf(nDonner la moyenne )scanf(fampmoyenne)
Travaux pratiques
Dr HADJ TAYEB S 109
tete=ajouter(tetecodemoyenne)break case 2afficher(tete)break case 3printf(Taper lidentificateur agrave supprimer= )scanf(dampcode) tete=supprimer(tetecode)break case 4printf(le nombre des moyennes gt=10=dnNombre(tete))break case 5break default printf(Choix erroneacuten) getchar() pour lire le saut de ligne du premier getchar while(choix=5)
REFERENCES BIBLIOGRAPHIQUES
P Zanella Y Ligier laquo Architecture et technologie des ordinateurs raquo DUNOD ISBN
2-04-018795-2 Paris 1989
R Malgouyres R Zrour F Feschet laquo Initiatiation agrave lrsquoalgortihmique et agrave la
programmation C raquo 2eme edition DUNOD ISBN 978-2-10-055903-9 2011
N Flasque H Kassel F Lepoivre B Velikson laquo Exercices et probleacutemes
drsquoalgorithmique raquo DUNOD ISBN 978-2-10-055072-22010
BW Kernighan D Ritchie laquo Le langage C Norme ANSI raquo DUNOD ISBN 2
100051164 Paris 2000
L Baba-Hamed S Hocine laquo Algorithme et structures de donneacutees statiquesraquo Cours et
exercices avec solutions Edition numeacutero 4494