polycopié du cours, travaux dirigés et travaux pratiques

117
République Algérienne Démocratique et Populaire Ministère de l'Enseignement Supérieur et de la Recherche Scientifique Ecole Supérieure en Génie Electrique et Energétique d’Oran Polycopié du cours, travaux dirigés et travaux pratiques des premiéres années du cycle préparatoire -Module Informatique- Rédigé par Docteur Sabria HADJ TAYEB Année Universitaire 2018- 2019

Upload: others

Post on 24-Oct-2021

13 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 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

Page 2: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 3: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 4: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 5: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 6: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 7: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 8: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 9: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 10: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 11: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 12: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 13: Polycopié du cours, travaux dirigés et travaux pratiques

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

Page 14: Polycopié du cours, travaux dirigés et travaux pratiques
Page 15: Polycopié du cours, travaux dirigés et travaux pratiques
Page 16: Polycopié du cours, travaux dirigés et travaux pratiques
Page 17: Polycopié du cours, travaux dirigés et travaux pratiques
Page 18: Polycopié du cours, travaux dirigés et travaux pratiques
Page 19: Polycopié du cours, travaux dirigés et travaux pratiques
Page 20: Polycopié du cours, travaux dirigés et travaux pratiques
Page 21: Polycopié du cours, travaux dirigés et travaux pratiques
Page 22: Polycopié du cours, travaux dirigés et travaux pratiques
Page 23: Polycopié du cours, travaux dirigés et travaux pratiques
Page 24: Polycopié du cours, travaux dirigés et travaux pratiques
Page 25: Polycopié du cours, travaux dirigés et travaux pratiques
Page 26: Polycopié du cours, travaux dirigés et travaux pratiques
Page 27: Polycopié du cours, travaux dirigés et travaux pratiques
Page 28: Polycopié du cours, travaux dirigés et travaux pratiques
Page 29: Polycopié du cours, travaux dirigés et travaux pratiques
Page 30: Polycopié du cours, travaux dirigés et travaux pratiques
Page 31: Polycopié du cours, travaux dirigés et travaux pratiques
Page 32: Polycopié du cours, travaux dirigés et travaux pratiques
Page 33: Polycopié du cours, travaux dirigés et travaux pratiques
Page 34: Polycopié du cours, travaux dirigés et travaux pratiques
Page 35: Polycopié du cours, travaux dirigés et travaux pratiques
Page 36: Polycopié du cours, travaux dirigés et travaux pratiques
Page 37: Polycopié du cours, travaux dirigés et travaux pratiques
Page 38: Polycopié du cours, travaux dirigés et travaux pratiques
Page 39: Polycopié du cours, travaux dirigés et travaux pratiques
Page 40: Polycopié du cours, travaux dirigés et travaux pratiques
Page 41: Polycopié du cours, travaux dirigés et travaux pratiques
Page 42: Polycopié du cours, travaux dirigés et travaux pratiques
Page 43: Polycopié du cours, travaux dirigés et travaux pratiques
Page 44: Polycopié du cours, travaux dirigés et travaux pratiques
Page 45: Polycopié du cours, travaux dirigés et travaux pratiques
Page 46: Polycopié du cours, travaux dirigés et travaux pratiques
Page 47: Polycopié du cours, travaux dirigés et travaux pratiques
Page 48: Polycopié du cours, travaux dirigés et travaux pratiques
Page 49: Polycopié du cours, travaux dirigés et travaux pratiques
Page 50: Polycopié du cours, travaux dirigés et travaux pratiques
Page 51: Polycopié du cours, travaux dirigés et travaux pratiques
Page 52: Polycopié du cours, travaux dirigés et travaux pratiques
Page 53: Polycopié du cours, travaux dirigés et travaux pratiques
Page 54: Polycopié du cours, travaux dirigés et travaux pratiques
Page 55: Polycopié du cours, travaux dirigés et travaux pratiques
Page 56: Polycopié du cours, travaux dirigés et travaux pratiques
Page 57: Polycopié du cours, travaux dirigés et travaux pratiques
Page 58: Polycopié du cours, travaux dirigés et travaux pratiques
Page 59: Polycopié du cours, travaux dirigés et travaux pratiques
Page 60: Polycopié du cours, travaux dirigés et travaux pratiques
Page 61: Polycopié du cours, travaux dirigés et travaux pratiques
Page 62: Polycopié du cours, travaux dirigés et travaux pratiques
Page 63: Polycopié du cours, travaux dirigés et travaux pratiques
Page 64: Polycopié du cours, travaux dirigés et travaux pratiques
Page 65: Polycopié du cours, travaux dirigés et travaux pratiques
Page 66: Polycopié du cours, travaux dirigés et travaux pratiques
Page 67: Polycopié du cours, travaux dirigés et travaux pratiques
Page 68: Polycopié du cours, travaux dirigés et travaux pratiques
Page 69: Polycopié du cours, travaux dirigés et travaux pratiques
Page 70: Polycopié du cours, travaux dirigés et travaux pratiques
Page 71: Polycopié du cours, travaux dirigés et travaux pratiques
Page 72: Polycopié du cours, travaux dirigés et travaux pratiques
Page 73: Polycopié du cours, travaux dirigés et travaux pratiques
Page 74: Polycopié du cours, travaux dirigés et travaux pratiques
Page 75: Polycopié du cours, travaux dirigés et travaux pratiques
Page 76: Polycopié du cours, travaux dirigés et travaux pratiques
Page 77: Polycopié du cours, travaux dirigés et travaux pratiques
Page 78: Polycopié du cours, travaux dirigés et travaux pratiques
Page 79: Polycopié du cours, travaux dirigés et travaux pratiques
Page 80: Polycopié du cours, travaux dirigés et travaux pratiques
Page 81: Polycopié du cours, travaux dirigés et travaux pratiques
Page 82: Polycopié du cours, travaux dirigés et travaux pratiques
Page 83: Polycopié du cours, travaux dirigés et travaux pratiques
Page 84: Polycopié du cours, travaux dirigés et travaux pratiques
Page 85: Polycopié du cours, travaux dirigés et travaux pratiques
Page 86: Polycopié du cours, travaux dirigés et travaux pratiques
Page 87: Polycopié du cours, travaux dirigés et travaux pratiques
Page 88: Polycopié du cours, travaux dirigés et travaux pratiques
Page 89: Polycopié du cours, travaux dirigés et travaux pratiques
Page 90: Polycopié du cours, travaux dirigés et travaux pratiques
Page 91: Polycopié du cours, travaux dirigés et travaux pratiques
Page 92: Polycopié du cours, travaux dirigés et travaux pratiques
Page 93: Polycopié du cours, travaux dirigés et travaux pratiques
Page 94: Polycopié du cours, travaux dirigés et travaux pratiques
Page 95: Polycopié du cours, travaux dirigés et travaux pratiques
Page 96: Polycopié du cours, travaux dirigés et travaux pratiques
Page 97: Polycopié du cours, travaux dirigés et travaux pratiques
Page 98: Polycopié du cours, travaux dirigés et travaux pratiques
Page 99: Polycopié du cours, travaux dirigés et travaux pratiques
Page 100: Polycopié du cours, travaux dirigés et travaux pratiques
Page 101: Polycopié du cours, travaux dirigés et travaux pratiques
Page 102: Polycopié du cours, travaux dirigés et travaux pratiques
Page 103: Polycopié du cours, travaux dirigés et travaux pratiques
Page 104: Polycopié du cours, travaux dirigés et travaux pratiques
Page 105: Polycopié du cours, travaux dirigés et travaux pratiques
Page 106: Polycopié du cours, travaux dirigés et travaux pratiques
Page 107: Polycopié du cours, travaux dirigés et travaux pratiques
Page 108: Polycopié du cours, travaux dirigés et travaux pratiques
Page 109: Polycopié du cours, travaux dirigés et travaux pratiques
Page 110: Polycopié du cours, travaux dirigés et travaux pratiques
Page 111: Polycopié du cours, travaux dirigés et travaux pratiques
Page 112: Polycopié du cours, travaux dirigés et travaux pratiques
Page 113: Polycopié du cours, travaux dirigés et travaux pratiques
Page 114: Polycopié du cours, travaux dirigés et travaux pratiques
Page 115: Polycopié du cours, travaux dirigés et travaux pratiques
Page 116: Polycopié du cours, travaux dirigés et travaux pratiques
Page 117: Polycopié du cours, travaux dirigés et travaux pratiques