1 / 84

David TADDEI

David TADDEI. ALGORITHMIQUE ET PROGRAMMATION C. Plan du Cours. Introduction Notions d’algorithmique (algèbre de Boole…) Eléments de base du langage C (types, variables…) Tests, itérations… Fonctions Récursivité Algorithmes : complexité, tris... Gestion dynamique de la mémoire

boyd
Download Presentation

David TADDEI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. David TADDEI ALGORITHMIQUE ET PROGRAMMATION C

  2. Plan du Cours • Introduction • Notions d’algorithmique (algèbre de Boole…) • Eléments de base du langage C (types, variables…) • Tests, itérations… • Fonctions • Récursivité • Algorithmes : complexité, tris... • Gestion dynamique de la mémoire • Listes, piles, arbres... • Fichiers

  3. Introduction • Fiabilité : Validité et Robustesse • Efficacité • Maintenance, Evolutivité • Modularité • Réutisabilité (partielle ou totale) • Compatibilité • Portabilité • Ergonomie • Intégrité

  4. Introduction Cahier des charges Modélisation Algorithmes Implémentation

  5. Notions d’algorithmique • Ensemble des activités logiques qui relèvent des algorithmes (science des algorithmes) • un algorithme est un énoncé dans un langage bien défini d’une suite d’opérations permettant de résoudre par calcul un problème • types d’algorithmes : • séquentiel • parallèle • distribué

  6. Notions d’algorithmique • Variable • Un identifiant • Un type (entier, réel, booléen, caractère, chaîne de caractères, tableaux) avec des opérations associées • Une valeur (information)

  7. Notions d’algorithmique • Instruction • traitement(s) portant sur les variables • Affectation, condition, boucles • Fonction • Algorithme autonome réalisant une tâche précise • Accepte des paramètres, retourne une valeur • Contient une Entête (prototype)

  8. fonction somme (n:entier,tab:tableau entier[0..n-1]) : entier début s<-0 pour i de 0 à (n-1) faire s <- s+tab[i] fpour retourne s fin Lexique : - n : entier, nombre d'entiers - tab : tableau entier[0..n-1] - s : entier, somme temporaire Algorithme début nb <- lire () si (nb>0) alors remplir (nb,t) ; écrire (somme(nb,t) ; fsi fin Lexique : - t : tableau entier[0..n-1] - nb : entier, nombre d'entiers

  9. Notions d’algorithmique Définition du problème Décomposition en sous problèmes Recensement des variables Ecriture de l’algorithme Test de l’algorithme Ecriture du programme Test du programme

  10. Algèbre de Boole • Georges Boole (1815 – 1864), mathématicien anglais • Algèbre traduisant des signaux en expressions mathématiques • Algèbre de la pensée s’appuyant sur une logique binaire • Un signal : variables logiques • Un traitement : fonctions logiques

  11. Fonctions logiques de base • Variable logique : entrée binaire • Fonction logique : plusieurs variables logiques en entrée et sortie • Porte : fonction logique de base • OU : OR : + (expression algébrique) • ET : AND : . • OU EXCLUSIF : XOR : • NON : NO : /A,

  12. Table De Vérité

  13. Algèbre de Boole • Egalité : 0 = 0 ; 1 = 1 • Négation : /0 = 1 ; /1 = 0 • Multiplication : A.B

  14. Lois de composition (règles logiques) • Associativité : • (A.B).C  A.(B.C) • (A+B)+C  A+(B+C) • Absorption : • A.(A+B)  A • A+(A.B)  A • Commutativité : • A.B  B.A • A+B  B+A • Distributivité : • A+(B.C)  (A+B).(A+C) • A.(B+C)  (A.B)+(A.C) • Idempotence : • A.A  A • A+A  A

  15. Lois de composition (règles logiques) • Identité : • 1.A  A • 0+A  A • Inversion : • A./A  0 • A+/A  1 • Nullité : • 0.A  0 • 1+A  1 • Théorème de Morgan : • /(A.B)  /A+/B • /(A+B)  /A./B

  16. Exemple de circuit • Additionneur : A + B • En arithmétique binaire : S = A B ; R = A.B

  17. Exemple de circuit

  18. Petit panorama des langages Source : http://developpeur.journaldunet.com

  19. Critères pour le choix d’un langage • Clarté • Spécificité • Ouverture • Ancienneté • Popularité

  20. http://www.tiobe.com/tpci.htm

  21. Genèse du C • 1972 : mis au point dans les laboratoires BELL en même temps qu’UNIX ; basé sur Algo -> BCPL -> B • 1989 norme ANSI C (ou C89) puis C99… la dernière date de 2003 Kenneth Thompson et Dennis Ritchie

  22. Avantages • Simplicité • Possibilités • Performances (compilé ; très proche du processeur) • Très utilisé (notamment dans le monde Unix) • Portabilité • Légèreté (noyau très simple)

  23. Inconvénients • il est très facile d’écrire du code illisible • Bonne maîtrise des pointeurs requise • pas de « garde-fous » • Mise au point plus délicate pour les programmes faisant intervenir des données complexes (bibliothèques) => C++

  24. C’est du C ! main(void) { int x=3,n,m=2,*t,*a,*b=0; while(b?o:((*(t=b=(int*)malloc(o))=2),a=t+1,o))n=*b,n>=m?c:x%n?(int)b++:N); }

  25. Compilateurs C • GCC : Gnu Compiler Collection • Dev C++ • Borland C++ Builder (Kylix) • Visual Studio, .Net • Et aussi : compilateurs de Watcom, Symantec

  26. Eléments de base du langage C • Structure générale d’un programme • Considérations lexicales : Mots-clés, Identificateurs • Commentaires • Variables • Types de base • Constantes • Chaînes de caractères • Constantes nommées : #define, Enumérations • Opérateurs usuels • Instructions • Fonctions • Objets structurés : Tableaux, Structures • Directives du Préprocesseur • Bibliothèque standard

  27. Programme minimal #include <stdio.h> int main(void) { /* affichage d’un texte */ printf ("Hello World\n"); return 0; }

  28. Génération du programme • Préprocesseur • Compilation • Assemblage • Edition de liens Editeur de liens Code C Compilateur Code machine

  29. Autre exemple de programme #include <stdio.h> #define TVA 0.196f void main () { float fPrixHT , fPrixTTC ; puts ("Veuillez entrer le prix H.T. :"); scanf ("%f",&fPrixHT); fPrixTTC = fPrixHT*(1+TVA) ; printf ("Voici le prix T.T.C. : %f €\n",fPrixTTC); }

  30. Généralités • Structure d’un programme : • Directives de compilation, déclarations globales (variables, types, fonctions), fonctions • Une fonction : entête, bloc • Un bloc : déclarations locales, instructions

  31. Considérations lexicales • Commentaires • Identificateurs • Séparateurs • Mots-clés

  32. Types de base du C • Entier : int, long, short • Réel : float, double • Caractère : char

  33. Types de base du C • char 8 bits Caractère • short 16 bits Nombre entier signé • int 16, 32 bits Nombre entier signé • long 32 ou 64 bits Nombre entier signé • float 32 bits Nombre flottant • double 64 ou 80 bits ou plus Nombre flottant sizeof : taille d'un type ou variable Rappel : 2^8 = 256

  34. Typedef • typedeftype-declaration synonym ; • Exemple : définition du type byte

  35. Définition de variables

  36. Définition de variables <type> <identificateur>[,<identificateur>,...]; Les tableaux statiques int tiTab2D[4][3]; int iTableau[] = {2,-1,3}; comment stocker une image 320x200 en 256 couleurs ? Les chaînes de caractères char chaine[taille]; char chaine[] = ‘texte‘ ; char chaine[] = {‘t',‘e',’x’...} le dernier caractère est '\0' premier indice : 0

  37. Variables • Visibilité des variables • Variables statiques • static int count = 0 ; • Variables constantes et volatiles (ne figurent pas dans le C d’origine) • Variables externes

  38. Variables : portée Programme Programme

  39. Variables int i = 3; /* i est accessible de tous les fichiers */ const int j = 5; /* Synonyme de static const int j = 5; */ extern const int k; /* déclaration de la variable k... */ const int k = 7 ; /* définition. */

  40. Opérateurs • Arithmétiques : +, -, *… • Relation : ==, <, >=… • Logique : !, &&, ||… • Affection : = • Condition : <exp1>?<exp2>:<exp3>

  41. Opérateurs simples • Lvalue : adresse, type, valeur • ne sont pas des Lvalue : constantes, tableaux, fonctions • Rvalue : type, valeur

  42. Opérateurs simples • () : appel de fonction • [] : indexation • . : sélection dans une structure • -> : sélection dans un objet pointé • ! : négation • ~ : négation bit à bit • - : moins unaire • * : indirection (accès à un objet pointé) • & : adresse d’une variable

  43. Symboles composés • ++ : pré et post incrémentation • Opérateurs arithmétiques • Opérateurs d’affectation • Comparaisons

  44. Symboles composés • >> et << : décalage de bits • & | ^ : opérateurs de bits • Connecteurs logiques : &&, || • Expression conditionnelle ? :

  45. Ordre de priorité =>Mettre des parenthèses !!

  46. Exemples • x=(7+6)%5/2; • x = 10 ; x *= y = z = 4 ; • x=1 ; y = x++ ; z = ++x ; • x=0;x++;++x; • x=y=z=0 ; x += y += 5 * ++ z ; • x=y=0;z=2;x = x && y || z ; • x = 1 ; y = 3 ; z = ( x < y ? x++ + ++y : 0 ) ;

  47. Exemples • x=(7+6)%5/2=((7+6)%5)2=(13%5)/2=3/2; • = 1 si x est de type entier • = 1.5 si x est de type flottant et / 2.0f • y = 4 ; z = 4 ; x = x * 10 ; • x=1 ; y = x = 1 ; x++ ; x++ ; z = x =3 ; • x=x+1=1;x=x+1=2; • z=z+1=1; y = y + 5 * z = 5 ; x = x + y = 5; • x=(x && y) || z = 0 || 2 = 1 ; • x=x+1=2 ; z = x + y = 5 ; y = y + 1 = 4 ;

More Related