langage BCPL langage B C K&R C ANSI (C89) C99

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

Download "langage BCPL langage B C K&R C ANSI (C89) C99"

Transcription

1 Formation langage C

2 langage BCPL Ken Thompson langage B C K&R Dennis Ritchie C ANSI (C89) Brian Kernighan C99

3 Unix, Linux et autres noyaux très nombreux programmes langage C majeure partie des bibliothèques majeure partie des programmes système

4 Chapitre 0 : de l'obscurité au binaire bash langage interprété C langage compilé fichier texte programme programme

5 Avantages : un code incorrect ne compile pas grande rapidité d'exécution Fractal Benchmark (source :

6 Hello world! le mauvais exemple : exemple.c délimitent la fonction void main (void) { printf ("bonjour le monde!\n"); } main () fonction obligatoire, première à être exécutée void ici, signifie «rien» printf() fonction affichant du texte les instructions sont terminées par des points virgules

7 Compilation gcc exemple.c -o exemple -Wall compilateur source C programme binaire affiche les avertissements option pour spécifier le nom exemple.c:1: attention : return type of 'main' is not 'int' exemple.c: In function 'main': exemple.c:3: attention : implicit declaration of function 'printf' exemple.c:3: attention : incompatible implicit declaration of built-in function 'printf'

8 Processus fonctions doit retourner une valeur à l'os doit être déclarée (fichier d'en-tête) contient la déclaration de printf() type de retour = int = entier #include <stdio.h> int main (void) { printf ("bonjour le monde!\n"); return (0); } retourne la valeur 0

9 Les variables langage C langage typé chaque variable a un type type description propriétés int nombre entier (32 bits) signé de à char nombre entier (8 bits) signé, caractère de -2 7 à unsigned int nombre entier (32 bits) non signé de 0 à unsigned char nombre entier (8 bits) signé de 0 à float double nombre réel (flottant) simple précision nombre réel (flottant) double précision Déclaration : type nom_variable;

10 Exemple : int main (void) { int ma_variable; int autre_variable; autre_variable = ; ma_variable = autre_variable + 5; déclarations de variables affectations } return (0); déclarations : au début des fonctions

11 Affichage des variables printf ("contenu de la variable : %d\n", ma_variable); indique : ma_variable = entier arguments séparés par des virgules printf ("var1: %d, var2: %d\n", ma_variable, autre_variable);

12 Exemple complet : #include <stdio.h> int main (void) { int ma_variable; int autre_variable; } autre_variable = ; ma_variable = autre_variable + 5; printf ("var1: %d, var2: %d\n", ma_variable, autre_variable); return (0); [thaeron@synapse Sources]$ gcc tmp.c o tmp Wall [thaeron@synapse Sources]$./tmp var1: 42, var2: 37

13 Les autres opérateurs arithmétiques Opérateur Description + addition - soustraction * multiplication / division % modulo (reste de la division entière)

14 Structures conditionnelles Le if Exécute instructions si la condition est VRAIE if (condition) { instructions à exécuter si la condition est vraie; } else { instructions à exécuter si la condition est fausse; }

15 Opérateurs de comparaison Opérateurs valeur1 == valeur2 valeur1!= valeur2 valeur1 < valeur2 valeur1 <= valeur2 valeur1 > valeur2 Conditions Vraie si valeur1 et valeur2 sont égales Vraie si valeur1 n'est pas égale à valeur2 Vraie si valeur1 est inférieure à valeur2 Vraie si valeur1 est inférieure ou égale à valeur2 Vraie si valeur1 est supérieure à valeur2 valeur1 >= valeur2 #include <stdio.h> Vraie si valeur1 est supérieure ou égale à valeur2 int main (void) { int var1; var1 = 10; if (var1 == 10) { printf ("var1 est égale à 10\n"); } return (0); }

16 boucle while exécute des instructions TANT QUE la condition est vraie. while (condition) { instructions; } #include <stdio.h> commentaire int main (void) { int var; var = 0; /* exécuter la boucle tant que var est plus petite que 10 */ while (var < 10) { printf ("var = %d\n", var); var = var + 1; } return (0); }

17 Commentaires type C /* commentaire */ type C++ // commentaire Fin du chapitre 0

18 L'art du code avant de coder réfléchir organigramme idées structurées griffonnage IDENTER le code avant de compiler exécuter mentalement le code

19 Les variables type description propriétés int nombre entier (32 bits) signé de à char nombre entier (8 bits) signé, caractère de -2 7 à unsigned int nombre entier (32 bits) non signé de 0 à unsigned char nombre entier (8 bits) signé de 0 à short int nombre entier (16 bits) signé de à unsigned short int long int long long int unsigned long int nombre entier (16 bits) non signé nombre entier (32 ou 64 bits) signé nombre entier (64 bits) signé nombre entier (32 ou 64 bits) non signé de 0 à de à unsigned long long int nombre entier (64 bits) non signé de 0 à

20 Déterminer la taille sizeof (type); ou sizeof (variable); #include <stdio.h> int main (void) { char variable; printf ("int = %d octets\n", sizeof (int)); printf ("taille variable = %d octets\n", sizeof (variable)); } return (0); [thaeron@synapse Sources]$./tmp int = 4 octets taille variable = 1 octets

21 Déclaration et portée de variable Portée de fonction int main (void) { int ma_var; /* le reste du code ici */ } Variable globale, portée de programme #include <stdio.h> int ma_var; int main (void) { /* le code ici */ }

22 Variable de bloc, portée de bloc while (1 == 1) { int ma_var; } ma_var n'existe plus hors de la boucle

23 Déclarations de variables type nom_variable; type nom_variable1, nom_variable2, nom_variable3; type nom_variable1 = valeur1, nom_variable2 = valeur2; Elles ont toutes le mêmes type.

24 Les constantes Par défaut constante numérique int 42 int 42.0 double 42L long int 0x42 int (hexadécimal (base 16)) 042 int (octal (base 8))

25 Écriture sortie standard printf() peut afficher beaucoup de types de variables Séquence Type Format d'affichage %d (ou %i) int (short int, char) nombre entier %u unsigned (int, short int, char) nombre entier %c char caractères ASCII %ld long int nombre entier %lld long long int nombre entier %f float nombre réel %lf double nombre réel %e double notation scientifique %x int (short int, char) hexadécimal %s tableau de char chaîne de caractères %p adresse mémoire hexadécimal

26 Modificateurs affichage de 3 chiffres après la virgule printf ("%.3f\n", ); Exécution : 3.142

27 ASCII caractère = nombre 0 nombre 127 = caractère

28 Un caractère se marque entre apostrophes. Exemple Caractère A 'A' Exercices : Mettez le caractère ASCII 4 dans une variable de type char et affichez la valeur entière qui lui correspond en utilisant printf(). Mettez la valeur 50 dans une variable de type char et affichez le caractère ASCII qui lui correspond en utilisant printf().

29 Lecture de l'entrée standard scanf() lit saisie clavier, place dans une variable mêmes «séquences» que printf() Exemple : int mon_entier; scanf ("%d", &mon_entier); ne pas oublier le &

30 Exercices : Affichez le message «entrez un nombre entier :» puis le récupérer dans une variable en utilisant scanf(). Affichez la valeur puis affichez le message «nombre négatif» si la valeur est inférieur à 0 et le message «nombre positif» si la valeur est supérieure ou égale à 0. Utilisez dans un premier temps 2 if, puis un seul.

31 Les boucles boucle while exécute TANT QUE la condition est vraie initialisation variable de la condition; while (condition) { instructions; opération de fin de boucle; } int var = 0; while (var < 10) { /* instructions; */ var = var + 1; }

32 boucle for condensé de la boucle while for (initialisation; condition; opération de fin de boucle) { instructions; } int var; for (var = 0; var < 10; var = var + 1) { /* instructions; */ }

33 boucle do while comme while, mais exécute au moins 1 itération de la boucle do { instructions; } while (condition); Opérations sur les boucles mots clés : continue; revient à la condition break; sort de la boucle

34 Exercice : Écrivez un programme qui lit sur l'entrée standard un nombre entier N, puis qui affiche sur la première ligne une étoile, sur la deuxième ligne deux étoiles, etc, jusqu'à la Nième ligne. Exemple pour N = 4 : * ** *** ****

35 L'incrémentation var = var + 1; var++; post-incrémentation ++var; pré-incrémentation post-incrémentation = faible priorité, s'exécute après les autres instructions pré-incrémentation = grande priorité, s'exécute avant les autres instructions int variable = 42; printf ("variable = %d\n", variable++); printf ("variable = %d\n", variable); printf ("variable = %d\n", ++variable);

36 L'incrémentation var = var + 1; var++; post-incrémentation ++var; pré-incrémentation post-incrémentation = faible priorité, s'exécute après les autres instructions pré-incrémentation = grande priorité, s'exécute avant les autres instructions int variable = 42; printf ("variable = %d\n", variable++); printf ("variable = %d\n", variable); printf ("variable = %d\n", ++variable); lors de l'exécution : variable = 42 variable = 43 variable = 44

37 Les tableaux Ensemble de variables de mêmes types, consécutives en mémoire, et accessibles par un seul nom. Déclaration : type nom_tableau[nombre_de_valeurs]; nombre d'éléments du tableau C89 = constante obligatoire C99 = peut être une variable Exemple : int tableau_dentiers[10];

38 Pour accéder au Nième+1 élément du tableau nom_tableau[n] Pour accéder au 1er élément du tableau nom_tableau[0] Il est possible d'utiliser une variable en tant qu'indice : int indice = 12; int tableau_dentiers[14]; tableau_dentiers[indice] = 42; ATTENTION un tableau n'est pas automatiquement initialisé l'indice ne doit JAMAIS est supérieur à la taille du tableau

39 Initialisation lors de la déclaration type nom_tableau[taille] = {valeur1, valeur2, valeur3, valeur4}; Si TAILLE n'est pas indiquée, elle sera calculée par le nombre de valeurs d'initialisation. Exercice : Écrivez un programme, en utilisant un tableau, qui affiche les 10 premiers nombres de la suite de Fibonacci. La suite de Fibonacci est une suite très simple où chaque élément est la somme des 2 éléments qui sont avant lui. Le tout premier élément valant 0 et le deuxième valant 1. Si votre programme fonctionne il devrait afficher cette suite :

40 Chaînes de caractères tableau de variables de type char toujours terminé par le caractère nul '\0' (de valeur 0). Déclaration : char ma_chaine[taille_chaine + 1]; Déclaration et initialisation : pour le caractère nul char ma_chaine[10] = "ma chaine"; 9 caractères de «ma chaine» + 1 caractère pour le caractère nul. Le tableau à une taille de 10 caractères. Une chaîne est toujours entre apostrophes. char ma_chaine[20] = "ma chaine"; Idem, mais le tableau à une taille de 20 caractères.

41 Déclaration sans indiquer la taille char ma_chaine[] = "ma chaine"; La taille est déterminée par la longueur de «ma chaine» ATTENTION : Il est totalement interdit de faire directement une affectation d'une chaîne en dehors de la déclaration.

42 Fonctions de manipulation de chaînes Fonction strlen (chaine); strcpy (destination, source); strcat (destination, source); strcmp (chaine1, chaine2); strcasecmp (chaine1, chaine2); Comportement Renvoie la taille de chaine. Recopie la source dans la destination. Ajoute la source à la fin de la destination. Renvoie 0 si les deux chaînes sont identiques. Renvoie 0 si les deux chaînes sont identiques sans tenir compte de la casse. Fonctions déclarées dans le fichier d'en-tête string.h #include <string.h>

43 Fonction reprenant le comportement de strlen() #include <stdio.h> #include <string.h> int main (void) { int taille = 0; char chaine[] = "ceci est ma chaine"; while (chaine[taille]!= '\0') { taille++; } printf ("longueur de la chaine : %d\n", taille); } return (0);

44 Exercice : Essayez chacune des fonctions, et écrivez un programme qui reproduit le comportement de chacune de ces fonctions sauf strcasecmp(). Fonction sprintf() printf() dans une chaîne de caractères Exemple : float mon_flottant = 3.14; sprintf (ma_chaine, "flottant = %f", mon_flottant); Exercice : Écrivez un programme qui demande la saisie d'un nombre entier, puis convertissez le en chaîne de caractères avec sprintf() et affichez chaque chiffre qui compose ce nombre.

45 Le if plus complet forme simple if (condition) { /* instructions si la condition est vraie; */ } else { /* instructions si la condition est fausse; */ } Évaluation de plusieurs conditions Opérateur CONDITION1 && CONDITION2 CONDITION1 CONDITION2 Condition exprimée Si CONDITION1 ET CONDITION2 sont vraies Si CONDITION1 OU CONDITION2 sont vraies

46 Exemple : if ((valeur1 > 0 && valeur1 < 100 && valeur2 == 0) (valeur1 > 50 && valeur2 == 1)) VRAI si : valeur1 est positive, inférieure à 100 et que valeur2 vaut 0 ou si valeur1 est supérieure à 50 et valeur2 vaut 1 Exercice : Écrivez un programme qui converti en minuscule (ou en majuscule) une chaîne de caractères pouvant contenir n'importe quel caractère imprimable de la table ASCII. Il faudra donc traiter uniquement les caractères allant de A à Z (ou de a à z) et ne pas modifier les autres.

47 Chaînage des if if (condition1) { /* si condition1 est vraie */ } else if (condition2) { /* si condition1 est fausse et que condition2 est vraie */ } else if (condition3) { /* si condition1 et condition2 sont fausses et que condition3 est vraie */ } else { /* si toutes les précédentes conditions sont fausses */ }

48 Bloc à 1 seule instruction possibilité d'enlever les accolades if (condition) { instruction1; /* seule instruction affectée à if */ } instruction2; équivalent à if (condition) instruction1; /* seule instruction affectée à if */ instruction2;

49 Tests d'un entier switch / case switch (variable) { case valeur1: /* instructions si variable == valeur1 */ break; case valeur2: /* instructions si variable == valeur2 */ break; case valeur3: /* instructions si variable == valeur3 */ break; default: /* instructions si variable n'est égale à aucune des valeurs */ }

50 Exercice : Écrivez un programme qui demande d'entrer 2 nombres réels et un opérateur (+,-,*,/), puis utilisez switch / case pour effectuer l'opération et affichez le résultat. Demandez à l'utilisateur s'il désire recommencer ou s'il veut quitter le programme.

51 Tableaux à 2 dimensions Ensemble de tableaux consécutifs en mémoire Déclaration : type nom_tableau[nb_tableaux][taille_tableaux]; On y accède par des indices : tab[0] désigne le premier tableau tab[1][0] désigne le premier élément du 2ème tableau

52 Exemple tableau de chaînes : #include <stdio.h> #include <string.h> int main (void) { char tab[4][8]; strcpy (tab[0], "ceci"); strcpy (tab[1], "est"); strcpy (tab[2], "un"); strcpy (tab[3], "exemple"); } return (0);

53 Envoi de paramètres au programme int main (void) int main (int argc, char *argv[]) nombre de paramètres tableau de chaînes contenant les paramètres Exercice : Écrivez un programme qui affiche, par ligne, un paramètre et son numéro.

54 Transtypage (type cast) permet le changement de type d'une expression ou d'une variable transtypage implicite int mon_int; char mon_char = 40; mon_int = mon_char + 2; mon_char est converti automatiquement en int transtypage explicite float flottant = ; printf ("%d\n", (int) flottant); à l'exécution : 3

55 Sans transtypage explicite : float flottant = ; printf ("%d\n", flottant); à l'exécution : transtypage préfixer l'expression par le nouveau type entre parenthèses

56 Manipulation de bits Opérateur var1 & var2 var1 var2 var1 ^ var2 var1 << n var1 >> n ~var1 Comportement ET bit à bit de var1 et var2 OU bit à bit de var1 et var2 XOR (OU Exclusif) bit à bit de var1 et var2 Décalage de n bits vers la gauche de var1 Décalage de n bits vers la droite de var1 Inversion de chaque bit de var1

57 Exemples unsigned char var1 = 0xAA; /* en binaire */ unsigned char var2 = 0x55; /* en binaire */ unsigned char resultat; resultat = var1 & var2; /* resultat vaudra 0 */ resultat = var1 var2; /* resultat vaudra 0xFF */ resultat = var1 ^ var2; /* resultat vaudra 0xFF */ resultat = var1 << 4; /* resultat en binaire */ resultat = 0xFF << 2; /* resultat en binaire */ resultat = 0xFF >> 2; /* resultat en binaire */ resultat = ~0xFF; /* resultat vaudra 0 */ resultat = ~var1; /* resultat vaudra 0x55 */

58 2 manipulations très utilisées Mettre à 1 dans resultat les bits à 1 de mask : resultat = resultat mask; Mettre à 0 dans resultat les bits à 1 de mask : resultat = resultat & (~mask); Exercice : Écrivez un programme qui demande à l'utilisateur d'entrer un nombre entier de 8 bits. Puis utilisez les manipulations de bits pour afficher le nombre en binaire (base 2).

59 Les fonctions Déclaration (prototype) type nom_fonction (type premier_argument, type deuxieme_argument); pas d'arguments void Exemple : type nom_fonction (void); pas de valeur de retour type void fichier d'en-tête (.h) contient principalement des prototypes.

60 Création de la fonction type nom_fonction (type premier_argument, type deuxieme_argument) { /* instructions; */ } Exemple, fonction valeure_absolue #include <stdio.h> float valeur_absolue (float nombre); /* prototype */ float valeur_absolue (float nombre) /* fonction */ { if (nombre > 0.0) return (nombre); else return (nombre * -1.0); }

61 Suite de l'exemple : int main (void) { float resultat; resultat = valeur_absolue (-12.0); printf ("%f\n", resultat); } return (0);

62 La mauvaise idée #include <stdio.h> void inc (int valeur) { valeur++; } int main (void) { int valeur; valeur = 5; inc (valeur); printf ("valeur vaut %d\n", valeur); } return (0);

63 Passage d'arguments = passage par valeur = création de nouvelles variables Cas des tableaux on préfère utiliser type *nom_tableau à type nom_tableau[] Exemple : void fibonacci (int *tableau, int taille); au lieu de void fibonacci (int tableau[], int taille);

64 Exercices : Reprenez le programme de la mini calculatrice, laissez les messages et les scanf() dans le main() et mettez le code principal, celui qui effectue l'opération selon l'opérateur, dans une fonction qui retournera le résultat, dont vous afficherez le résultat dans la fonction main(). Reprenez le programme qui copie le comportement de la fonction strcpy() et mettez ce code dans une fonction. Écrivez un programme comme «inc» de l'exemple mais qui modifie une variable globale (à portée de programme), et vérifiez dans le main que la valeur est bien modifiée.

65 Les pointeurs Un pointeur est une variable spéciale permettant d'être placée à n'importe quel endroit de la mémoire, ainsi elle permet de partager l'espace mémoire avec une autre variable et donc d'accéder à son contenu qui peut être lu et écrit. Déclaration : type *nom_pointeur; Propriétés nom_pointeur *nom_pointeur &nom_pointeur adresse mémoire pointée contenu de l'adresse mémoire pointée adresse mémoire propre au pointeur

66 Propriétés d'une variable «normale» type nom_variable; nom_variable &nom_variable contenu de la variable adresse mémoire de la variable Faire pointer un pointeur sur une variable nom_pointeur = &nom_variable; Si nom_pointeur pointe sur nom_variable : nom_variable = VALEUR; est équivalent à *nom_pointeur = VALEUR;

67 Exemple concret : #include <stdio.h> int main (void) { int variable = 40; int *pointeur; pointeur = &variable; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); *pointeur = 42; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); variable = 13; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); } return (0);

68 Exemple concret : #include <stdio.h> int main (void) { int variable = 40; int *pointeur; pointeur = &variable; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); *pointeur = 42; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); variable = 13; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); } return (0);

69 Exemple concret : #include <stdio.h> int main (void) { int variable = 40; int *pointeur; contenu de l'adresse pointée 40 contenu de la variable 40 contenu de l'adresse pointée 42 contenu de la variable 42 contenu de l'adresse pointée 13 contenu de la variable 13 pointeur = &variable; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); *pointeur = 42; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); variable = 13; printf ("contenu de l'adresse pointée %d\n", *pointeur); printf ("contenu de la variable %d\n", variable); } return (0);

70 Exercice : Reprenez le programme d'exemple «inc» et utilisez un pointeur de type int en argument afin de faire fonctionner correctement le programme. N'utilisez pas l'incrémentation ++, utilisez à la place l'opération développée.

71 Opérations sur les pointeurs tableau = pointeur int nom_tableau[10]; nom_tableau est un pointeur. On peut faire : int *pointeur; int nom_tableau[10]; pointeur = nom_tableau; pointeur[0] est équivalent à nom_tableau[0]

72 pointeur[0] est équivalent à nom_tableau[0] Ce qui est équivalent à : *(pointeur + 0) donc à *pointeur nom_tableau[0] pointeur[0] *pointeur nom_tableau[1] pointeur[1] *(pointeur + 1) nom_tableau[n] pointeur[n] *(pointeur + n)

73 pointeur++; incrémentation de l'adresse pointée On reprend : int *pointeur; int nom_tableau[10]; pointeur = nom_tableau; *pointeur pointeur++; *pointeur pointeur++; *pointeur pointeur[0] pointeur[0] pointeur[0] nom_tableau[0] nom_tableau[1] nom_tableau[2]

74 Exercice : Reprenez la fonction que vous avez écrite et qui reproduit le comportement de strcpy() et utilisez la notation des pointeurs et non plus celle des tableaux. Reprenez votre code qui reproduit le comportement de strcat(), mettez le dans une fonction et utilisez la notation des pointeurs au lieu de celle des tableaux.

75 Arithmétique des pointeurs On reprend : int *pointeur; int nom_tableau[10]; pointeur = nom_tableau; *(pointeur + 1) nom_tableau[1] Or un int a une taille de 4 octets le + 1 est automatiquement multiplié par 4 Généralisation : les opérations sont multipliées par sizeof (type)

76 Exercices : Reproduisez l'incrémentation d'un pointeur pour 2 types différents et affichez les adresses mémoire du pointeur avant et après l'incrémentation, vérifiez que c'est bien multiplié par la taille du type, on utilisera la «séquence» de format %p dans printf() ce qui affiche en hexadécimal une adresse mémoire. En utilisant un pointeur de type unsigned char sur une variable de type unsigned int à laquelle vous aurez affecté la valeur 0x , affichez en hexadécimal les valeurs des 4 octets qui composent la variable.

77 Endianness (boutisme) Résultat de l'exercice précédent : variable = 0x ; En mémoire on a : 0x44 0x33 0x22 0x11 architecture little endian (petite boutiste) l'ordre des bits dans les octets est conservé les octets sont écrits «à l'envers», les octets de poids faibles sont en premier Architecture big endian (grand boutiste) en mémoire on aurait : 0x11 0x22 0x33 0x44

78 Allocation dynamique Permet de réserver de la mémoire, par exemple pour créer des tableaux dont la taille peut changer au cours de l'exécution. allocation de mémoire réserve de la mémoire à une adresse pointeur Fonction (prototype) void *malloc (size_t taille); void *realloc (void *pointeur, size_t taille); void free (void *pointeur); Comportement Alloue taille octets et renvoie un pointeur sur la mémoire allouée. Change la taille allouée au pointeur et renvoie le nouveau pointeur. Libère l'espace mémoire alloué au pointeur. Fichier d'en-tête : stdlib.h

79 void *malloc (size_t taille); pointeur void = pointeur de tout type taille en octets à réserver size_t unsigned long int malloc() renvoie l'adresse (= le pointeur) de la mémoire allouée ou NULL en cas d'échec adresse mémoire 0 void *realloc (void *pointeur, size_t taille); nouvelle adresse mémoire pointeur sur la mémoire à réallouer (ou NULL) nouvelle taille voulue en octets

80 void free (void *pointeur); #include <stdlib.h> #include <string.h> #include <stdio.h> adresse mémoire dont la mémoire doit être libérée int main (void) { char *chaine; /*on alloue 10 octets */ chaine = malloc (10 * sizeof(char)); strcpy (chaine, "exemple"); printf ("contenu du pointeur : %s\n", chaine); /* on réduit la taille de la chaîne à 8 octets */ chaine = realloc (chaine, 8 * sizeof(char)); printf ("contenu du pointeur : %s\n", chaine); } /* on libère la mémoire allouée */ free (chaine); return (0);

81 Valgrind permet de vérifier l'utilisation de la mémoire et des pointeurs. Sources]$ valgrind programme ==30997== Memcheck, a memory error detector ==30997== Copyright (C) , and GNU GPL'd, by Julian Seward et al. ==30997== Using Valgrind SVN and LibVEX; rerun with -h for copyright info ==30997== Command: programme ==30997== contenu du pointeur : exemple contenu du pointeur : exemple ==30997== ==30997== HEAP SUMMARY: ==30997== in use at exit: 0 bytes in 0 blocks ==30997== total heap usage: 2 allocs, 2 frees, 18 bytes allocated ==30997== ==30997== All heap blocks were freed -- no leaks are possible ==30997== ==30997== For counts of detected and suppressed errors, rerun with: -v ==30997== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

82 Exercice : Reprenez le programme que vous avez écrit qui calcule la suite de Fibonacci, demandez à l'utilisateur combien de nombres de la suite le programme doit calculer. Utilisez l'allocation dynamique pour créer le tableau de type int de la bonne taille et procédez au calcul et à l'affichage des valeurs. Demandez à l'utilisateur s'il souhaite recommencer, ne libérez la mémoire que s'il souhaite quitter le programme, sinon utilisez realloc(). Écrivez une fonction qui prend 2 chaînes en arguments, et qui renvoie une chaîne dynamique contenant la concaténation des 2 chaînes passées en arguments.

83 Tableau à 2 dimensions dynamiques type tab[x][y]; type **tab;

84 Exercice : Écrivez un programme qui crée un tableau dynamique de chaînes dynamiques (cela se déclare ainsi : char **nom_tableau;) pour recopier les paramètres passés au programme (argv).

85 Les structures Ensemble de variables de types différents que l'on regroupe. Créer une structure revient à créer un nouveau type de variable contenant plusieurs variables. Déclaration de la structure struct nom_structure { type variable1; type variable2; }; Déclaration d'une variable du type de la structure struct nom_structure nom_variable;

86 #include <stdio.h> #include <string.h> struct structure_personne { int age; char nom[20]; }; int main (void) { struct structure_personne moi; moi.age = 25; strcpy (moi.nom, "Damien"); Accéder aux variables qui composent la structure : nom_variable.variable1 nom_variable.variable2 printf ("Je suis %s et j'ai %d ans\n", moi.nom, moi.age); } return (0);

87 Exemple de tableau de structure : int main (void) { int i; struct structure_personne personne[2]; personne[0].age = 25; strcpy (personne[0].nom, "Damien"); personne[1].age = 33; strcpy (personne[1].nom, "Jack"); for (i = 0; i < 2; i++) { printf ("%s, age : %d ans\n", personne[i].nom, personne[i].age); } } return (0); A l'exécution on a : Personne 0 : Damien, age : 25 ans Personne 1 : Jack, age : 33 ans

88 Pointeur de structure L'utilisation est la même qu'une structure sauf qu'on utilise -> et non. pour accéder aux variables membres. void remplir_pers (struct structure_personne *gens, char *nom, int age) { strcpy (gens->nom, nom); gens->age = age; } int main (void) { struct structure_personne personne; remplir_pers (&personne, "Damien", 25); printf ("%s, age : %d ans\n", personne.nom, personne.age); } return (0);

89 Problématique des tableaux de structures

90 Les listes chaînées structure contenant un pointeur du type de la structure permettant de pointer sur l'élément suivant, formant ainsi une chaîne de structures.

91 Suppression d'un élément de la chaîne cas 1 : l'élément n'est pas le premier élément

92 cas 2 : l'élément est le premier élément

93 Exercices : Reprenez ce code d'exemple et ajoutez des variables membres pour stocker un age et un nom. Écrivez une fonction permettant de lire ces données depuis la saisie clavier de l'utilisateur et de les ajouter dans un maillon. Écrivez une fonction qui parcours toute la chaîne et qui affiche les données de chaque maillon. Écrivez une fonction permettant de récupérer l'adresse d'un maillon à partir d'un nom. Écrivez une fonction qui permet de supprimer (en utilisant la fonction de suppression de l'exemple) un maillon à partir d'un nom. Écrivez une fonction qui supprime toute la chaîne (en libérant la mémoire). Ajoutez un menu permettant à l'utilisateur de choisir entre : ajouter un élément, afficher la liste, supprimer un élément, rechercher un élément ou quitter. Traitez le choix de l'utilisateur en utilisant les fonctions que vous avez créé précédemment.

94 Liste doublement chaînée struct liste_double { /* variables membres */ struct liste_double *precedent; struct liste_double *suivant; }; Suppression d'un maillon psuppr->precedent->suivant = psuppr->suivant; psuppr->suivant->precedent = psuppr->precedent;

95 Fonctions à nombre variable d'arguments Déclaration type nom_fonction (type argument1,...); Fonction void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); Comportement Crée une liste de type va_list des paramètres. Permet d'accéder aux paramètres un à un. Clos la liste de type va_list des paramètres. déclarées dans stdarg.h

96 void exemple_param_variable (int quantite,...) { int temp, i; va_list liste_param; /* la fonction va_start() prend en premier argument une liste de type va_list et en surtout en deuxième argument le premier argument, de notre fonction, qui va servir de point de repère. */ va_start (liste_param, quantite); for (i = 0; i < quantite; i++) { /* on indique le type de notre argument à récupérer est int */ temp = va_arg (liste_param, int); printf ("%d ", temp); /* on affiche notre entier */ } printf ("\n"); } va_end (liste_param); /* ne jamais oublier de clore cette liste */

97 suite de l'exemple int main (void) { exemple_param_variable (6, 0, 1, 2, 3, 4, 5); exemple_param_variable (3, 13, 42, 666); } return (0); Exercice : Écrivez une fonction ressemblant à printf(). Votre fonction prendra en premier argument une chaîne indiquant les types des variables à récupérer (s pour chaine, c pour caractère et d pour entier), selon l'exemple suivant, que vous afficherez. Exemple d'appel de votre fonction : votre_fonction ("ddsc", 13, 42, "test", 'B'); Ce qui devra afficher : entier : 13 entier : 42 chaine : test caractère : B

98 Remontée des erreurs la méthode choisie dans la bibliothèque standard est une variable globale nommée errno Cette variable contient le dernier code d'erreur écrit par la plupart des fonctions standards de la bibliothèque C. Ces codes sont des valeurs entières. définie dans errno.h Pour le transformer en message pour humain on a 2 fonctions : void perror (const char *s); Affiche le message correspondant à la dernière erreur, préfixé par le contenu de la chaîne s char *strerror (int errnum); Renvoie une chaîne correspondant au code d'erreur passé en argument (souvent la variable errno).

99 Manipulation de fichiers 2 méthodes méthode d'accès direct fonctions bufferisées (= avec tampon) Méthode d'accès direct Fonctions open read write lseek close Rôle Ouvre un fichier et renvoi son descripteur. Permet de lire des données d'un fichier. Permet d'écrire des données dans un fichier. Permet de se positionner dans un fichier. Ferme un fichier. #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>

100 open int open(const char *nom_fichier, int flags, mode_t modes); descripteur de fichier ou -1 en cas d'erreur nom du fichier mode d'ouverture permissions du fichier O_RDONLY O_WRONLY O_RDWR Ouverture en lecture seulement Ouverture en écriture seulement Ouverture en lecture et écriture Modes supplémentaires utilisables avec le OU logique O_CREAT Crée le fichier s'il n'existe pas déjà O_TRUNC Écrase le fichier s'il existe déjà (taille tronquée à 0) Permissions S_IRWXU (700 lecture / écriture / exécution owner) owner : S_IRUSR (lecture), S_IWUSR (écriture), S_IXUSR (exécution) groupe: S_IRGRP (lecture), S_IWGRP (écriture), S_IXGRP (exécution) autre : S_IROTH (lecture), S_IWOTH (écriture), S_IXOTH (exécution)

101 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <errno.h> int main (void) { int descripteur; /* on va ouvrir le fichier en lecture écriture et le créer si nécessaire */ descripteur = open ("monfichier.txt", O_RDWR O_CREAT, S_IRWXU); if (descripteur == -1) { perror ("open a échoué :"); return (-1); }

102 read ssize_t read(int fd, void *buffer, size_t count); nombre d'octets lus ou -1 en cas d'erreur descripteur pointeur ou tableau pour stocker les données nombre d'octets à lire int octets_lus; char tampon[101]; do { octets_lus = read (descripteur, tampon, 100); if (octets_lus > 0) { tampon[octets_lus] = '\0'; printf ("%s", tampon); } } while (octets_lus > 0);

103 write ssize_t write(int fd, const void *buffer, size_t count); nombre d'octets écrits ou -1 en cas d'erreur descripteur pointeur ou tableau à écrire nombre d'octets à écrire /* on est à la fin du fichier puisque on a tout lu */ if (write (descripteur, "fin de l'exemple", 16) == -1) perror ("l'écriture a échoué : ");

104 lseek Repositionner le curseur dans un fichier off_t lseek(int fd, off_t offset, int reference); décalage entre la position du curseur et le début du fichier descripteur décalage point de référence du décalage Valeur SEEK_SET SEEK_END SEEK_CUR Point de référence Début du fichier. Fin du fichier. Position actuelle.

105 Si nous voulons «rembobiner», retourner au début du fichier : lseek (descripteur, (off_t) 0, SEEK_SET); Allez à la fin du fichier : lseek (descripteur, (off_t) 0, SEEK_END); Revenir un octet avant la position actuelle : lseek (descripteur, (off_t) -1, SEEK_CUR); Mémoriser la position actuelle, il suffit alors de n'effectuer aucun décalage, lseek() renverra tout de même la position : off_t position; position = lseek (descripteur, (off_t) 0, SEEK_CUR); Si on désire revenir à cette position plus tard : lseek (descripteur, position, SEEK_SET);

106 Suite du grand exemple /* on repart tout au début du fichier */ lseek (descripteur, (off_t) 0, SEEK_SET); /* et on écrit */ if (write (descripteur, "début de l'exemple", 18) == -1) perror ("l'écriture a échoué : "); Close ferme le descripteur int close(int fd); 0 si la fermeture a fonctionné, -1 en cas d'erreur descripteur

107 Voici le contenu du fichier monfichier.txt : Ceci est un fichier texte pour montrer comment on utilise les fonctions en C de lecture de fichiers voilà Regardons l'exécution de notre exemple : Ceci est un fichier texte pour montrer comment on utilise les fonctions en C de lecture de fichiers voilà Le fichier est donc lu correctement, regardons le contenu du fichier après l'exécution : début de l'exempler texte pour montrer comment on utilise les fonctions en C de lecture de fichiers voilàfin de l'exemple

108 Les flux standards entrée standard (clavier), sortie standard (terminal), sortie d'erreur ont des descripteurs de fichier. entrée standard sortie standard sortie d'erruer STDIN_FILENO STDOUT_FILENO STDERR_FILENO Exemple d'utilisation : write (STDOUT_FILENO, "test", 4);

109 Exercices : Écrivez un programme qui détermine la taille du fichier en utilisant open(), lseek() et close(). Écrivez un programme avec une structure que vous remplirez, écrivez ensuite une fonction qui va écrire le contenu de cette structure directement dans un fichier. Puis écrivez une autre fonction qui va remplir une structure à partir du contenu du fichier.

110 Fonctions bufferisées (avec tampon) avantages : Fonctions fopen fread fwrite fgets fputs fprintf feof ftell fseek fclose utilisation plus souple performances élevées Comportement Ouvre un fichier et renvoie un pointeur de fichier. Lit des données depuis un fichier. Écrit des données dans un fichier. Lit une ligne (délimitée par un retour à la ligne) d'un fichier texte. Écrit une chaîne de caractères dans un fichier. Comme printf() et sprintf() mais la fonction écrit dans un fichier. Vérifie si on a atteint la fin du fichier. Renvoie la position du curseur dans le fichier. Permet de repositionner le curseur dans le fichier. Ferme le fichier. déclarées dans stdio.h

111 fopen ouverture de fichier FILE *fopen(const char *path, const char *mode); pointeur de fichier ou NULL en cas d'erreur nom du fichier mode d'ouverture du fichier "r" Mode "r+" Ouvre le fichier seulement en lecture. Description Ouvre le fichier en lecture et en écriture. Si le fichier n'existe pas il ne sera pas créé. "w" Ouvre le fichier en écriture et l'écrase s'il existe déjà (taille tronquée à 0). "w+" "a" "a+" Ouvre le fichier en lecture et en écriture. Si le fichier n'existe pas il sera créé dans le cas contraire il sera écrasé. Ouvre le fichier en écriture et le curseur est positionné à la fin du fichier. Le fichier est créé s'il n'existe pas déjà. Ouvre le fichier en lecture et en écriture. Le curseur est positionné au début du fichier mais chaque écriture sera faite à la fin du fichier. Si le fichier n'existe pas il sera créé.

112 Même exemple que le précédent mais avec les fonctions bufferisées #include <stdio.h> #include <errno.h> int main (void) { FILE *pointeur_fichier; pointeur_fichier = fopen ("monfichier.txt", "r+"); if (pointeur_fichier == NULL) { perror ("fopen a échoué : "); return (-1); }

113 fread lecture générique size_t fread(void *buffer, size_t size, size_t nmemb, FILE *stream); nombre d'éléments lus, -1 en cas d'erreur tableau ou pointeur où seront stockées les données nombre d'éléments à lire pointeur de fichier char tampon[101]; int elements_lus; taille d'un élément à lire do { elements_lus = fread (tampon, 1, 100, pointeur_fichier); if (elements_lus > 0) { tampon[elements_lus] = '\0'; printf ("%s", tampon); } } while (elements_lus > 0);

114 fwrite écriture générique size_t fwrite(void *buffer, size_t size, size_t nmemb, FILE *stream); nombre d'éléments écrits, -1 en cas d'erreur tableau ou pointeur contenant les données à écrire nombre d'éléments à écrire pointeur de fichier taille d'un élément à écrire /* on est à la fin du fichier puisque on a tout lu */ if (fwrite ("fin de l'exemple", 1, 16, pointeur_fichier) < 16) perror ("l'écriture a échoué : ");

115 fgets lecture d'une chaîne de caractères char *fgets(char *s, int size, FILE *stream); s ou NULL en cas d'erreur chaîne qui va contenir les données nombre de caractères à lire pointeur de fichier Remplaçons le code d'exemple de fread() par celui ci : char tampon[101]; char *retour; do { retour = fgets (tampon, 100, pointeur_fichier); if (retour!= NULL) printf ("%s", tampon); } while (retour!= NULL);

116 fputs écriture d'une chaîne de caractères int fputs(const char *s, FILE *stream); nombre de caractères écrits ou EOF en cas d'erreur chaîne à écrire pointeur de fichier Remplaçons le code d'exemple de fwrite() par celui ci : /* on est à la fin du fichier puisque on a tout lu */ if (fputs ("fin de l'exemple", pointeur_fichier) == EOF) printf ("l'écriture a échoué\n");

117 fprintf printf() dans un fichier int fprintf(file *stream, const char *format,...); pointeur de fichier s'utilise comme printf() et sprintf()

118 feof détermine si on a atteint la fichier du fichier int feof(file *stream); 0 si la fin du fichier n'est pas atteinte, 0 sinon pointeur de fichier if (feof (pointeur_fichier)!= 0) printf ("on a atteint la fin du fichier\n");

119 ftell renvoie le décalage (en octets) entre le curseur et le début du fichier long int ftell(file *stream); décalage pointeur de fichier fseek repositionne le curseur dans le fichier int fseek(file *stream, long offset, int reference); pointeur de fichier 0 si le positionnement est effectué, -1 en cas d'erreur décalage (en octets) point de référence du décalage (comme pour lseek())

120 fclose fermeture du fichier int fclose(file *fp); 0 si la fermeture est réussie, EOF en cas d'erreur pointeur de fichier

121 Les flux standards entrée standard (clavier), sortie standard (terminal), sortie d'erreur ont des pointeurs de fichier. entrée standard sortie standard sortie d'erruer stdin stdout stderr Exemple d'utilisation : /* lecture de l'entrée standard */ char buffer[51]; fgets (buffer, 50, stdin);

122 Exercices : Reprenez votre programme qui écrit la structure dans un fichier et adaptez le aux fonctions bufferisées. Écrivez un programme qui affiche sur la sortie standard le contenu de tous les fichiers textes (utilisez fgets()) passés en paramètres à votre programme (comme le ferait le programme cat).

123 Fonctions standards utiles void *memcpy(void *dest, const void *src, size_t n); Comme strcpy() mais générique, permet de recopier tous les types de données (tableaux de tous les types, structures) int memcmp(const void *s1, const void *s2, size_t n); Comme strcmp() mais générique, permet comparer tous les types de données (tableaux de tous les types, structures)

124 Recherches dans une chaîne char *strchr(const char *s, int c); Recherche le caractère (bien que ce soit un int) c dans la chaîne s et renvoie un pointeur à la première occurrence ou NULL si le caractère n'est pas trouvé. char *strstr(const char *haystack, const char *needle); Recherche la chaîne needle dans la chaîne haystack et renvoie un pointeur à la première occurrence ou NULL si la chaîne needle n'est pas trouvée.

125 Les noms symboliques directive préprocesseur #define associe un nom symbolique à une constante #define NOM_SYMBOLIQUE CONSTANTE Exemples : #define TAILLE 100 #define NOM_FICHIER "monfichier.txt" int mon_tableau[taille]; int autre_tableau[2*taille];

126 directive #ifdef terminée par #endif permet de tester si un nom symbolique existe, si c'est le cas le code entre #ifdef et #endif sera compilé dans le cas contraire il sera ignoré #define DEBUG_ACTIF int main (void) { int entier; /* des instructions du programme */ #ifdef DEBUG_ACTIF printf ("la valeur de entier est : %d\n", entier); #endif /* d'autres instructions du programme */ return (0); } #ifndef effectue le test inverse de #ifdef

127 Définition d'un nom symbolique par la ligne de commande de gcc option -DNOM_SYMBOLIQUE définit le nom symbolique comme s'il y avait un #define dans le code exemple : gcc source.c -o prog -Wall -DDEBUG_ACTIF

128 Programme en plusieurs fichiers sources.c cas mono source gcc source.c -o prog condensé de : gcc -c source.c gcc source.o -o prog source.o fichier objet = binaire compilé sans édition des liens donc non exécutable

129 cas multi sources gcc fichier1.c fichier2.c fichier3.c -o nom_programme condensé de : gcc -c fichier1.c gcc -c fichier2.c gcc -c fichier3.c gcc fichier1.o fichier2.o fichier3.o -o nom_programme

130 Fichier d'en-tête fichier d'en-tête (extension.h) ne contient pas de code mais uniquement : des prototypes des directives #define des directives #include parfois des variables globales Structure du fichier : /* on vérifie que le fichier n'a pas déjà été inclus */ #ifndef MONFICHIER_H #define MONFICHIER_H /* on place nos #define qui doivent être partagés */ /* on place ici les prototypes des fonctions */ /* on place ici nos variables globales à portées de programme */ #endif

131 source.h : #ifndef SOURCE_H #define SOURCE_H void afficher_globale (void); int ma_globale; #endif source0.c : #include "source.h" int main (void) { ma_globale = 42; afficher_globale (); return (0); } source1.c : #include "source.h" #include <stdio.h> void afficher_globale (void) { printf ("la variable vaut : %d\n", ma_globale); }

132 On compile : [thaeron@syndrome tmp]$ gcc -c source0.c -Wall [thaeron@syndrome tmp]$ gcc -c source1.c -Wall [thaeron@syndrome tmp]$ gcc source0.o source1.o -o prog -Wall On exécute : [thaeron@syndrome tmp]$./prog la variable vaut : 42 #include <fichier.h> #include "fichier.h" fichier.h est cherché dans /usr/include et /usr/local/include fichier.h est cherché dans le même répertoire que le source. On peut demander au compilateur de chercher dans un chemin particulier en plus de /usr/include avec l'option -Ichemin Exemple avec le chemin courant : gcc source.c -o prog -I.

133 Exercice : Reprenez l'un de vos derniers programmes contenant des fonctions. Placer certaines fonctions dans un autre fichier source et créez un fichier d'en-tête contenant les prototypes. Compilez votre projet.

134 Make et les Makefiles make = outils de compilation lisant les règles de compilation un fichier nommé Makefile make permet de ne pas tout recompiler lors de la modification d'un seul source. Principe des makefiles : indiquer les dépendances entre les fichiers On crée des variables (internes à make) contenant nos options de compilation et le nom du compilateur : CFLAGS=-c -Wall -I. LDFLAGS=-Wall CC=gcc

135 Les règles de compilation : nom_regle: dépendance1 dépendance2 dépendance3 commandes ATTENTION : la tabulation avant la commande est obligatoire. Si une dépendance est un fichier qui n'existe pas ainsi qu'une règle alors elle sera exécutée. La règle par défaut est «all»

136 CFLAGS=-c -Wall -I. LDFLAGS=-Wall CC=gcc all: programme programme: main.o routines.o extension.o $(CC) $(LDFLAGS) main.o routines.o extension.o -o programme main.o: main.c programme.h $(CC) $(CFLAGS) main.c routines.o: routines.c programme.h $(CC) $(CFLAGS) routines.c extension.o: extension.c programme.h $(CC) $(CFLAGS) extension.c

137 tmp]$ make gcc -c -Wall -I. main.c gcc -c -Wall -I. routines.c gcc -c -Wall -I. extension.c gcc -Wall main.o routines.o extension.o -o programme Si on refait make sans faire aucune modification : [thaeron@syndrome tmp]$ make make: Rien à faire pour «all». Si on supprime programme : [thaeron@syndrome tmp]$ make gcc -Wall main.o routines.o extension.o -o programme On voit très bien que make ne refait que l'édition des liens. Modifions maintenant main.c et refaisons make : [thaeron@syndrome tmp]$ make gcc -c -Wall -I. main.c gcc -Wall main.o routines.o extension.o -o programme make ne répète pas les autres compilations.

138 Exercice : Écrivez un Makefile pour le dernier programme que vous avez écrit qui est en plusieurs fichiers sources. Exemple d'un makefile automatisé : CC=gcc CFLAGS=-c -Wall -I. LDFLAGS=-Wall EXEC=programme all: $(EXEC) programme: main.o routines.o extension.o $(CC) $(LDFLAGS) $^ -o $@ %.o: %.c $(CC) $(CFLAGS) $<

139 Créer une bibliothèque bibliothèque statique : intégrée directement dans l'exécutable bibliothèque partagée : 1 fichier lié à tous les exécutables Exemple bibliothèque statique source.c : #include <stdio.h> void affichage (char *chaine) { printf ("%s\n", chaine); } exemple.h : void affichage (char *chaine);

140 Compilation gcc -c source.c Ensuite nous compilons notre fichier : gcc -c source.c Création bibliothèque statique(nommée libexemple.a) : ar r libexemple.a source.o On met à jour l'index de la bibliothèque statique : ar s libexemple.a

141 Programme utilisant la bibliothèque #include "exemple.h" int main (void) { affichage ("ceci est un test de la bibliothèque"); return (0); } Compilation : gcc programme.c -o programme -L. -lexemple indique que le chemin courant contient des bibliothèques indique que l'on doit «linker» l'exécutable à la bibliothèque libexemple

142 Bibliothèque partagée code source identique, seule la compilation change gcc -c -fpic source.c gcc -shared -Wl,-soname,libexemple.so -o libexemple.so source.o indique que la bibliothèque est partagée nom de la bibliothèque Compilation du programme utilisant la bibliothèque partagée est identique gcc programme.c -o programme -L. -lexemple Pour que la bibliothèque soit trouvée lors de l'exécution : export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$(pwd)

143 Exercice : Reprenez votre dernier programme contenant plusieurs fichiers. Créez une bibliothèque de votre choix avec le fichier source ne contenant pas la fonction main() et compilez l'autre source en tant que programme exécutable lié à votre bibliothèque.

GESTION DES FICHIERS C/UNIX

GESTION DES FICHIERS C/UNIX Licence IG Page 1 sur 6 GESTION DES FICHIERS C/UNIX Introduction Deux modes d appel - Par la bibliothèque standard C (appel de haut niveau) - Par appels système (bas niveau) Nécessite les includes suivant

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

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

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

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

Programmation impérative

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

Plus en détail

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

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

Cours 6 : Tubes anonymes et nommés

Cours 6 : Tubes anonymes et nommés Cours 6 : Tubes anonymes et nommés Mécanisme de communications du système de fichiers I-node associé. Type de fichier: S_IFIFO. Accès au travers des primitives read et write. Les tubes sont unidirectionnels

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

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

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

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

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

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

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

Plus en détail

Cours Langage C/C++ Programmation modulaire

Cours Langage C/C++ Programmation modulaire Cours Langage C/C++ Programmation modulaire Thierry Vaira BTS IRIS Avignon tvaira@free.fr «v0.1 Rappel Programmation modulaire (1/2) Le découpage d'un programme en sous-programmes est appelée programmation

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

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

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

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

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

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

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

Programmation en langage C

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

Plus en détail

Chapitre 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

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

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

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

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 en langage C Eléments de syntaxe

Programmation en langage C Eléments de syntaxe Programmation en langage C Eléments de syntaxe Université Paul Sabatier IUP Systèmes Intelligents L2 Module Informatique de base 2 Initiation à la programmation en langage C Isabelle Ferrané SOMMAIRE I-

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

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

Cours de Système : Gestion de Fichiers

Cours de Système : Gestion de Fichiers Cours de Système : Gestion de Fichiers Bertrand Le cun et Emmanuel Hyon bertrand.le cun{at}u-paris10.fr et Emmanuel.Hyon{at}u-paris10.fr Université Paris Ouest Nanterre 25 octobre 2011 B.L.C. & E.H. (UPO)

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

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

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

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

SYSTÈME DE GESTION DE FICHIERS

SYSTÈME DE GESTION DE FICHIERS SYSTÈME DE GESTION DE FICHIERS - DISQUE 1 Les couches logiciels réponse requête Requêtes E/S Système E/S Pilote E/S Interruptions utilisateur traitement S.E. commandes S.E. S.E. matériel Contrôleur E/S

Plus en détail

3IS - Système d'exploitation linux - Programmation système

3IS - Système d'exploitation linux - Programmation système 3IS - Système d'exploitation linux - Programmation système 2010 David Picard Contributions de : Arnaud Revel, Mickaël Maillard picard@ensea.fr Environnement Les programmes peuvent être exécutés dans 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

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

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS BTS IRIS Cours et Travaux Pratiques Programmation C A. Lebret, TSIRIS, Lycée Diderot, 1995/06 en conformité avec le référentiel du BTS IRIS Activité Codage et Réalisation Tâches T3.3, T3.4 et T3.5 Temps

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

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

Programmation système en C/C++

Programmation système en C/C++ Programmation système en C/C++ Jean-Baptiste Vioix (jb.vioix@free.fr) LE2I - ENESAD http://jb.vioix.free.fr 1-41 Programmation en C/C++ sous Unix Il existe des très nombreux outils de développement sous

Plus en détail

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE C.Crochepeyre MPS_SGF 2000-20001 Diapason 1 Les couches logiciels réponse SGF requête matériel matériel Requêtes E/S Système E/S Pilote E/S Interruptions Contrôleur

Plus en détail

Cours de C/C++ par la pratique. Hugues Talbot

Cours de C/C++ par la pratique. Hugues Talbot Cours de C/C++ par la pratique Hugues Talbot 24 octobre 2008 2 Table des matières 1 Comment démarrer? 7 1.1 Un programme simple en C pur.......................... 7 1.2 Un programme en C ++...............................

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

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

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence Licence Algorithmique & Langage C Paternité - Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique 2.0 France Vous êtes libres : * de reproduire, distribuer et communiquer cette

Plus en détail

COMPARAISONDESLANGAGESC, C++, JAVA ET

COMPARAISONDESLANGAGESC, C++, JAVA ET REPUBLIQUE DU BENIN *******@******* MINISTERE DE L ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE(MESRS) *******@******* UNIVERSITE D ABOMEY CALAVI(UAC) *******@******* ECOLE POLYTECHNIQUE D ABPOMEY

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

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année 2003-2004 Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES Maude Manouvrier La reproduction de ce document par

Plus en détail

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

Pensez à vous inscrire... si ce n est pas encore fait 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

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

V- Manipulations de nombres en binaire

V- Manipulations de nombres en binaire 1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,

Plus en détail

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Les débordements de tampons et les vulnérabilités de chaîne de format 1 Les débordements de tampons et les vulnérabilités de chaîne de format 1 Patrice Lacroix Groupe LSFM Département d informatique et de génie logiciel Université Laval 18 décembre 2002 1 Cette recherche a

Plus en détail

Le langage C. Introduction, guide de reference

Le langage C. Introduction, guide de reference Le langage C Introduction, guide de reference Ce document est une présentation du langage de programmation C, de sa syntaxe et de ses spécificités. Il est destiné essentiellement à servir de mémo-guide

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

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval École Nationale Supérieure de Techniques Avancées Programmation en C Pierre-Alain Fouque et David Pointcheval E-mail : Pierre-Alain.Fouque@ens.fr Web : http://www.di.ens.fr/~fouque/ Table des matières

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 langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

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

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

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

Programmation C++ (débutant)/instructions for, while et do...while

Programmation C++ (débutant)/instructions for, while et do...while Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de

Plus en détail

INF 321 : mémento de la syntaxe de Java

INF 321 : mémento de la syntaxe de Java INF 321 : mémento de la syntaxe de Java Table des matières 1 La structure générale d un programme 3 2 Les composants élémentaires de Java 3 2.1 Les identificateurs.................................. 3 2.2

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

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012 Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012 2011/2012 Pr. Ben Mamoun 1 Plan du cours (1) 1. Introduction 2. Types, opérateurs

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

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

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

Notions fondamentales du langage C# Version 1.0

Notions fondamentales du langage C# Version 1.0 Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage

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

Gestion de la mémoire

Gestion de la mémoire 433 43 3 Gestion de la mémoire + 1. Qu'est-ce que la mémoire? - Définitions, exemples 2. Allocation contiguë en mémoire - Partitions de taille fixe, de taille variable 3. Pagination et mémoire virtuelle

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

Introduction à l algorithmique et à la programmation M1102 CM n 3

Introduction à l algorithmique et à la programmation M1102 CM n 3 Introduction à l algorithmique et à la programmation M1102 CM n 3 DUT Informatique 1 re année Eric REMY eric.remy@univ-amu.fr IUT d Aix-Marseille, site d Arles Version du 2 octobre 2013 E. Remy (IUT d

Plus en détail

Programmation Structurée en Langage C

Programmation Structurée en Langage C École Centrale Marseille Programmation Structurée en Langage C Stéphane Derrode Mathématique et Informatique Révision 2.5, 2006. Table des matières 1 En guise d'introduction... 7 1.1 Quelques repères

Plus en détail

Programmation impérative

Programmation impérative Programmation impérative Programmation avancée en langage C F. Pellegrini ENSEIRB Ce document est copiable et distribuable librement et gratuitement à la condition expresse que son contenu ne soit modifié

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

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS CCS Sommaire Généralités sur le langage. 2 Structure d un programme en C.. 3 Les constantes et équivalences.. 4 Les variables...

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

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 14 Les fichiers

Cours 14 Les fichiers Cours 14 Les fichiers F. Gayral 1 Fichier : définition /media/travaux/documents/fgenseignement/java1/courstpsfgfc/14-fichiers/voirtypefichiers Fichier = ensemble d informations codées et stockées sur une

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

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 Informatique Master STEP

Cours Informatique Master STEP Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions

Plus en détail

Travaux Dirigés n 1 : chaînes de caractères

Travaux Dirigés n 1 : chaînes de caractères UE LE315 Travaux Dirigés n 1 : chaînes de caractères Exercice 1 Ecrire une fonction int nombre_caract(char *chaîne) qui retourne la taille d une chaîne de caractères. Exercice 2 Ecrire la fonction void

Plus en détail

Analyse de sécurité de logiciels système par typage statique

Analyse de sécurité de logiciels système par typage statique Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction

Plus en détail

INF 104 (SELC) 2012-2013 Introduction au langage C

INF 104 (SELC) 2012-2013 Introduction au langage C INF 104 (SELC) 2012-2013 Introduction au langage C Plan Première partie C après Java Structure d un programme Préprocesseur Variables Types de base Types composés Pointeurs(1) Instructions Deuxième partie

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

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...

Plus en détail

Cours de C. Allocation dynamique. Sébastien Paumier

Cours de C. Allocation dynamique. Sébastien Paumier Cours de C Allocation dynamique Sébastien Paumier paumier@univ-mlv.fr Illustrations provenant du site http://tux.crystalxp.net/ 1 Les pointeurs pointeur=adresse mémoire+type type* nom; nom pointe sur une

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

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique Communications entre Processus Communication par tubes. TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique Exemple 1: On a deux processus Père/Fils. Le père

Plus en détail