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

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

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 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

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

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

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

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

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

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

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

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

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

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

Introduction au langage C - types et variables

Introduction au langage C - types et variables Chapitre 2 Introduction au langage C - types et variables 1 Le Langage C Le langage C est un langage de bas niveau dans le sens où il permet l accès à des données que manipulent les ordinateurs (bits,

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

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

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

Organisation des données et structures de stockage

Organisation des données et structures de stockage ING2 - ING3 Nvx 2009-2010 Organisation des données et structures de stockage I. Stockage de l information en C Ce chapitre rappelle brièvement et complète certaines notions de base vues en première année

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

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

CHAPITRE 3 : Types de base, Opérateurs et Expressions

CHAPITRE 3 : Types de base, Opérateurs et Expressions CHAPITRE 3 : Types de base, Opérateurs et Expressions 1. Types simples Un type définit l'ensemble des valeurs que peut prendre une variable, le nombre d'octets à réserver en mémoire et les opérateurs que

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

ISMIN 1A Programmation 1 : Examen de programmation C. Réponses. Partie 1. Questions ouvertes

ISMIN 1A Programmation 1 : Examen de programmation C. Réponses. Partie 1. Questions ouvertes ISMIN 1A Programmation 1 : Examen de programmation C Réponses Partie 1. Questions ouvertes 1. Soit la déclaration suivante, char tab[] = "". Que contient le tableau tab? Réponse : tab[0] = \0. tab est

Plus en détail

Langage C. E. Boucharé

Langage C. E. Boucharé Langage C E. Boucharé Table des Matières Introduction.............................................................................. 1 Chapitre 1. Les types de données de C....................................................

Plus en détail

Aide Mémoire - langage C

Aide Mémoire - langage C Université du Luxembourg 2005 2006 Aide Mémoire - langage C 1 Directives de préprocesseur inclusion de fichiers pour un fichier système : #include pour un fichier du répertoire courant

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

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

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

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

Cours Langage C. Passage de paramètres à la fonction main Pointeur de fonction Allocation dynamique

Cours Langage C. Passage de paramètres à la fonction main Pointeur de fonction Allocation dynamique Cours Langage C Passage de paramètres à la fonction main Pointeur de fonction Allocation dynamique I Passage de paramètres à la fonction main Tout exécutable C doit comporter une fonction main dont le

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

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

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

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

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

La programmation Impérative par le Langage C

La programmation Impérative par le Langage C La programmation Impérative par le Langage C 1. Introduction 1.1 Qu est-ce que la programmation impérative? Un programme est constitué de plusieurs lignes d instructions. Chaque instruction permet d effectuer

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

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

Soutien Informatique

Soutien Informatique 1/51 Soutien Informatique Nicolas Castagné et François Portet PHELMA 2/51 Sommaire Allocation Mémoire Les types abstraits de données 3/51 Allocation dynamique de mémoire (stdlib.h,string.h) Réserver un

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

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

Chapitre 1 Introduction

Chapitre 1 Introduction Chapitre 1 Introduction Jean Privat Université du Québec à Montréal INF7330 Construction de logiciels Diplôme d études supérieures spécialisées en systèmes embarqués Automne 2012 Jean Privat (UQAM) 01

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

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

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

Quelques éléments de compilation en C et makefiles

Quelques éléments de compilation en C et makefiles Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable

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

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

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

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

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

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

6. Lecture/écriture formatées et Fichiers. printf / scanf Fichier: Mémoire tampon Accès aux fichiers Modes d'ouverture Lecture / écriture

6. Lecture/écriture formatées et Fichiers. printf / scanf Fichier: Mémoire tampon Accès aux fichiers Modes d'ouverture Lecture / écriture 1 6. Lecture/écriture formatées et Fichiers printf / scanf Fichier: Mémoire tampon Accès aux fichiers Modes d'ouverture Lecture / écriture 2 Références Site du zèro : Programmer en C http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html

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

CHAPITRE 6 : Tableaux. Définition. Tableaux à une dimension (Vecteurs)

CHAPITRE 6 : Tableaux. Définition. Tableaux à une dimension (Vecteurs) Année Universitaire 2006/2007 CHAPITRE 6 : Tableaux Définition Tableaux à une dimension (Vecteurs) Déclaration ; Mémorisation M ; Tableaux à plusieurs dimensions Déclaration Tableaux à deux dimensions

Plus en détail

L3 Info & Miage. TP-Projet SGF

L3 Info & Miage. TP-Projet SGF TP-Projet SGF 1. Introduction L objectif de ce mini-projet est de réaliser un Système de Gestion de Fichiers simplifié capable de gérer des accès à des fichiers séquentiels de type flot. L idée est ici

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

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

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

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

Arnaud DABOUIS Vincent HURBOURQUE IMAC 1. PROJET C : Traitement d images

Arnaud DABOUIS Vincent HURBOURQUE IMAC 1. PROJET C : Traitement d images PROJET C : Traitement d images 1 SOMMAIRE 1) Schéma et structure a) Schéma de la structure b) Les structures utilisées La structure image La structure calque La structure LUT La structure Historique et

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

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

Projet codage de texte

Projet codage de texte Formation ISN Professeurs de Terminale Denis Bouhineau, Éric Gaussier, Alexandre Termier, Cyril Labbé, Philippe Bizard, Anne Rasse, Jean-Marc Vincent UFR IM 2 AG email Jean-Marc.Vincent@imag.fr Formation

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

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

1 : 1 er programmes & prise en main de l environnement

1 : 1 er programmes & prise en main de l environnement 1 : 1 er programmes & prise en main de l environnement 1 Introduction 1.1 Rappel : gestion d arborescence et de fichiers sous UNIX Pour la manipulation de répertoire et de fichier à partir d un terminal

Plus en détail

Les types utilisateurs (VBA) Corrigé

Les types utilisateurs (VBA) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 2 avril mai 2013 Corrigé Résumé Ce document décrit comment traduire en VBA les types utilisateur du langage algorithmique. Table des matières

Plus en détail

TP Interface graphique et C++ numéro 1

TP Interface graphique et C++ numéro 1 TP Interface graphique et C++ numéro 1 Master IGC - 1 re année année 2010-2011 Ce premier TP a pour objectif de vous familiariser avec le compilateur C++, les entréessorties du langage et l utilisation

Plus en détail

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

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

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

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

3 Lien entre pointeurs et tableaux.

3 Lien entre pointeurs et tableaux. programme sont dit dynamiques. On se limite ici aux tableaux statiques à une seule dimension, analogue aux vecteurs manipulés en mathématiques. Ils se déclarent sous la forme : type_d_élément variable_tableau[taille];

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

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

Langage C notes de cours

Langage C notes de cours Langage C notes de cours K. El Omari IUT GTE, UPPA 1 Présentation générale 1.1 Introduction La programmation par le langage C (ainsi que par d autres langages dit compilés) est basée sur : 1. la rédaction

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

Algorithmique et Analyse d Algorithmes

Algorithmique et Analyse d Algorithmes Algorithmique et Analyse d Algorithmes L3 Info Cours 5 : Structures de données linéaires Benjamin Wack 2015-2016 1 / 37 La dernière fois Logique de Hoare Dichotomie Aujourd hui Type Abstrait de Données

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

Premiers exemples de traitements

Premiers exemples de traitements #include #include Premiers exemples de traitements void main() float b(0.0); float c(0.0); float delta(0.0); cin >> b >> c; delta = b*b - 4*c; if (delta < 0.0) cout

Plus en détail

INF601 : Algorithme et Structure de données

INF601 : Algorithme et Structure de données Cours 2 : TDA Liste B. Jacob IC2/LIUM 15 février 2010 Plan 1 Définition du TDA Liste 2 Réalisation du TDA Liste 3 Type de stockage des éléments 4 Recherche d un élément Dans une liste non triée Dans une

Plus en détail

Listes de personnes et calculatrice polonaise inverse en Java

Listes de personnes et calculatrice polonaise inverse en Java Listes de personnes et calculatrice polonaise inverse en Java Université Paris Sud Motivation Le but de cet exercice est de manipuler les listes chaînées et les piles et de voir leur application en analyse

Plus en détail

Chargement de processus Allocation contigüe Allocation fragmentée Gestion de pages. Gestion mémoire. Julien Forget

Chargement de processus Allocation contigüe Allocation fragmentée Gestion de pages. Gestion mémoire. Julien Forget Julien Forget Université Lille 1 École Polytechnique Universitaire de Lille Cité Scientifique 59655 Villeneuve d Ascq GIS 3 2011-2012 1 / 46 Rôle du gestionnaire de mémoire Le gestionnaire de mémoire a

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

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

Algorithmique - Techniques fondamentales de programmation Exemples en Python (nombreux exercices corrigés) - BTS, DUT informatique

Algorithmique - Techniques fondamentales de programmation Exemples en Python (nombreux exercices corrigés) - BTS, DUT informatique 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

Informatique TP4 : Manipulations de fichiers Manipulations de chaînes et de tableaux CPP 1A

Informatique TP4 : Manipulations de fichiers Manipulations de chaînes et de tableaux CPP 1A Informatique TP4 : Manipulations de fichiers Manipulations de chaînes et de tableaux CPP 1A Djamel Aouane, Frederic Devernay, Matthieu Moy Mars - avril 2015 1 Manipulations de fichiers Pour organiser des

Plus en détail

LE LANGAGE C ADAPTÉ AU MICROCONTRÔLEURS

LE LANGAGE C ADAPTÉ AU MICROCONTRÔLEURS LE LANGAGE C ADAPTÉ AU MICROCONTRÔLEURS 1. PRÉSENTATION. Le langage C a fait son apparition en 1972 pour le développement du système d exploitation Unix. Il est devenu un standard de la norme ANSI en 1983.

Plus en détail

Héritage en java : Calculatrice SDC

Héritage en java : Calculatrice SDC Programmation orientée objet L3 MIAGE Héritage en java : Calculatrice SDC Travail à rendre : le code complet du projet SDC sous forme d une archive tar.gz. L archive comportera trois répertoires : un répertoire

Plus en détail

Examen de Langage C Vendredi 2 Décembre 2011

Examen de Langage C Vendredi 2 Décembre 2011 Année 2011-2012 Examen de Langage C Vendredi 2 Décembre 2011 Promotion Guichet 1 ière année É. Salvat Modalités : Durée : 2 heures Seul document autorisé : carte de référence du C, pas de machine à calculer,

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

Formation Unix/Linux (9) Introduction à la programmation C sous Unix

Formation Unix/Linux (9) Introduction à la programmation C sous Unix Formation Unix/Linux (9) Introduction à la programmation C sous Unix Olivier BOEBION Mars 2004 1 Le langage C Introduire un langage de développement dans des travaux pratiques sur un système d exploitation

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

L1 Informatique Université Paris 8-2010-2011 Programmation Impérative I Rim Chaabane rchaabane@ai.univ-paris8.fr - Cours 6 - Les pointeurs

L1 Informatique Université Paris 8-2010-2011 Programmation Impérative I Rim Chaabane rchaabane@ai.univ-paris8.fr - Cours 6 - Les pointeurs Les pointeurs Le langage C permet de manipuler des adresses d objets ou de fonctions par le biais de pointeurs. Pour ce faire on peut désigner des variables dites de type pointeur, destinées à contenir

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

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5 Introduction à l algorithmique et à la programmation IUT 1ère année 2013-2014 Cyril Nicaud Cyril.Nicaud@univ-mlv.fr Cours 1 / 5 Déroulement du cours Organisation : 5 séances de 2h de cours 10 séances de

Plus en détail

L2 - Algorithmique et structures de données (Année 2010/2011) Examen (2 heures)

L2 - Algorithmique et structures de données (Année 2010/2011) Examen (2 heures) L2 - lgorithmique et structures de données (nnée 2010/2011) Delacourt, Phan Luong, Poupet xamen (2 heures) Les documents (cours, TD, TP) sont autorisés. Les quatre exercices sont indépendants. À la fin

Plus en détail

Notions de langage machine

Notions de langage machine Notions de langage machine 18 décembre 2009 Rappels et introduction Architecture de Van Neumann : Processeur = UC + UAL Mémoire interne au processeur = les registres (soit seulement l accumulateur, soit

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