Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Sommaire 1 Introduction Présentation Évaluation Calendrier Biblio Historique 2 Types Types simples Opérateurs 3 Structures de contrôle 4 Exemple
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Présentation du module Module avancé (niveau 200) Objectifs principaux: Gestion explicite de la mémoire Structure de données autoréférentielles: listes, piles, arbres, graphes Itinéraire: Notions d algorithmique Manipulation de fichiers Interfaces graphiques Pensez à vous inscrire...
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Évaluation 60% pour l examen final 40% pour le contrôle continu 10% partiel 10% projet 10% pour le TME solitaire 10% pour l appréciation en TD/TME
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Calendrier 12 semaines de cours, 12 semaines de TD/TME Les TD/TME commencent la semaine du 14 février Le dernier TD a lieu la semaine du 23 mai 2005 Les partiels auront lieu la semaine du 21 mars TME solitaire la semaine du 11 avril
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Calendrier Semaines 1 et 2: révisions Introduction Types Structures de contrôle Expressions Fonctions Fonctions récursives Passages de paramètres
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Calendrier Semaines 3 et 4: pointeurs & structures introduction aux pointeurs manipulations et utilisations des pointeurs allocation dynamique structures
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Calendrier Semaines 5, 6 et 7: Structures autoréférentielles introduction aux structures autoréférentielles listes chaînées arbres tables de hachage...
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Calendrier Semaines 8 à 12: projet Scrabble Interface graphique donnée... Manipulation du chevalet et du damier Gestion du dictionnaire Implémentation d un joueur artificiel
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Bibliographie et outils Le langage C: norme ANSI. Brian W. Kernighan & Denis M. Ritchie, Dunod Programmer en langage C. Claude Delannoy, Eyrolles C: a reference manual. Samuel P. Harbison & Guy L. Steele Jr., Prentice Hall C: a software engineering approach. Peter A. Darnell & Philip E. Margolis, Springer... Environnement: Linux. Outils informatiques utilisés: éditeurs: emacs/vi/gvim/gedit compilateur: gcc débogueur: gdb, ddd
Introduction Types Structures de contrôle Exemple Présentation Évaluation Calendrier Biblio Historique Le Langage C Le langage C a été inventé en 1972 par Dennis Ritchie et Ken Thompson (AT&T Bell Laboratories) pour réécrire Unix et développer des programmes sous Unix. En 1978, Brian Kernighan et Dennis Ritchie publient la définition classique du C dans le livre The C Programming language. C est une norme ANSI (ANSI-C) depuis 1989 et un standard ISO depuis 1990. C fait partie de la famille des langages impératifs Toutes les distributions Linux fournissent des compilateurs C.
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Types
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Types entiers Type Signification Taille (o) Plage de valeurs char Caractère 1-128 à 127 unsigned char Caractère 1 0 à 255 short int Entier court 2-32768 à 32767 uns. short int Entier court non s. 2 0 à 65535 int Entier 2 (16 b) -32768 à 32767 4 (32 et 64 b) -2 147 483 648 à 2 147 483 647 unsigned int Entier non signé 2 (16 b) 0 à 65 535 4 (32 et 64 b) 0 à 4 294 967 295 long int Entier long 4-2 147 483 648 à 2 147 483 647 8 (64 b) -9 223 372 036 854 775 080 à 9 223 372 036 854 775 807 uns. long int Entier long non s. 4 0 à 4 294 967 295
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Types à virgule flottante Représentation: signe mantisse base exposant Plage de valeurs donnée pour un système Linux (non normalisé). Type Signification Taille (o) Plage de valeurs float Simple précision 4 +/- 1.175494e-38 à 3.402823e+38 double Double précision 8 +/- 2.225074e-308 à 1.797693e+308 long double Double préc. long 12 +/- 3.362103e-4932 à 1.189731e+4932
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Types à virgule flottante ATTENTION: les flottants sont représentés de manière approchée. Conséquences: L associativité n est plus assurée: a + (b + c) = (a + b) + c Valeur approchée d une somme et somme de valeurs approchées Tests: f l o a t x =0.1, y =0.1; i f ( x+y == 0.2) / peut e t r e v r a i ou f a u x /...
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Caractères il n y a pas vraiment de type Caractères le type char est un type entier (on peut l utiliser pour les calculs) prenant un octet. un caractère est représenté par un entier ; la correspondance (code/caractère) est établie par la table ASCII.Exemple: char c= a ; p r i n t f ( c= %c %d\n, c, c ) ; Donne: c= a 97
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Chaînes de caractères Pas de type string en C mais on utilise la notation. Exemple : p r i n t f ( b o n j o u r ) ; correspond à la déclaration d un tableau de char initialisé avec les codes ASCII (dans la section rodata). En cas de besoin d une variable de type chaîne de caractères, on déclare un tableau de char: char message1 [8]= b o n j o u r ; / 7 l e t t r e s e t \ 0 a l a f i n / char message2 []= b o n j o u r ; p r i n t f ( %s \n, message1 ) ; p r i n t f ( %s \n, message2 ) ;
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Type enuméré Permet de définir une constante énumérée. Exemple : enum mois {JAN = 1, FEV, MAR,... } ; enum mois m=3; enum mois n=jan ; i f ( m == MAR ) { p r i n t f ( m=mar\n ) ; }
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Tableaux Permet de stocker dans un espace mémoire contigu des éléments de même type. i n t T1 [ 3 ] = { 2, 1, 5 } ; i n t T2 [ ] = { 4, 1, 5 } ; i n t T2 [ ] ; i m p o s s i b l e! char TC[ 3 ] [ 2 ] = { {, }, {, }, {, } } ; char message1 []= b o n j o u r ; char message2 [8]= b o n j o u r ;
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Opérateurs Par ordre de précédence: -. référence: () [] ->. -. unaire:! ~ ++ -- + - * & (type) sizeof -. arithmétique: * / % -. arithmétique: + - -. décalage: << >> -. relationnels: < <= > >= -. relationnels: ==!= -. manipulation de bits: & -. manipulation de bits: ^ -. manipulation de bits: -. logique: && -. logique: -. conditionnel:?: -. affectation: = += -= *= /= %= &= ^= = <<= >>=
Introduction Types Structures de contrôle Exemple Types simples Opérateurs Opérateurs Exemples
Introduction Types Structures de contrôle Exemple Structures de contrôle
Introduction Types Structures de contrôle Exemple if i f ( e x p r e s s i o n ) { i n s t r u c t i o n s ; } e l s e { i n s t r u c t i o n s ; }
Introduction Types Structures de contrôle Exemple switch switch ( e x p r e s s i o n ) { case e x p r e s s i o n c o n s t a n t e : i n s t r u c t i o n s ; case e x p r e s s i o n c o n s t a n t e : i n s t r u c t i o n s ; d e f a u l t : i n s t r u c t i o n s ; } ATTENTION au break...
Introduction Types Structures de contrôle Exemple while while ( e x p r e s s i o n ) { i n s t r u c t i o n s ; }
Introduction Types Structures de contrôle Exemple for f o r ( e x p r e s s i o n 1 ; e x p r e s s i o n 2 ; e x p r e s s i o n 3 ) { i n s t r u c t i o n s ; } équivaut à : e x p r e s s i o n 1 ; while ( e x p r e s s i o n 2 ) { i n s t r u c t i o n s ; e x p r e s s i o n 3 ; }
Introduction Types Structures de contrôle Exemple do while très proche du while avec test à la fin: do { i n s t r u c t i o n s ; } while ( e x p r e s s i o n ) ;
Introduction Types Structures de contrôle Exemple perturbation du déroulement des boucles break : interrompt une boucle continue : passe à l itération suivante goto : existe, mais INTERDIT!!
Introduction Types Structures de contrôle Exemple Exemple
Introduction Types Structures de contrôle Exemple Présentation du problème Construction d une bibliothèque besoin de planches de longueur variée (largeur unique) planches vendues dans le commerce de longueur unique: 2 mètres Problème: combien de planches acheter pour pouvoir couper toutes les planches souhaitées? 3 2 1
Introduction Types Structures de contrôle Exemple Algorithme choisi (1 ere version) Hypothèse simplificatrice: 3 planches maximum à découper par planche du commerce. Tant qu il reste des planches à découper Initialiser max à 0 Pour toutes les combinaisons de 3 planches à découper Est-ce qu il reste des planches de ces longueurs à couper? Est-ce que la longueur est inférieure à 2m Si la longueur est supérieure au max, on met à jour le max Fin pour Mise à jour du nombre de planches restantes Afficher résultat Fin tant que
Introduction Types Structures de contrôle Exemple Variables / P l a n c h e s n e c e s s a i r e s / unsigned short i n t l g p l [ PLN ] = { 1 0 7 0, 1 0 5 2,... } ; short i n t n b p l [ PLN ] = { 6, 2, 2, 4, 6, 4,... } ; / i n d i c e s dans l e s t a b l e a u x de p l a n c h e s / i n t mi, mj, mk ; unsigned i n t cumul =0; unsigned i n t max cumul ; unsigned i n t l t =0; short n b p l t =0; i n t i, j, k, l ; unsigned i n t t o t a l p l =0;
Introduction Types Structures de contrôle Exemple Boucle principale max cumul = 0 ; mi= 1;mj= 1;mk= 1; f o r ( l =0; l <PLN PLN PLN ; l ++) { i=l /(PLN PLN ) ; j =( l /PLN)%PLN ; k=l%pln ; i f ( ( n b p l [ i ] <= 0) ( n b p l [ j ] < = 0 ) ( n b p l [ k ] <= 0)) continue ; cumul = l g p l [ i ] + l g p l [ j ] + l g p l [ k ] ; i f ( cumul > LGP ) continue ; i f ( cumul > max cumul ) { max cumul = cumul ; mi=i ; mj=j ; mk=k ; } i f ( cumul == LGP ) break ; }
Introduction Types Structures de contrôle Exemple C est tout pour aujourd hui!