Pensez à vous inscrire... si ce n est pas encore fait

Dimension: px
Commencer à balayer dès la page:

Download "Pensez à vous inscrire... si ce n est pas encore fait"

Transcription

1 Sommaire UE C avancé cours 1: introduction Jean-Lou Desbarbieux et Stéphane Doncieux LI215 Licence Informatique UMPC 2013/2014 Introduction Présentation Évaluation Calendrier Biblio Intro au C Types Types simples Opérateurs Structures de contrôle Fonctions Présentation du module Évaluation Module avancé (niveau 200) Objectifs principaux : Gestion explicite de la mémoire Structure de données autoréférentielles : liste, pile, arbres Itinéraire : Notions d algorithmique Manipulation de fichiers Pensez à vous inscrire si ce n est pas encore fait 60% pour l examen final 40% pour le contrôle continu 20% partiel 20% pour l appréciation en TD/TME (corrections automatiques, mini-projets, appréciation générale)

2 Calendrier Calendrier 11 semaines de cours, 11 semaines de TD/TME Les TD/TME commencent les jeudi et vendredi de la semaine du 9 septembre 2013 Le dernier TD a lieu la semaine du 9 décembre 2013 Le partiel aura lieu entre le 4 novembre 2013 L examem aura lieu la semaine du 6 janvier 2014 Semaine 1. Révisions (?) Introduction Types Expressions printf Fonctions Fonctions récursives Passages de paramètres Calendrier Calendrier Semaine 2. Découpage d un programme Compilation Environnement (Makefile, gcc, ddd) Chaînes de caractères Semaine 3. pointeurs manipulations et utilisations des pointeurs allocation dynamique Semaines 4. structures fichiers Semaines 5. entrées/sorties retour sur les chaînes de caractères

3 Calendrier Bibliographie et outils Semaines 6. Respiration Semaine 7. Listes chaînées Semaine 8. Arbres Semaine 9. Arbres bis Semaine 10. Tables de hachage Semaine 11. Ouverture et/ou révisions et conclusion du cours 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 Le Langage C : historique Introduction au 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, standard étendu en 1999 (C99) et en 2011 (C11). Toutes les distributions Linux fournissent des compilateurs C. Caractéristiques du langage : impératif bas-niveau (peu) typé

4 Écrire un message à l écran Utiliser la fonction int printf(const char *format,...) : p r i n t f ( Bonjour, bienvenue a l UE LI215 annee 2009/2010!\n ) ; i n t n=215; i n t an1=2010,an2=2011; p r i n t f ( Bonjour, bienvenue a l UE LI%d! \ n annee %d/%d, n, an1, an2 ) ; Quelques codes de format utiles : %d : entier %c : caractère %s : chaîne de caractères %f : nombre réel ATTENTION : pour utiliser printf, il faut ajouter la ligne suivante au tout début du fichier source : #include <stdio.h> Introduction au langage C Exemple de programme : fichier welcome.c #include<s t d i o. h> i n t main ( void ) i n t annee=2010; i n t nue=215; p r i n t f ( Bonjour, bienvenue a l UE LI%d annee %d/%d! \ n, nue, annee, annee + 1 ) ; return 0; Compilation gcc -o welcome welcome.c Exécution./welcome Nous y reviendrons plus tard... Types entiers Types Type Signification Taille (o) Plage de valeurs char Caractère à 127 unsigned char Caractère 1 0 à 255 short int Entier court à uns. short int Entier court non s. 2 0 à int Entier 2 (16 b) à (32 et 64 b) à unsigned int Entier non signé 2 (16 b) 0 à (32 et 64 b) 0 à long int Entier long à (64 b) à uns. long int Entier long non s. 4 0 à

5 Types à virgule flottante 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 +/ e-38 à e+38 double Double précision 8 +/ e-308 à e+308 long double Double préc. long 12 +/ e-4932 à e+4932 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 faux /... Caractères Chaînes de caractères il n y a pas vraiment de type Caractères le type char est 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 Pas de type string en C mais on utilise la notation. Exemple : p r i n t f ( bonjour ) ; 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 ] = bonjour ; / 7 l e t t r e s et \ 0 a l a f i n / char message2 [ ] = bonjour ; p r i n t f ( %s\n, message1 ) ; p r i n t f ( %s\n, message2 ) ;

6 Type enuméré Tableaux 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 ) ; 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 [ ] ; impossible! char message1 [ ] = bonjour ; char message2 [ 8 ] = bonjour ; / tableau a p l u s i e u r s dimensions / char TC[ 3 ] [ 2 ] = a, b, c, d, e, f ; 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: = += -= *= /= %= &= ˆ= = <<= >>= Structures de contrôle

7 if switch i f ( expression ) i n s t r u c t i o n s ; else i n s t r u c t i o n s ; switch ( expression ) case expression constante : i n s t r u c t i o n s ; case expression constante : i n s t r u c t i o n s ; default : i n s t r u c t i o n s ATTENTION au break... while for while ( expression ) i n s t r u c t i o n s ; for ( expression1 ; expression2 ; expression3 ) i n s t r u c t i o n s ; equivaut à : expression1 ; while ( expression2 ) i n s t r u c t i o n s ; expression3 ;

8 do while perturbation du déroulement des boucles très proche du while avec test à la fin : do i n s t r u c t i o n s ; while ( expression ) ; break : interrompt une boucle continue : passe à l itération suivante goto : existe, mais INTERDIT!! Fonctions Exemple Sert à regrouper des instructions dans un même bloc. Intérêt : Simplifier la lecture et la compréhension d un programme en le découpant proprement Maximiser la réutilisation de code i n t main ( ) i n t i, n=1,m=10; for ( i =2; i <=m; i ++) n = i ; i n t f a c t o r i e l l e ( i n t m) i n t i, n=1; for ( i =2; i <=m; i ++) n = i ; return n ; i n t main ( ) i n t n= f a c t o r i e l l e ( 1 0 ) ;

9 Déclaration de fonctions : notion de prototype Valeur de retour Le prototype d une fonction précise : 1. la valeur de retour 2. le nom de la fonction 3. le type des arguments Exemples : i n t f a c t o r i e l l e ( i n t ) ; f l o a t a i r e r e c t a n g l e ( f l o a t l, f l o a t d ) ; De type quelconque sauf tableau... valeur renvoyée par l instruction return i n t f a c t o r i e l l e ( i n t m) i n t i, n=1; i f (m==0) return 1; for ( i =2; i <=m; i ++) n = i ; return n ; Arguments Portée d une déclaration De type quelconque. Dans un prototype, les identificateurs de variable n ont aucune signification pour le compilateur (mais peuvent faire comprendre au lecteur à quoi servent les arguments...). ATTENTION au cas des tableaux : Spécifier la taille d un tableau passé en argument ne sert à rien, le compilateur ne la regarde même pas... Sauf dans le cas d un tableau à plusieurs dimensions! Il n y a aucun moyen de connaître la taille du tableau dans la fonction. Elle doit être définie comme variable globale ou passée en argument! Explications plus tard... Comme pour une variable... Cas 1 : i n t f ( i n t ) ; i n t g ( i n t i ) / f est connue / i n t f ( i n t i )... i n t h ( i n t i ) / f est connue / Cas 2 : i n t g ( i n t i ) / f n est pas connue / i n t f ( i n t ) ; i n t h ( i n t i ) / f est connue / i n t f ( i n t i )...

10 Le type void Passage de paramètres Passage par valeur 1. Lorsqu une fonction ne doit pas renvoyer de valeur. Exemple : void afficher resultats(float f[10]); Peut être vu comme une procédure. 2. Lorsqu une fonction ne prend pas d arguments. Exemple : void effacer ecran(void); Peut se déclarer aussi : void effacer ecran(); void f ( i n t n ) n=n +1; i n t main ( void ) i n t i =2; p r i n t f ( 1: i=%d, i ) ; f ( i ) ; p r i n t f ( 2: i=%d, i ) ; Donne le résultat suivant : 1: i =2 2: i =2 Comment faire si on veut que les modifications réalisées dans la fonction ne soient pas perdues? réponse plus tard! ATTENTION au cas des tableaux : ils ne sont pas transmis par valeur... Pourquoi? réponse plus tard! Fonctions de la libc Beaucoup de fonctions à connaître : gestion des fichiers, des chaînes de caractères,... retenir dans un premier temps le nom uniquement faire des fiches ou savoir retrouver rapidement l information dans un livre (droit aux documents pendant partiel et examen!) sur ordinateur, dans un terminal, taper : man 3 <nom de fonction> (touche q pour sortir) Exemple

11 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? Algorithme choisi 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 Algorithme choisi (2 eme version) Calcul par récurrence. Fonction récurrente utilisée : Si la longueur restante est trop petite: on arrête S il ne reste plus de planches: on arrête Pour toutes les planches restantes Longueur restante=appel recursif Si Longueur restante<min longueur restante On enregistre le nouveau min On renvoie le min.

12 Sommaire UE C avancé cours 2: découpage, compilation et débogage et chaînes de caractères Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2013/2014 Découpage d un programme et compilation Outils Chaînes de caractères.h,.c : fichiers de source multiples Découpage d un programme Le code peut être divisé entre plusieurs fichiers sources disctincts qui ne seront assemblés que dans la dernière étape de création d un exécutable. Pour pouvoir utiliser des fonctions disponibles dans d autres fichiers, on doit définir la signature de la fonction que l on souhaite réutiliser Pour pouvoir utiliser des variables définies dans d autres fichiers, il faut déclarer le type et le nom de la variable précédés du mot clé extern Ces déclarations de variables et de fonctions peuvent être regroupées dans un fichier header (.h). Ces headers sont ensuite inclus dans tous les fichiers sources grâce à la macro #include

13 .h,.c : exemple compilation, macros et préprocesseur Fichier mes fonctions.h : extern f l o a t ma variable ; i n t ma fonction1 ( int, f l o a t ) ; void ma fonction2 ( f l o a t, char [ 1 0 ] ) ; Fichier mes fonctions.c : f l o a t ma variable =12.; i n t ma fonction1 ( int, f l o a t )... void ma fonction2 ( f l o a t, char [ 1 0 ] )... Fichier mon programme.c, utilisant les fonctions définies dans mes fonctions.c : #include mes fonctions. h i n t main ( ) i n t i =0, j ; f l o a t f =ma variable ; j =ma fonction1 ( i, f ) ;... Les étapes permettant de passer d un fichier source à un executable : Traitement de chaque fichier source indépendamment : prétraitement : gestion des macros et autres directives au preprocesseur compilation : transformation du source obtenu en un fichier objet Édition des liens entre les fichiers objets pour générer la bibliothèque ou l exécutable. compilation, macros et préprocesseur : exemple compilation, macros et préprocesseur : macros Compilation de l exemple précédent : Un header : mes fonctions.h Deux fichiers sources : mes fonctions.c, mon programme.c 1. preprocessing et compilation des sources : gcc -c -o mes fonctions.o mes fonctions.c gcc -c -o mon programme.o mon programme.c 2. édition des liens : gcc -o mon programme mon programme.o mes fonctions.o (pas de traitement à faire sur le header, il sera inclus dans les fichiers.c par la macro #include par le préprocesseur) Intructions exécutées avant compilation. #define association d une étiquette à une valeur #include inclusion d un fichier #ifdef... #endif ou #ifndef

14 Qualifieurs : extern Qualifieurs : const Indique au compilateur qu une variable a été déclarée dans un autre fichier source Unicité de la variable : pas de nouvelle réservation d espace mémoire. Déclaration d une variable constante : const <type> <nom de variable> Exemple : const i n t i =3; const f l o a t x = ; Portée des variables Variables globales : partout après leur définition Si précédée de extern : déclarée effectivement dans un autre fichier, mais peut être ensuite manipulée comme si décrite dans le même fichier Variables locales : de leur déclaration à la fin du bloc. Outils

15 GCC Déboggage : GDB &DDD Préprocesseur, compilateur, éditeur de lien selon les options. gcc [options] source1.c source2.c... Options couramment utilisées : -c : ne pas faire l édition de lien -o fichier sortie : nom du fichier de destination (fichier.o ou exécutable selon les cas). Si non spécifié, a.out pour un exécutable, source.o pour un fichier objet. -Wall : affiche tous les warnings -g : inclure les informations de debogage Pour information : -E : ne fait que le prétraitement et envoie le résultat sur la sortie standard. Le programme doit être compilé avec l option -g ddd interface graphique pour gdb Permet d exécuter pas à pas. Permet de poser des points d arrêt. Permet d observer les variables. Déboggage mémoire : electricfence & valgrind ElectricFence Bibliothèque remplaçant les fonctions C de gestion de la mémoire Objectifs : faciliter la détection de débordements en mémoire d utilisation de mémoire libérée Utilisation : gcc -lefence -o monprog monprog.c Valgrind Logiciel permettant (entre autres) de vérifier l utilisation de la mémoire : Détecte : l utilisation de variables non initialisées l utilisation de mémoire libérée les fuites mémoires Utilisation : valgrind./monprog Makefile À quoi ça sert : simplifier la compilation, prendre en compte automatiquement les dépendances... Exemple de makefile a l l : mon programme mes fonctions. o : mes fonctions. h mes fonctions. c gcc c o mes fonctions. o mes fonctions. c mon programme. o : mon programme. c mes fonctions. h gcc c o mon programme. o mon programme. c mon programme : mon programme. o mes fonctions. o gcc o mon programme mon programme. o mes fonctions. o clean : rm f. o mon programme

16 Chaînes de caractères : représentation en mémoire Chaînes de caractères Dans un tableau, terminé par un \0 Exemple : char nom [ ] = david ; char nom2[ 7 ] = g o l i a t h ; / i l manque une case pour \ 0 / char nom3 [ ] = david \0 g o l i a t h ; p r i n t f ( nom2=%s\n,nom2 ) ; / r e s u l t a t? / p r i n t f ( nom3=%s\n,nom3 ) ; / r e s u l t a t? / Quelques fonctions utiles : strlen Quelques fonctions utiles : strcmp #include <s t r i n g. h> #include <s t r i n g. h> s i z e t s t r l e n ( const char s ) ; Renvoie la longueur d une chaîne de caractères. Remarque : le type char * correspond à un tableau sur char. i n t strcmp ( const char s1, const char s2 ) ; i n t strncmp ( const char s1, const char s2, s i z e t n ) ; Comparaison entre chaînes de caractères. La valeur de retour est : 0 si les deux chaînes sont égales négative si s1 arrive avant s2 positive sinon

17 Quelques fonctions utiles : strcpy #include <s t r i n g. h> char s t r c p y ( char dest, const char src ) ; char strncpy ( char dest, const char src, s i z e t n ) ; Copie entre deux chaînes de caractères. Renvoie un pointeur sur dest.

18 Sommaire UE C avancé cours 3: pointeurs Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2013/2014 Déclaration Déclaration et initialisation Exemples d utilisation des pointeurs Le pointeur NULL Remarques Manipulations d un pointeur Manipulation directe des pointeurs Manipulation de la donnée pointée Affectation entre pointeurs Tableaux & Pointeurs Allocation Vous avez dit pointeurs? Exemple Les variables utilisées par un programme sont stockées en mémoire à une adresse donnée. Les pointeurs permettent de manipuler ces adresses directement. Ce sont des variables qui vont contenir une adresse mémoire. Dans quel but? Exemples d utilisation : modifier la valeur d un paramètre d une fonction allouer de la mémoire dynamiquement créer des structures complexes, autoréférentes (listes chaînées)... i n t i =2, j =36,k=124; i n t l =& i ; 0x1234 0x1238 0x123C 0x x1234 Dans cet exemple, l contient l adresse de la variable i. i j k l

19 Déclaration et initialisation Exemple : passage de paramètres à une fonction Déclaration : on ajoute * au type de la donnée pointée. Exemples : int *i; char *c; L adresse d une variable est récupérée grâce à l opérateur &. Exemple : i n t i =2; i n t l ; / l est un p o i n t e u r sur e n t i e r / l =& i ; / l pointe sur i / La valeur stockée en mémoire à l adresse indiquée par un pointeur peut être récupérée grâce à l opérateur * (on parle de déréférenciation). Ex : i n t i =2; i n t l =& i ; / l est un p o i n t e u r sur i / l =3; / l a valeur de i passe a 3 / Passage par valeur void f ( i n t n ) n=n +1; i n t main ( void ) i n t i =2; p r i n t f ( 1: i=%d, i ) ; f ( i ) ; p r i n t f ( 2: i=%d, i ) ; Donne le résultat suivant : 1: i =2 2: i =2 Exemple : passage de paramètres à une fonction Le pointeur NULL Passage par référence void f ( i n t n ) n= n +1; i n t main ( void ) i n t i =2; p r i n t f ( 1: i=%d, i ) ; f (& i ) ; p r i n t f ( 2: i=%d, i ) ; Donne le résultat suivant : 1: i =2 2: i =3 NULL (ou 0) est une valeur spéciale pour un pointeur. C est une valeur, par définition, qui ne pointe pas sur une zone mémoire valide. Peut-être utilisé pour indiquer qu un pointeur n est pas encore initialisé. Exemple d utilisation : i n t p=null ;... i f ( p==null) p r i n t f ( p n a pas ete i n i t i a l i s e! \ n ) ;

20 Les pointeurs de pointeurs de... Astuce i n t i =3; i n t j =& i ; i n t k=& j ; 0x1234 0x x1234 0x1238 k est un pointeur de pointeur sur entier. Il contient donc l adresse d une variable contenant l adresse d une variable de type int. Il est également possible de définir des pointeurs de pointeurs de pointeurs sur une type donné et ainsi de suite... i j k Pour retrouver à quoi correspond un pointeur, il faut lire les éléments composant sa déclaration de droite à gauche : int *i est un pointeur (*) sur entier (int). const int *i est un pointeur (*) sur entier constant (const int). char **i est un pointeur sur un pointeur sur char Types Addition/soustraction d un entier à un pointeur Les pointeurs sont typés : i n t i =3; f l o a t p=& i ; / genere un warning / Pointeur générique : void *. pointeur non typé ne peut être déréférencé doit être casté en un type défini i n t i =3; void p=& i ; i n t q=p ; p=4; / i n t e r d i t / q=4; / a u t o r i s e / i n t i =3; i n t p=& i ; p=p +1; ATTENTION : en pratique, lorsque l on fait p=p+1 on ajoute sizeof(int) à p... Sur IA32, on ajoute en fait 4 à p. Si p est un pointeur sur double, p=p+1 incrémente p de 8. Simplifie l utilisation des pointeurs, p+1 pointe sur l élément directement après celui pointé par p, sans avoir besoin de se préoccuper de sa taille.

21 Manipulation de la donnée pointée Affectation entre pointeurs Le pointeur déréférencé peut se manipuler comme la donnée pointée : i n t i =3; i n t j =& i ; ( j )++; / incremente i de 1 / ( j ++); / incremente j de 1 / j = j / 10 / d i v i s e i par 10 / i n t i =3; i n t j =& i ; i n t k ; k= j ; Il est possible d affecter à un pointeur la valeur d un autre pointeur de même type. Tableaux & Pointeurs Une référence à un tableau est équivalente à un pointeur constant sur son premier élément! i n t a [ 1 0 ] ; i n t b=a ; a b &a[0] &b[0] Exception : sizeof (a) sizeof (&a[0]). sizeof(a) rend la taille du tableau, soit 10*sizeof(int) alors que sizeof(&a[0]) rend la taille d un pointeur sur entier. Tableaux & Pointeurs Conséquence : on ne peut pas connaitre la taille d un tableau passé par argument i n t f ( i n t a [ 1 0 ] ) unsigned i n t i ; for ( i =0; i <10; i ++) a [ i ]+=1; i n t main ( void ) i n t b [ 5 ] = 0, 0, 0, 0, 0 ; f ( b ) ; / POSSIBLE!! / / e r r e u r non detectee... / int f(int a[10]) est équivalent à int f(int *a). La taille spécifiée n est pas prise en compte! Si la taille doit être connue dans la fonction, il faut la passer en paramètre.

22 Tableaux & Pointeurs Allocation dynamique La notation avec [] est équivalente à l addition de l indice : i n t a [ 1 0 ] ; i n t b=a ; a[2] (a + 2) b[2] (b + 2) Les pointeurs sont utilisés pour manipuler la mémoire Ils peuvent manipuler des données déjà allouées Est-il possible d allouer dynamiquement de la mémoire? Exemple d utilisation : déclaration d un tableau de taille variable allocation de la mémoire : malloc malloc : exemple Allocation d un tableau de taille donnée par une variable : i n t allouertableau ( i n t t a i l l e ) #include <stdlib.h> void *malloc(size t taille) Argument : taille en octets size t : entier non signé Valeur renvoyée de type void * Déclaré dans stdlib.h ATTENTION : la zone mémoire allouée n est pas initialisée... i n t tab =( i n t ) malloc ( t a i l l e sizeof ( i n t ) ) ; i f ( tab==null) p r i n t f ( Probleme d a l l o c a t i o n \n ) ; return NULL ; unsigned i n t i ; for ( i =0; i < t a i l l e ; i ++) tab [ i ] = 0 ; / / ou de facon equivalente : / / ( tab+ i )=0 return tab ;

23 autres fonctions d allocation : realloc Libération de la mémoire : free #include <stdlib.h> void *realloc(void *adr, size t taille) Changement de taille d un emplacement mémoire précédemment alloué La nouvelle taille est taille, elle peut être inférieure ou supérieure Les octets conservés de l ancien tableau sont identiques L emplacement en mémoire peut changer Exemple : i n t n=10,m, tab=malloc ( n sizeof ( i n t ) ), tab2 ;... / code i n i t i a l i s a n t m / tab2= r e a l l o c ( tab,m) ; i f (! tab2 ) p r i n t f ( Erreur de r e a l l o c a t i o n \n ) ; e x i t ( 1 ) ; tab=tab2 ;... #include <stdlib.h> Libération de la mémoire void free(void *adr) Libère, d un coup, un bloc précédemment alloué par malloc, calloc ou realloc Il n est pas possible de ne libérer la mémoire que partiellement free(null) ne fait rien Libérer deux fois de suite la mémoire conduit à un comportement indéterminé : généralement un seg fault... Copie de blocs mémoire : memcpy #include <string.h> void *memcpy(void *restrict s1, const void *restrict s2, size t n); Copie n octets à partir de l adresse contenue dans le pointeur s2 vers l adresse stockée dans s1 Remarque : s2 doit pointer vers une zone mémoire de taille suffisante. la fonction renvoie la valeur de s1

24 Sommaire UE C avancé cours 4: Fichiers et structures Fichiers Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2013/2014 Structures Fichiers : principes Ouverture d un fichier : fopen/fclose Fichiers manipulés au travers d une structure (FILE) Cette structure est initialisée par une fonction d ouverture de fichier, et est détruite par une fonction de fermeture de fichier Exemple : #include <s t d i o. h> i n t main ( ) FILE m o n f i c h i e r ; i n t x, y, z ; i f ( ( m o n f i c h i e r = fopen ( f i c h i e r. t x t, r ))==NULL) p r i n t f ( Erreur a l ouverture de f i c h i e r. t x t \n ) ; return 1; f s c a n f ( mon fichier, %d %d %d,&x,&y,& z ) ; p r i n t f ( Valeurs lues : %d %d %d\n, x, y, z ) ; f c l o s e ( m o n f i c h i e r ) ; return 0; FILE *fopen(const char *nom fichier, const char *mode) : ouvre le fichier selon le mode indiqué ( r, w, a,...) int fclose(file *flux) : vide éventuellement le tampon de lecture/écriture, libère la mémoire correspondante et ferme le fichier

25 Lecture/écriture formatée int fscanf(file *flux,const char *format,...) : lecture de données à partir d un format depuis un fichier int fprintf(file *flux, const char *format,...) : écriture de données selon un format spécifié dans un fichier int fputc(int c, FILE *flux) : écrit un caractère dans un fichier int fgetc(file *flux) : lit un caractère depuis un fichier char * fgets(char *buffer, int n, FILE *flux) : lit une ligne dans un fichier (longueur maximale=n) Exemple #include <s t d i o. h> i n t main ( ) FILE src, dest ; i n t car ; i f ( ( src= fopen ( source. t x t, r ))==NULL) p r i n t f ( Erreur a l ouverture de source. t x t \n ) ; return 1; i f ( ( dest= fopen ( d e s t i n a t i o n. t x t, w ))==NULL) p r i n t f ( Erreur a l ouverture de d e s t i n a t i o n. t x t \n ) ; return 1; car = f g e t c ( src ) ; while ( car!=eof) f p u t c ( car, dest ) ; car = f g e t c ( src ) ; f c l o s e ( src ) ; f c l o s e ( dest ) ; return 0; Lecture d un fichier ligne à ligne Lecture d un fichier contenant 3 entiers par ligne avec fgets et sscanf #include <s t d i o. h> # define LONGUEURLIGNE 128 i n t main ( ) FILE src ; i f ( ( src= fopen ( source. t x t, r ))==NULL) p r i n t f ( Erreur a l ouverture de source. t x t \n ) ; return 1; char b u f f e r [LONGUEURLIGNE ] ; char res= f g e t s ( b u f f e r, LONGUEURLIGNE, src ) ; i n t a, b, c ; while ( res!= NULL) sscanf ( b u f f e r, %d %d %d,&a, &b, &c ) ; res= f g e t s ( b u f f e r, LONGUEURLIGNE, src ) ; p r i n t f ( Lu l e s e n t i e r s a=%d, b=%d, c=%d\n,a, b, c ) ; f c l o s e ( src ) ; return 0; La lecture binaire s i z e t fread ( void p t r, s i z e t size, s i z e t nmemb, FILE stream ) ; La fonction fread lit nmemb éléments de données, chacun d eux représentant size octets de long, depuis le flux pointé par stream, et les stocke à l emplacement pointé par ptr. Les données peuvent être de type quelconque, ptr peut être un pointeur sur un int, un float, une struct... Il peut être un tableau de données d un type quelconque. ATTENTION : il n y a aucune espèce de format, les données écrites dans le fichier sont recopiées directement en mémoire.

26 La lecture binaire L écriture binaire FILE f i c h i e r ; / ouverture du f i c h i e r / i f ( ( f i c h i e r =fopen ( n o m f i c h i e r, rb ))==NULL) p r i n t f ( Erreur l o r s de l a l e c t u r e de %s\n, n o m f i c h i e r ) ; e x i t ( 1 ) ; i n t i ; i n t nb lu=fread (& i, sizeof ( i n t ), 1, f i c h i e r ) ; i f ( nb lu == 1) p r i n t f ( Lecture OK\n ) ; else p r i n t f ( Lecture KO\n ) ; s i z e t f w r i t e ( const void p t r, s i z e t size, s i z e t nmemb, FILE stream ) ; La fonction fwrite écrit nmemb éléments de données, chacun d eux représentant size octets de long, dans le flux pointé par stream, après les avoir lus depuis l emplacement pointé par ptr. L écriture binaire i n t tab [ 1 0 ] ; / I n i t i a l i s a t i o n de tab /... / ouverture du f i c h i e r / i f ( ( f i c h i e r =fopen ( n o m f i c h ier, wb ))==NULL) p r i n t f ( Erreur l o r s de l e c r i t u r e de %s\n, n o m f i c h i e r ) ; e x i t ( 1 ) ; Structures / ATTENTION : pas de & car tab est un tableau! / f w r i t e ( tab, sizeof ( i n t ), 1 0, f i c h i e r ) ; / fermeture du f i c h i e r / f c l o s e ( f i c h i e r ) ;

27 Vous avez dit structures? Exemple simple Point dans un espace 3D : Les structures sont des types composés définis par le programmeur. Les structures regroupent à l intérieur d une même variable des variables sémantiquement liées. Exemple : une fiche d un répertoire contient le nom, le prénom, l adresse, le numéro de téléphone... struct p o i n t f l o a t x ; f l o a t y ; f l o a t z ; ; struct p o i n t p1 ; p1. x = ; p1. y = ; p1. z = ; Déclaration Utilisation struct <nom de type> type1 var1 ; type2 var2 ;... typen varn ; ; Déclaration d une variable du type défini struct <nom de type> <nom de variable>; Exemple : struct point p1; struct point *pp1; ATTENTION, il faut bien préciser le mot-clé struct Récupération d un champ : var.<nom du champ> Exemple :p1.x=44.20; pvar-><nom du champ> Exemple :pp1->x=44.20;

28 typedef Définition de types synonymes. Exemple : typedef i n t e n t i e r ; e n t i e r i =3; cas des tableaux : typedef i n t vect [ 3 ] ; vect v1, v2 ; cas des struct typedef struct p o i n t i n t x ; i n t y ; p o i n t ; p o i n t A ; Espaces de nom On ne peut pas utiliser deux fois un même nom dans une structure : struct bidon i n t var1 ; f l o a t var1 ; / INTERDIT / ; Par contre il n y a pas collision entre les noms de différentes structures : struct f i c h e... unsigned i n t i d ;... ; struct c l i e n t... unsigned i n t i d ;... ; Initialisation Affectation entre structures Initialisation semblable à celle de tableaux : typedef struct p o i n t f l o a t x ; f l o a t y ; f l o a t z ; p o i n t ; p o i n t p= 1.0, 2.0, 3. 0 ; B=A ; Possibilité de copier directement une structure par affectation : p o i n t A=12,4,5,B ; / p o i n t equiv. a s t r u c t p o i n t / ATTENTION aux pointeurs... équivalent à B. x=a. x ; B. y=a. y ; B. z=a. z ;

UE C avancé cours 1: introduction et révisions

UE C avancé cours 1: introduction et révisions 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

Plus en détail

Programmation Impérative 2006-2007

Programmation Impérative 2006-2007 Programmation Impérative 2006-2007 Licence Physique-Applications, Phisique-Chimie Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr Définition de nouveaux types En pseudo-langage

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Programmation système I Les entrées/sorties

Programmation système I Les entrées/sorties Programmation système I Les entrées/sorties DUT 1 re année Université de Marne La vallée Les entrées-sorties : E/O Entrées/Sorties : Opérations d échanges d informations dans un système informatique. Les

Plus en détail

C Facile. Le langage C. louen@via.ecp.fr. Mardi 15 décembre 2009. Centrale Réseaux. C Facile. Valentin Roussellet (p2010) - louen@via.ecp.

C Facile. Le langage C. louen@via.ecp.fr. Mardi 15 décembre 2009. Centrale Réseaux. C Facile. Valentin Roussellet (p2010) - louen@via.ecp. Le langage C Centrale Réseaux Mardi 15 décembre 2009 Sommaire C quoi? Le C est un langage de programmation créé en 1974, pour écrire le système d exploitation UNIX. Depuis,il est devenu (avec ses variantes),

Plus en détail

Principes de la programmation impérative

Principes de la programmation impérative Séquence d instructions Variables et types Types élaborés Procédures, arguments Gestion de la mémoire Langage compilé, interprété Principes de la programmation impérative Séquence d instructions Variables

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

1 Hello world. 2 Sorties en C. DUT Informatique M3101 Système S3 2015 / 2016. Travaux Pratiques n o 0 : Rappels de programmation C

1 Hello world. 2 Sorties en C. DUT Informatique M3101 Système S3 2015 / 2016. Travaux Pratiques n o 0 : Rappels de programmation C DUT Informatique 2015 / 2016 Travaux Pratiques n o 0 : Rappels de programmation C Nom(s) : Groupe : Date : Objectifs : renouer avec les notions, la manipulation et l écriture de programmes C, en particulier

Plus en détail

TD 1 de Langage C module Outils pour l'informatique Industrielle - Corrigés des Tds : http://www-lagis.univ-lille1.fr/~macaire/td.

TD 1 de Langage C module Outils pour l'informatique Industrielle - Corrigés des Tds : http://www-lagis.univ-lille1.fr/~macaire/td. Exercice 1 TD 1 de Langage C module Outils pour l'informatique Industrielle - Corrigés des Tds : http://www-lagis.univ-lille1.fr/~macaire/td.htm Exercices de base de Programmation Arbre Programmatique

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Comme déjà précisé dans les premiers chapitres de ce cours, il n existe pas de type chaîne de caractères prédéfinit en C. Il existe deux façons pour déclarer une chaîne de caractères

Plus en détail

Programmation impérative

Programmation impérative Programmation impérative Cours 4 : Manipulation des fichiers en C Catalin Dima Organisation des fichiers Qqs caractéristiques des fichiers : Nom (+ extension). Chemin d accès absolu = suite des noms des

Plus en détail

1. Eléments de base du langage C

1. Eléments de base du langage C 1 1. Eléments de base du langage C Généralités Programme et sous-programme Fonction C Structure d un programme C Vocabulaire de base et syntaxe Exemples 2 Généralités Crée en 1972 par D. Ritchie pour écrire

Plus en détail

Sujet d examen 1. Pratique du C. Novembre 2009

Sujet d examen 1. Pratique du C. Novembre 2009 Durée 1 h 30 Documents autorisés Sujet d examen 1 Pratique du C Novembre 2009 Introduction Écrivez lisiblement et n hésitez pas à commenter votre code en langage C. Vous ne pouvez utiliser que les fonctions

Plus en détail

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 2014-2015 (1ere session) durée 3h Tous documents et calculatrices autorisés. Répondez aux questions sur une copie séparée Le sujet comporte 8 pages

Plus en détail

Langage C. Chapitre 2. 2.1 Le langage C, un langage non interprété. 2.1.1 L écriture du programme. 2.1.2 La compilation

Langage C. Chapitre 2. 2.1 Le langage C, un langage non interprété. 2.1.1 L écriture du programme. 2.1.2 La compilation Chapitre 2 Langage C 2.1 Le langage C, un langage non interprété Le C est un langage de programmation comme il en existe beaucoup d autres (C++, Fortran, Python, Matlab, IDL, ADA...). Il existe deux grandes

Plus en détail

Programmation Avancée en Langage C Séances de Travaux-Pratiques

Programmation Avancée en Langage C Séances de Travaux-Pratiques Programmation Avancée en Langage C Séances de Travaux-Pratiques Ph. Langevin Année Universitaire 2010 Contents 1 Préambule 2 2 Commandes de base 2 2.1 man................................ 2 2.2 Recherche.............................

Plus en détail

Objectifs. Pointeurs et tableaux. Arithmétique des pointeurs et sizeof. sizeof. Exemple : liste chaînées. Cast. Débordement de tampons

Objectifs. Pointeurs et tableaux. Arithmétique des pointeurs et sizeof. sizeof. Exemple : liste chaînées. Cast. Débordement de tampons du cours d aujourd hui Programmation «orientée système» LANGAGE C POINTEURS (5/5) des pointeurs Complément (et mise en garde) sur Exemple pratique : listes Forçage de type (casting) Laboratoire d Intelligence

Plus en détail

C, seconde séance. le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de:

C, seconde séance. le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de: C, seconde séance le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de: false, c est 0 ( \0 aussi) test d égalité: == pour printf: %d entier, %f flottant, %c caractère,

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Syntaxe et outils de base du langage C. Gérard Dethier

Syntaxe et outils de base du langage C. Gérard Dethier Syntaxe et outils de base du langage C Gérard Dethier Février 2011 Chapitre 1 Introduction Le but de ce document est de permettre la consultation rapide de la syntaxe C associée à des notions de programmation

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

INITIATION A LA PROGRAMMATION EN C

INITIATION A LA PROGRAMMATION EN C INITIATION A LA PROGRAMMATION EN C OBJECTIF : ETRE CAPABLE DE CRÉER OU MODIFIER DE PETITS OUTILS DE TRAITEMENT D IMAGE Denis MARIANO-GOULART Service de médecine nucléaire. CHRU Lapeyronie. Montpellier.

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Cours d Analyse, Algorithmique Elements de programmation

Cours d Analyse, Algorithmique Elements de programmation 1 de 33 Cours d Analyse, Algorithmique Elements de programmation Florent Hivert Mél : Florent.Hivert@lri.fr Adresse universelle : http://www.lri.fr/ hivert 2 de 33 Données et instructions Un programme

Plus en détail

Introduction au langage C

Introduction au langage C Organisation du cours Introduction au langage C Premier cours Notions générales Aurélien Max aurelien.max@limsi.fr 12 séances de cours de 1h: mercredi 16-17h, salle A203 12 séances de TD de 1h: mercredi

Plus en détail

TP1 - Introduction au langage C

TP1 - Introduction au langage C ENS Lyon L-Info PROJ1 2014-2015 TP1 - Introduction au langage C Sujet à terminer pour le dimanche 20 à 2h59, sous forme d une archive.zip contenant votre code source, par email à aurelien.cavelan@ens-lyon.fr.

Plus en détail

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Claude Delannoy Exercices en langage C++ 3 e édition Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Chapitre 3 Les fonctions Rappels Généralités Une fonction est un bloc d instructions éventuellement

Plus en détail

TD1 : Scripts bash. I. Courrier gagnant. II. Opacification de texte. Rappels

TD1 : Scripts bash. I. Courrier gagnant. II. Opacification de texte. Rappels TD1 : Scripts bash I. Courrier gagnant 1) Écrire un script couga.sh qui lit au clavier un nom, prénom, numéro de rue, nom de la rue, code postal et ville, puis affiche sur la sortie standard l adresse

Plus en détail

Eléments de syntaxe du langage Java

Eléments de syntaxe du langage Java c jan. 2014, v3.0 Java Eléments de syntaxe du langage Java Sébastien Jean Le but de ce document est de présenter es éléments de syntaxe du langage Java : les types primitifs, les opérateurs arithmétiques

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables

Plus en détail

I Arbres binaires. Lycée Faidherbe 2014-2015. 1 Rappels 2 1.1 Définition... 2 1.2 Dénombrements... 2 1.3 Parcours... 3

I Arbres binaires. Lycée Faidherbe 2014-2015. 1 Rappels 2 1.1 Définition... 2 1.2 Dénombrements... 2 1.3 Parcours... 3 I Arbres binaires 2014-2015 Table des matières 1 Rappels 2 1.1 Définition................................................ 2 1.2 Dénombrements............................................ 2 1.3 Parcours.................................................

Plus en détail

Pointeurs de fonctions

Pointeurs de fonctions Florence Levé - Université de Picardie Jules Verne 145 Pointeurs de fonctions Parfois utile de passer une fonction comme paramètre d une autre fonction Un pointeur de fonction correspond à l adresse du

Plus en détail

MEUTER Cédric / LEVY Eythan. Université Libre de Bruxelles 23/09/2005

MEUTER Cédric / LEVY Eythan. Université Libre de Bruxelles 23/09/2005 Développement en C sous LINUX MEUTER Cédric / LEVY Eythan Université Libre de Bruxelles 23/09/2005 Développement en C sous LINUX p. 1 Comment écrire son programme? Principaux éditeurs : XEmacs Emacs vi

Plus en détail

Chapitre 3 : Pointeurs et références

Chapitre 3 : Pointeurs et références p. 1/18 Chapitre 3 : Pointeurs et références Notion de pointeur L adresse d une variable est une valeur. On peut donc la stocker dans une variable. Un pointeur est une variable qui contient l adresse d

Plus en détail

Objectifs du cours d aujourd hui. Informatique I : Cours d introduction à l informatique et à la programmation Types avancés (1)

Objectifs du cours d aujourd hui. Informatique I : Cours d introduction à l informatique et à la programmation Types avancés (1) Objectifs du cours d aujourd hui Informatique I : Cours d introduction à l informatique et à la programmation Types avancés (1) Jamila Sam Haroud Présenter des structures de données plus avancées (que

Plus en détail

Algorithmique, Structures de données et langage C

Algorithmique, Structures de données et langage C UNIVERSITE PAUL SABATIER TOULOUSE III Algorithmique, Structures de données et langage C L3 IUP AISEM/ICM Janvier 2005 J.M. ENJALBERT Chapitre 1 Rappels et compléments de C 1.1 Structures Une structure

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

Introduction au langage C

Introduction au langage C LozZone Introduction au langage C Version du 8 septembre 2008 Dernière version sur : http://lozzone.free.fr Vincent Lozano Sommaire 1 Introduction 1 2 Variables et types 3 3 Instructions 9 4 Structures

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

Licence Fondamentale SMI (semestre 3)

Licence Fondamentale SMI (semestre 3) Cours Programmation I (chapitres 1&2) Licence Fondamentale SMI (semestre 3) Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2014/2015 2014/2015 Pr. Ben Mamoun 1 Plan du cours (1) 1. Introduction

Plus en détail

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours de Programmation Impérative: Zones de mémoires et pointeurs Cours de Programmation Impérative: Zones de mémoires et pointeurs Julien David A101 - david@lipn.univ-paris13.fr Julien David (A101 - david@lipn.univ-paris13.fr) 1 / 1 Z`o n`e s `d`e m`é m`o i r`e Julien

Plus en détail

Algorithmique et Structures de Données

Algorithmique et Structures de Données Plan du cours Algorithmique et Structures de Données Akkouche Samir : E-mail : samir.akkouche@liris.cnrs.fr Knibbe Carole: E-mail : carole.knibbe@univ-lyon1.fr 1. Rappels 2. Tableaux dynamiques a. Introduction

Plus en détail

Chapitre 1 : La gestion dynamique de la mémoire

Chapitre 1 : La gestion dynamique de la mémoire Chapitre 1 : La gestion dynamique de la mémoire En langage C un programme comporte trois types de données : Statiques; Automatiques ; Dynamiques. Les données statiques occupent un emplacement parfaitement

Plus en détail

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 2012-2013 (2eme session) durée 2h Tous documents et calculatrices autorisés. Le sujet comporte 6 pages Le temps approximatif ainsi que le barème

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

TP 8 : Arbres binaires de recherche

TP 8 : Arbres binaires de recherche TP 8 : Arbres binaires de recherche Semaine du 17 Mars 2008 Exercice 1 Dénir une structure struct noeud_s permettant de coder un n ud d'un arbre binaire contenant une valeur entière. Ajouter des typedef

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

Notion de portée locale (1)

Notion de portée locale (1) Notion de portée locale (1) Les notions de portée locale v.s. globale définies pour les blocs sont également valides dans le cadre des fonctions 1. Comme dans le cas des blocs, la portée permet de résoudre

Plus en détail

Informatique III: Programmation en C++ Introduction. Examens. Chargé de cours François Fleuret francois.fleuret@epfl.ch

Informatique III: Programmation en C++ Introduction. Examens. Chargé de cours François Fleuret francois.fleuret@epfl.ch Informatique III: Programmation en C++ Lundi 24 Octobre 2005 Chargé de cours François Fleuret francois.fleuret@epfl.ch Assistant Mathieu Salzmann mathieu.salzmann@epfl.ch Assistants étudiants Ali Al-Shabibi

Plus en détail

Licence STPI Semestre 3 - Examen de Validation de Module - Janvier 2006 ULSI301 - LANGAGE C

Licence STPI Semestre 3 - Examen de Validation de Module - Janvier 2006 ULSI301 - LANGAGE C Licence STPI Semestre 3 - Examen de Validation de Module - Janvier 2006 ULSI301 - LANGAGE C Durée : 2h. - Documents et Calculatrices autorisés. Toutes les réponses doivent être justifiées - Les exercices

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

Langages et concepts de programmation

Langages et concepts de programmation Langages et concepts de programmation Séances 3 et 4 Tri d un fichier de voitures Une correction possible 1 Le sujet On dispose d un fichier contenant des informations sur des voitures d occasion : le

Plus en détail

1 Notions de base 1.1 Structure d'un programme

1 Notions de base 1.1 Structure d'un programme 1 Notions de base 1.1 Structure d'un programme Le langage C++ contient le langage C : tout programme écrit en C à la norme ANSI doit pouvoir être compilé par un compilateur C++. C++ fait la diérence entre

Plus en détail

Exercice 1 : Questions diverses (5 points)

Exercice 1 : Questions diverses (5 points) Université Claude Bernard Lyon 1 Licence Sciences, Technologies, Santé L2 Année 2010-2011, 2ème semestre LIF5 Algorithmique & Programmation procédurale Contrôle final du 20 juin 2011 Durée : 1h30 Note

Plus en détail

GESTION DES FICHIERS. Plan

GESTION DES FICHIERS. Plan Chapitre 10 GESTION DES FICHIERS Objectif: Connaître et manipuler les différentes primitives de gestion de fichier de niveau haut. Pré requis: Les fonction d'entrées sorties Les pointeurs Les structures

Plus en détail

Programmation C++ (débutant)/les fichiers

Programmation C++ (débutant)/les fichiers Programmation C++ (débutant)/les fichiers 1 Programmation C++ (débutant)/les fichiers Généralité sur les fichiers La règle générale pour créer un fichier est la suivante : il faut l'ouvrir en écriture.

Plus en détail

Travaux Dirigés Initiation à la programmation en C

Travaux Dirigés Initiation à la programmation en C Travaux Dirigés Initiation à la programmation en C Sylvain MONTAGNY sylvain.montagny@univ-savoie.fr Bâtiment chablais, bureau 13 04 79 75 86 86 TD1 : Compilation et bases de la programmation TD2 : Les

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

Structures de données, IMA S6

Structures de données, IMA S6 Structures de données, IMA S6 Arbres Binaires d après un cours de N. Devésa, Polytech Lille. Laure Gonnord http://laure.gonnord.org/pro/teaching/ Laure.Gonnord@polytech-lille.fr Université Lille 1 - Polytech

Plus en détail

Licence E.E.A. TD N 2 de Langage C/C++

Licence E.E.A. TD N 2 de Langage C/C++ TD N 2 de Langage C/C++ 1 Licence E.E.A. TD N 2 de Langage C/C++ Ce TD a pour objectif de vous faire découvrir et utiliser le langage C et peut être C++. Il s agira de transcrire sous la forme d un programme

Plus en détail

Utilisation des tableaux numériques

Utilisation des tableaux numériques 8 Utilisation des tableaux numériques Les tableaux représentent un type de stockage de données souvent utilisé en langage C. Le Chapitre 6 vous en a donné un bref aperçu. Aujourd hui, vous allez étudier

Plus en détail

Initiation. àl algorithmique et à la programmation. en C

Initiation. àl algorithmique et à la programmation. en C Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Série d exercices N 9 Arbres

Série d exercices N 9 Arbres Série d exercices N 9 Arbres Exercice 1 a) Ecrire une fonction ARBIN creerarbreentiers() qui permet de créer et de renvoyer l arbre d entiers suivant : b) Ecrire une fonction int feuilles(arbin a) qui

Plus en détail

I Quelques points d'algorithmique

I Quelques points d'algorithmique I Quelques points d'algorithmique 1) Types Type "simple" : Identificateur commençant par une majuscule = Description du type Les principaux types : les entiers naturels (int, long, long long) ou relatifs

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Tableaux et pointeurs (corrigé)

Tableaux et pointeurs (corrigé) Tableaux et pointeurs (corrigé) Tous les exercices sont à faire. 1 Tableaux Exercice 1. Moyenne (*) Écrivez une fonction qui calcule la moyenne de n nombres stockés dans un tableau de double. Prototype

Plus en détail

Mini-Projet : Tournoi de Dames

Mini-Projet : Tournoi de Dames Mini-Projet : Tournoi de Dames L objectif du projet est de programmer un jeu de dames de façon à ce que votre programme puisse jouer une partie de dames avec les programmes des autres étudiants. 1 Organisation

Plus en détail

Initiation au C cours n 9

Initiation au C cours n 9 Initiation au C cours n 9 Antoine Miné École normale supérieure 26 avril 2007 Plan du cours compilation séparée, modularité, bibliothèques.a et.so, recompilation automatique avec make. Déroulement de la

Plus en détail

Cours 01 - Les structures de données

Cours 01 - Les structures de données Cours 01 - Les structures de données MPSI - Prytanée National Militaire Pascal Delahaye 1 er mars 2015 Les programmes informatiques, traitent des données, créent des données et renvoient des données. Pour

Plus en détail

C12. Les structures arborescentes. Août 2006

C12. Les structures arborescentes. Août 2006 Les structures arborescentes Août 2006 Objectifs du C12 Connaître le principe de la structure d arbre binaire Connaître les détails d implémentation de la structure d arbre binaire de recherche Les structures

Plus en détail

Programmation en langage C

Programmation en langage C Programmation en langage C Anne CANTEAUT INRIA - projet CODES B.P. 105 78153 Le Chesnay Cedex Anne.Canteaut@inria.fr http://www-rocq.inria.fr/codes/anne.canteaut/cours C 2 Table des matières 3 Table des

Plus en détail

Chapitre 3 Structures de données linéaires : listes, piles et files

Chapitre 3 Structures de données linéaires : listes, piles et files Chapitre 3 Structures de données linéaires : listes, piles et files 1. Introduction Le but de ce chapitre est de décrire des représentations des structures de données de base telles les listes en général

Plus en détail

Contents. 3 Tableaux à la Picasso 13

Contents. 3 Tableaux à la Picasso 13 . C quoi le C? Contents 1 Les bases 2 1.1 Jeux de main..................................... 2 1.1.1 Kézako?................................. 2 1.1.2 Commençons par le début........................ 3 1.1.3

Plus en détail

xkcd Le langage Python La GUI tkinter Christian Nguyen Département d informatique Université de Toulon et du Var 2012-2013

xkcd Le langage Python La GUI tkinter Christian Nguyen Département d informatique Université de Toulon et du Var 2012-2013 La GUI tkinter Département d informatique Université de Toulon et du Var 2012-2013 Présentation Python est né en 1990, son concepteur est De Guido Van Rossum(Pays Bas). Il présente les caractéristiques

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

PLAN DU COURS ENTRÉE SORTIE FONCTION PRINTF. Fonction de la bibliothèque stdio.h. Affichage d'un texte:

PLAN DU COURS ENTRÉE SORTIE FONCTION PRINTF. Fonction de la bibliothèque stdio.h. Affichage d'un texte: PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, Tableaux, opérateurs Entrées sorties de base Structures de contrôle Algorithmes de recherche Algorithmes de

Plus en détail

UE1 - Langage C Fiche TP1

UE1 - Langage C Fiche TP1 1 UE1 - Langage C Fiche TP1 Objectifs 1. Connaître quelques commandes linux 2. Savoir manipuler les outils de compilation tels que gcc, make 3. Ecrire des algorithmes, les coder en C, et les exécuter 1.

Plus en détail

Structures de données non linéaires

Structures de données non linéaires Structures de données non linéaires I. Graphes Définition Un graphe (simple) orienté G est un couple (S, A), où : S est un ensemble dont les éléments sont appelés les sommets. A est un ensemble de couples

Plus en détail

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Les types énumérés On peut aussi définir des types qui ont un nombre fini de valeurs (ex: jours de la semaine, couleurs primaires, etc.)

Plus en détail

Langage C/C++ TD 3-4 : Création dynamique d objets. Hubert Godfroy. 27 novembre 2014

Langage C/C++ TD 3-4 : Création dynamique d objets. Hubert Godfroy. 27 novembre 2014 Langage C/C++ TD 3-4 : Création dynamique d objets Hubert Godfroy 7 novembre 014 1 Tableaux Question 1 : Écrire une fonction prenant un paramètre n et créant un tableau de taille n (contenant des entiers).

Plus en détail

I. Moniteur POP3 de emails en C

I. Moniteur POP3 de emails en C Année universitaire 2014/2015 Site : Luminy St-Charles St-Jérôme Cht-Gombert Aix-Montperrin Aubagne-SATIS Sujet de : 1 er semestre 2ème semestre Session 2 Examen de : L3 Code du module : SIN5U3 Calculatrices

Plus en détail

Une introduction au langage C++ Marc Jachym, Lurpa

Une introduction au langage C++ Marc Jachym, Lurpa Une introduction au langage C++ Marc Jachym, Lurpa Janvier 2008 À l origine, le langage C Langage procédural créé dans les années 1970 aux laboratoires Bell (ATT : télécoms américains) en vue d écrire

Plus en détail

Ch1 : Eléments de base du langage C

Ch1 : Eléments de base du langage C Ch1 : Eléments de base du langage C Fathi Mguis Atelier de programmation 1 LFSI1/LARI1 A.U : 2014-2015 Plan 1 Généralités 2 Avantages 3 Structure d un programme en C 4 Les diverse phases d un programme

Plus en détail

1. Les fondements de l informatique 13

1. Les fondements de l informatique 13 Introduction à l'algorithmique 1. Les fondements de l informatique 13 1.1 Architecture de Von Neumann 13 1.2 La machine de Turing 17 1.3 Représentation interne des instructions et des données 19 1.3.1

Plus en détail

TP 2 et 3 Introduction à C

TP 2 et 3 Introduction à C TP 2 et 3 Introduction à C Partie A : prise en main de gcc et makefile L'objectif de cette partie est de vous familiariser avec le langage C et sa chaîne de développement basée sur le compilateur gcc,

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Le langage C. Université de la Méditerranée Faculté des Sciences de Luminy. Henri Garreta Département d Informatique - LIF

Le langage C. Université de la Méditerranée Faculté des Sciences de Luminy. Henri Garreta Département d Informatique - LIF Université de la Méditerranée Faculté des Sciences de Luminy Le langage C Licences Maths & Informatique Master Mathématiques Master C.C.I. Henri Garreta Département d Informatique - LIF TABLE DES MATIÈRES

Plus en détail

Structures de données

Structures de données 1 de 52 Algorithmique Structures de données Florent Hivert Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 2 de 52 Algorithmes et structures de données La plupart des bons algorithmes

Plus en détail

Compression de Données - Algorithme de Huffman Document de Conception

Compression de Données - Algorithme de Huffman Document de Conception ROLLET Samuel SALLE Jennifer Compression de Données - Algorithme de Huffman Document de Conception Projet d'algorithmique et Structure des Données 1 SOMMAIRE 1. Domaine d application....4 1.1 Objectifs

Plus en détail

Algorithmique Partie 1

Algorithmique Partie 1 Algorithmique Partie 1 IUT Informatique de Lens, 1ère Année Université d Artois Frédéric Koriche koriche@cril.fr 2011 - Semestre 1 Modalités Sommaire 1 Modalités 2 Programmation 3 Données 4 Opérateurs

Plus en détail

Programmation système de commandes en C

Programmation système de commandes en C Programmation système de commandes en C Cours de Programmation système Tuyêt Trâm DANG NGOC Université de Cergy-Pontoise 2012 2013 Tuyêt Trâm DANG NGOC Programmation système de commandes

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail

Langage C. Patrick Corde. 30 juin 2015. Patrick.Corde@idris.fr. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 30 juin 2015 1 / 288

Langage C. Patrick Corde. 30 juin 2015. Patrick.Corde@idris.fr. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 30 juin 2015 1 / 288 Langage C Patrick Corde Patrick.Corde@idris.fr 30 juin 2015 Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 30 juin 2015 1 / 288 Table des matières I 1 Présentation du langage C Historique Intérêts

Plus en détail