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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289

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

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

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

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers. I Présentation : Dans le chapitre 1, nous avons vu comment utiliser les appels-systèmes de bas niveau pour créer et accéder à des fichiers sur le disque. Nous avons notamment mis en évidence leur dépouillement

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

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

Rappels Entrées -Sorties

Rappels Entrées -Sorties Fonctions printf et scanf Syntaxe: écriture, organisation Comportement Données hétérogènes? Gestion des erreurs des utilisateurs 17/11/2013 Cours du Langage C ibr_guelzim@yahoo.fr ibrahimguelzim.atspace.co.uk

Plus en détail

SUPPORT DE COURS. Langage C

SUPPORT DE COURS. Langage C Dpt Informatique 2010-2011 SUPPORT DE COURS Langage C Semestre 1 par : «CaDePe» Marie-Françoise Canut Marianne de Michiel André Péninou Table des Matières 1 Généralités...8 1.1 Introduction aux langages

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

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge Introduction Les performances d une machine sont liées au: 1. nombre d instructions 2. temps de cycle horloge 3. nombre de cycle horloge par instructions. C est: le compilateur et l architecture du jeu

Plus en détail

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs Brefs rappels sur la pile et le tas (Stack / Heap) et les pointeurs (exemples en C) v1.11 - Olivier Carles 1 Pile et Tas Mémoire allouée de manière statique Mémoire Allouée Dynamiquement variables locales

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

Initiation au Langage C. Alexandre Meslé

Initiation au Langage C. Alexandre Meslé Initiation au Langage C Alexandre Meslé 7 février 2012 Table des matières 1 Notes de cours 6 1.1 Introduction............................................ 6 1.1.1 Définitions et terminologie................................

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

Bonnes pratiques de développement et débogage de programme Octobre en2007 langage C1 et / 40 Fort

Bonnes pratiques de développement et débogage de programme Octobre en2007 langage C1 et / 40 Fort Bonnes pratiques de développement et débogage de programme en langage C et Fortran Sylvain Ferrand CMAP Octobre 2007 Bonnes pratiques de développement et débogage de programme Octobre en2007 langage C1

Plus en détail

Le langage PHP. Walid Belkhir Université de Provence belkhir@cmi.univ-mrs.fr http://www.lif.univ-mrs.fr/ belkhir/

Le langage PHP. Walid Belkhir Université de Provence belkhir@cmi.univ-mrs.fr http://www.lif.univ-mrs.fr/ belkhir/ Le langage PHP Walid Belkhir Université de Provence belkhir@cmi.univ-mrs.fr http://www.lif.univ-mrs.fr/ belkhir/ 1 / 38 Plan 1 Introduction au langage PHP 2 2 / 38 Qu est ce que PHP? langage interprété

Plus en détail

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan Cours de C++ François Laroussinie Dept. d Informatique, ENS de Cachan 2 novembre 2005 Première partie I Introduction Introduction Introduction Algorithme et programmation Algorithme: méthode pour résoudre

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

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

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

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

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

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

Le langage Java - Syntaxe

Le langage Java - Syntaxe Le langage Java - Syntaxe LES BASES: litéraux, types, expressions, instructions LE LANGAGE JAVA - SYNTAXE LES COMMENTAIRES LES IDENTIFICATEURS LISTES DES MOTS RÉSERVÉS: LES LITÉRAUX BOOLÉENS LA DÉCLARATION

Plus en détail

INITIATION A LA PROGRAMMATION

INITIATION A LA PROGRAMMATION 2004-2005 Université Paris Dauphine IUP Génie Mathématique et Informatique INITIATION A LA PROGRAMMATION PROCEDURALE, A L'ALGORITHMIQUE ET AUX STRUCTURES DE DONNEES PAR LE LANGAGE C Maude Manouvrier La

Plus en détail

Programmation C. J.-F. Lalande. 15 novembre 2012

Programmation C. J.-F. Lalande. 15 novembre 2012 Programmation C J.-F. Lalande novembre 0 Ce cours est mis à disposition par Jean-François Lalande selon les termes de la licence Creative Commons Attribution - Pas d Utilisation Commerciale - Partage à

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche Chapitre 1 Arbres binaires de recherche 1 Les arbre sont très utilisés en informatique, d une part parce que les informations sont souvent hiérarchisées, et peuvent être représentées naturellement sous

Plus en détail

Les structures. Chapitre 3

Les structures. Chapitre 3 Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs (2 ème partie : assembleur 80x86) Vincent Vidal IUT Lens Architecture des ordinateurs p. 1 Organisation Durée : 8 semaines. Cours 1h, TP 3h Intervenants TP : Coste, Loukil,

Plus en détail

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon 13 janvier 2015 2 Table des matières Organisation générale du cours 7 1 Notions générales d algorithmique et de programmation

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

Les arbres binaires de recherche

Les arbres binaires de recherche Institut Galilée Année 2010-2011 Algorithmique et arbres L2 TD 6 Les arbres binaires de recherche Type en C des arbres binaires (également utilisé pour les ABR) : typedef struct noeud_s { struct noeud_s

Plus en détail

Les fichiers. Chapitre 4

Les fichiers. Chapitre 4 Chapitre 4 Les fichiers Jusqu à maintenant tous les programmes que nous avons conçus travaillaient sur des données qui étaient perdues après chaque session de travail. On peut cependant, c est bien naturel,

Plus en détail

C ellules. Gestion et récupération automatique de mémoire. Principes des lang. de progr. INE 11. Allocation dynamique de mémoire.

C ellules. Gestion et récupération automatique de mémoire. Principes des lang. de progr. INE 11. Allocation dynamique de mémoire. Principes des lang. de progr. INE 11 Michel Mauny ENSTA ParisTech Prénom.Nom@ensta.fr Michel Mauny (ENSTA ParisTech) INE 11 Prénom.Nom@ensta.fr 1 / 37 Gestion et récupération automatique de mémoire lanage

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Arbres binaires de recherche (ABR) Binary Search Trees (BST)

Arbres binaires de recherche (ABR) Binary Search Trees (BST) LSVIII-BIM Algorithmie, 2015 Arbres binaires de recherche (ABR) Binary Search Trees (BST) I. Arbres binaires 1. Structure 2. Parcours II. Arbres binaires de recherche 1. Définition 2. Opérations sur les

Plus en détail

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier Cours de C Petits secrets du C & programmation avancée Sébastien Paumier paumier@univ-mlv.fr Illustrations provenant du site http://tux.crystalxp.net/ 1 Affectations étendues a+=expression a=a+expression

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

Arbres binaires en représentation chaînée

Arbres binaires en représentation chaînée Arbres binaires en représentation chaînée Construction Libération Opérations diverses 17/01/06 Bac2 - JMD - ArbrBin.ppt 1 Arbre n-aire Arbre binaire a b c d e f arbre n-aire e b a c f d arbre binaire 17/01/06

Plus en détail

CORRECTIONS DES EXERCICES DU CONCOURS D ENTREE EPITA 2005

CORRECTIONS DES EXERCICES DU CONCOURS D ENTREE EPITA 2005 CORRECTIONS DES EXERCICES DU CONCOURS D ENTREE EPITA 2005 REMARQUE : Les programmes en Pascal, C sont des exemples et peuvent être discutés en terme d implémentation et de construction. Le choix qui a

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing 3/4/27 Programmation Avancée Multimédia Multithreading Benoît Piranda Équipe SISAR Université de Marne La Vallée Besoin Programmes à traitements simultanés Réseau Réseau Afficher une animation en temps

Plus en détail

Langage Éric Guérin 5 octobre 2010

Langage Éric Guérin 5 octobre 2010 Langage Éric Guérin 5 octobre 2010 Langage C TABLE DES MATIÈRES Table des matières 1 Introduction 7 1.1 Historique........................................... 7 1.2 Architecture matérielle....................................

Plus en détail

Systèmes Informatiques TD 3: langage C opérations élémentaires

Systèmes Informatiques TD 3: langage C opérations élémentaires Systèmes Informatiques TD 3: langage C opérations élémentaires P. Bakowski bako@ieee.org Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques.

Plus en détail

Optimisation de code

Optimisation de code Optimisation de code Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Optimisation de code 1 / 77 But L optimisation cherche à améliorer

Plus en détail

Compilation séparée. Compilation séparée. ENSIIE: Programmation avancée, Compilation séparée, Modularité, Spécifications algébriques 1

Compilation séparée. Compilation séparée. ENSIIE: Programmation avancée, Compilation séparée, Modularité, Spécifications algébriques 1 Compilation séparée Compilation séparée ENSIIE: Programmation avancée, Compilation séparée, Modularité, Spécifications algébriques 1 Compilation séparée Modularité GCC : 4 millions de lignes de code Noyau

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

LES TYPES DE DONNÉES DU LANGAGE PASCAL LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.

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

Structure fonctionnelle d un SGBD

Structure fonctionnelle d un SGBD Fichiers et Disques Structure fonctionnelle d un SGBD Requetes Optimiseur de requetes Operateurs relationnels Methodes d acces Gestion de tampon Gestion de disque BD 1 Fichiers et Disques Lecture : Transfert

Plus en détail

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21

Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21 Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21 Anne Brygoo, Maryse Pelletier, Christian Queinnec, Michèle Soria Université Paris 6 Pierre et Marie Curie septembre 2005

Plus en détail

Le prototype de la fonction main()

Le prototype de la fonction main() Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme

Plus en détail

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia Ministère de l Enseignement Supérieur, de la Recherche Scientifique et de la Technologie Direction Générale des Etudes Technologiques Institut Supérieur des Etudes Technologiques de Djerba SUPPORT DE COURS

Plus en détail

Le système de gestion des fichiers, les entrées/sorties.

Le système de gestion des fichiers, les entrées/sorties. Le système de gestion des fichiers, les entrées/sorties. Luigi Santocanale Laboratoire d Informatique Fondamentale, Centre de Mathématiques et Informatique, 39, rue Joliot-Curie - F-13453 Marseille 19

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

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

Claude Delannoy. 3 e édition C++

Claude Delannoy. 3 e édition C++ Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.

Plus en détail

Initiation aux algorithmes des arbres binaires

Initiation aux algorithmes des arbres binaires Initiation aux algorithmes des arbres binaires Plan I. Les arbres biniaires I. Définition II. Représentation graphique d un arbre III. Terminologie IV. Représentation en mémoire des arbres binaires V.

Plus en détail

Programmation Classique en langage C

Programmation Classique en langage C DI GALLO Frédéric Programmation Classique en langage C Cours du Cycle d Approfondissement CNAM ANGOULEME 2000-2001 DI GALLO Frédéric Page 1 01/04/01 PROGRAMMATION CLASSIQUE : LANGAGE C DI GALLO Frédéric

Plus en détail

Sommaire MQL4 pour les nuls

Sommaire MQL4 pour les nuls Sommaire MQL4 pour les nuls 1. Introduction 2. MetaEditor 3. Les types de données 4. Les variables 5. Expressions et opérateurs 6. Les fonctions 7. Instructions conditionnelles et boucles 8. Indentations,

Plus en détail

INF111. Initiation à la programmation impérative en C http://ama.liglab.fr/ amini/cours/l1/inf111/ Massih-Reza Amini

INF111. Initiation à la programmation impérative en C http://ama.liglab.fr/ amini/cours/l1/inf111/ Massih-Reza Amini Initiation à la programmation impérative en C http://ama.liglab.fr/ amini/cours/l1// Massih-Reza Amini Université Joseph Fourier Laboratoire d Informatique de Grenoble 2/52 Introduction Structures de contrôle

Plus en détail

Cours de programmation avancée. Le langage C. Université du Luxembourg 2005 2006

Cours de programmation avancée. Le langage C. Université du Luxembourg 2005 2006 Université du Luxembourg 2005 2006 Cours de programmation avancée. Le langage C Sébastien Varrette Version : 0.4 Nicolas Bernard 2 Table des matières

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail