Langage C Avancé. Solutions des Travaux Pratiques : Préparé par : Abdelmajid Dargham 1. Version : Mai 2014

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

Download "Langage C Avancé. Solutions des Travaux Pratiques : Préparé par : Abdelmajid Dargham 1. Version : Mai 2014"

Transcription

1 Solutions des Travaux Pratiques : Langage C Avancé Préparé par : Abdelmajid Dargham 1 Version : Mai Enseignant-chercheur à la Faculté des Sciences, Oujda

2 2 Exercice 1 Solutons des exercices de la série N 1 1. Prototype de la fonction : void quotient_reste_1(int, int); Définition de la fonction : void quotient_reste_1(int x, int y) int q, r; q = 0; /* quotient */ r = x; /* reste */ while(r >= y) q++; r = r - y; printf("quotient = %d, Reste = %d\n", q, r); 2. Prototype de la fonction : int* quotient_reste_2(int, int); Définition de la fonction : int* quotient_reste_2(int x, int y) int* qr; qr = (int*) malloc(sizeof(int) * 2); qr[0] = 0; /* quotient */ qr[1] = x; /* reste */ while(qr[1] >= y) qr[0]++; qr[1] = qr[1] - y; return qr; 3. Prototype de la fonction : void quotient_reste_3(int, int, int*, int*); Définition de la fonction : void quotient_reste_3(int x, int y, int* q, int* r) *q = 0; /* quotient */ *r = x; /* reste */

3 3 while(*r >= y) (*q)++; *r = *r - y; Le programme principal : main() int a, b, q, r; int* qr; printf("valeur de a : "); scanf("%d", &a); printf("valeur de b : "); scanf("%d", &b); /* Appel de quotient_reste_1 */ quotient_reste_1(a, b); /* Appel de quotient_reste_2 */ qr = (int*) malloc(sizeof(int) * 2); qr = quotient_reste_2(a, b); printf("quotient = %d, Reste = %d\n", qr[0], qr[1]); /* Appel de quotient_reste_3 */ quotient_reste_3(a, b, &q, &r); printf("quotient = %d, Reste = %d\n", q, r); getch(); Exercice 2 1. Le programme précédent affichera : j = 0 j = 0 j = 0 j = 0 j = 0 j = 0 j = 0 j = 0 j = 0 j = 0

4 4 La valeur finale de j est 11 Justification : la variable j déclarée dans la ligne 2 est une variable globale (initialisée avec la valeur 11). Elle est allouée une fois pour toute, dans le segment de Données pendant la phase de compilation. la variable j déclarée dans la ligne 8 est une variable locale au bloc de l instruction for (initialisée avec la valeur 0). Elle est ré-alouée et réinitialisée à chaque entrée dans la boucle (à chaque itération) dans le segment de Pile pendant la phase d exécution. L instruction printf (ligne 9) va afficher toujours j = 0 (10 fois). L instruction d incrémentation (j + +) sera exécutée et la valeur de j passera à 1, mais dès que l on quitte le bloc de for, la variable j sera détruite. Après la terminaison de la boucle, la variable j concernée par l instruction printf (ligne 12) est la variable globale déclarée dans la ligne 2. Cette variable n est pas modifiée dans le programme, elle gardera alors sa valeur initiale qui est 11. L affichage produit est alors : La valeur finale de j est Si l on remplace la déclaration int j = 0 ; dans la ligne 8 par static int j = 0 ;, l affichage sera : j = 0 j = 1 j = 2 j = 3 j = 4 j = 5 j = 6 j = 7 j = 8 j = 9 La valeur finale de j est 11 Justification : ce qui a changé c est la déclaration d une variable statique j dans la ligne 8. Cette variable est allouée une fois pour toute, dans le segment de Données pendant la phase de compilation. Elle est aussi initialisée avec la valeur 0. À chaque itération, l instruction printf (ligne 9) affichera la valeur de j, puis l incrémentation de j est effectuée. Comme la variable j est statique, elle gardera toujours sa dernière valeur. D où l affichage : j = 0 j = 1 j = 2

5 5 j = 3 j = 4 j = 5 j = 6 j = 7 j = 8 j = 9 Après la terminaison de la boucle, la variable j concernée par l instruction printf (ligne 12) est la variable globale déclarée dans la ligne 2 (et non pas la variable statique j, car celle-ci n est visible que dans le bloc for). L affichage produit est alors : La valeur finale de j est 11 Exercice 3 1. La macro-fonction : #define DOUBLE(n) ((n) + (n)) 2. Le programme affichera : Le double de n est 14 La valeur finale de n est 9 Justification : la première instruction printf contient le code DOUBLE(n + +). Le pré-processeur effectue alors une expansion du texte DOUBLE(n++) en (n + +) + (n + +). Par suite, la valeur calculée est = 14. L affichage résultant est : Le double de n est 14 Mais, cette instruction causera un effet de bord : la variable n est incrémentée 2 fois. comme la variable n a été incrémenté 2 fois, sa nouvelle valeur est 9, la deuxième instruction printf affiche alors : La valeur finale de n est 9 3. La fonction ordinaire long int doubler 1(long int) : long int doubler1(long int n) return n + n; 4. La fonction en ligne inline long int doubler2(long int) :

6 6 inline long int doubler2(long int n) return n + n; 5. Si l on remplace l appel de la macro-fonction DOUBLE(n++) par l appel doubler1(n++), l affichage produit par le programme est : Le double de n est 14 La valeur finale de n est 8 Justification : la première instruction printf contient maintenant un appel de fonction doubler1(n++). La valeur calculée est 7+7 = 14 et l affichage sera : Le double de n est 14 Après, la variable n est incrémentée une seule fois (n = 8). La deuxième instruction printf affiche donc : La valeur finale de n est 8 6. Si l on remplace l appel de la macro-fonction DOUBLE(n++) par l appel doubler2(n++), l affichage produit par le programme est : Le double de n est 14 La valeur finale de n est 8 Justification : la première instruction printf contient maintenant un appel de fonction doubler2(n + +). Comme elle s agit d une fonction en ligne, l incrémentation dans l appel ne cause pas un effet de bord. La valeur calculée est = 14 et l affichage sera : Le double de n est 14 Après, la variable n est incrémentée une seule fois (n = 8). La deuxième instruction printf affiche donc : La valeur finale de n est 8 7. Programme (complet) pour comparer les temps d exécution des trois fonctions : #include <stdio.h> #include <time.h> #define DOUBLE(n) ((n) + (n)) long int doubler1(long int n)

7 7 return n + n; inline long int doubler2(long int n) return n + n; main() float t1, t2, t; long int n = 7; long int i; long int a; puts("temps d execution de la macro-fonction DOUBLE :"); t1 = clock(); for(i = 0; i < ; i++) a = DOUBLE(n); t2 = clock(); t = (float) (t2 - t1) / CLOCKS_PER_SEC; printf("%f secondes\n", t); puts("temps d execution de la fonction ordinaire doubler1 :"); t1 = clock(); for(i = 0; i < ; i++) a = doubler1(n); t2 = clock(); t = (float) (t2 - t1) / CLOCKS_PER_SEC; printf("%f secondes\n", t); puts("temps d execution de la fonction en ligne doubler2 :"); t1 = clock(); for(i = 0; i < ; i++) a = doubler2(n); t2 = clock(); t = (float) (t2 - t1) / CLOCKS_PER_SEC;

8 8 printf("%f secondes\n", t); getch();

9 9 Exercice 1 Solutons des exercices de la série N 2 1. Fonction récursive qui calcule le quotient de l entier x par l entier y 0 par la méthode des soustractions : int quotient(int x, int y) if(x < y) return 0; return quotient(x - y, y) + 1; 2. Fonction récursive qui calcule la somme des chiffres d un entier x : int somme_chiffres(int x) if(x < 10) return x; return x % 10 + somme_chiffres(x / 10); 3. Fonction récursive qui calcule le produit de deux entiers x et y par la méthode Russe : int produit(int x, int y) if(y == 0) return 0; if(y % 2 == 0) return produit(2 * x; y / 2); return produit(x, y - 1) + x; Exercice 2 1. Fonction récursive qui calcule F (n) : int Fibo1(int n)

10 10 if(n <= 1) return 1; return Fibo1(n - 1) + Fibo1(n - 2); 2. Fonction itérative qui calcule F (n) en utilisant un tableau pour stocker les valeurs de F (i) pour les valeurs de i < n : int Fibo2(int n) if(n <= 1) return 1; int i; int *tab; tab = (int*) malloc(sizeof(int) * (n + 1)); tab[0] = 1; tab[1] = 1; for(i = 2; i <= n; i++) tab[i] = tab[i - 1] + tab[i - 2]; return tab[n]; 3. Fonction itérative qui calcule F (n) sans utiliser aucun tableau : int Fibo3(int n) if(n <= 1) return 1; int i, a, p, c; /* a : terme avant précédent */ /* p : terme précédent */ /* c : terme courant */ a = 1; p = 1; for(i = 2; i <= n; i++) c = p + a;

11 11 a = p; p = c; return c; On peut même utiliser 2 variables seulement : int Fibo4(int n) if(n <= 1) return 1; int i, p, c; /* p : terme précédent */ /* c : terme courant */ p = 1; c = 1; for(i = 2; i <= n; i++) c = c + p; p = c - p; return c; 4. Quelques définitions : Soit A un algorithme qui résout un problème P. Notons n la taille d une donnée d entrée pour l algorithme A (n est une mesure de la taille des paramètres de l algorithme A). Soit D le domaine des valeurs des paramètres de l algorithme A. L efficacité théorique en temps de l algorithme A est une approximation du temps d exécution T A (n) de l algorithme A. Cette approximation théorique est calculée indépendamment de l environnement d exécution de l algorithme A (compilateur utilisé, système d expolitation de la machine, caractéristiques matérielles de la machine,...etc). L approximation du temps d exécution d un algorithme peut être meséurée en se basant sur le nombre des opérations élémentaires (ou fondamentales) de l algorithme A.

12 12 L efficacité théorique en espace de l algorithme A est une approximation de l espace mémoire E A (n) requis pour exécuter l algorithme A. Cette approximation se calcule en mesurant la taille mémoire nécessaire pour faire fonctionner l algorithme A. Applications : calculons l efficacité théorique en temps et en espace des algorithmes Fiboi (i = 1, 2, 3, 4). Nous allons noter : T i (n) : l efficacité théorique en temps d exécution de l algorithme Fiboi. Elle sera mesurée par le nombre d instructions élémentaires : test, affectation, additions, multiplications, soustraction et instruction return. : l efficacité théorique en espace de l algorithme Fiboi. On mesurera la taille en octets des paramètres formels, des variables locales et des retours de la fonction. Analyse de l algorithme Fibo1 : T 1 (n) = 2, si n 1 et T 1 (n) = T 1 (n 1) + T 1 (n 2) + 3, si n 2. On peut résoudre cette équation de récurrence (il s agit d une equation de récurrence linéaire d ordre 2 avec second membre). Pour avoir une idée sur la solution, on va tout simplement minorer T 1 (n) par une fonction exponentielle. Il est clair que : T 1 (n) = 2T 1 (n 2) + T 1 (n 3) + 6 > 2T 1 (n 2) T 1 (n) > 2T 1 (n 2) > 2 2 T 1 (n 4) >... > 2 k T 1 (n 2k) Si n 2k = 2, c est-à-dire k = (n 2)/2, alors : T 1 (n) > 2 (n 2)/2 T 1 (2) = 7 2 (n 2)/2 = 7 2 ( 2) n Par exemple, T 1 (100) est très grand que (trois millions neuf cents quarante miles six cents quarante neuf milliards, six cents soixante treize millions, neuf cents quarante neuf miles cent quatre vignts quatre). E 1 (n) = 2 4 = 8 octets, si n 1 et E 1 (n) = E 1 (n 1) octets, si n 2. Donc, E 1 (n) = 8n octets. Analyse de l algorithme Fibo2 : T 2 (n) = 2, si n 1 et T 2 (n) = 4n + 3, si n 2. E 2 (n) = 2 4 = 8 octets, si n 1 et E 2 (n) = 4 (n + 4) = 4n + 16 octets, si n 2.

13 13 Analyse de l algorithme Fibo3 : T 3 (n) = 2, si n 1 et T 3 (n) = 6n, si n 2. E 3 (n) = 2 4 = 8 octets, si n 1 et E 3 (n) = 6 4 = 24 octets, si n 2. Analyse de l algorithme Fibo4 : T 4 (n) = 2, si n 1 et T 4 (n) = 6n, si n 2. E 4 (n) = 2 4 = 8 octets, si n 1 et E 4 (n) = 5 4 = 20 octets, si n Programme principale pour mesurer les temps d exécution pour calculer F (10), F (15), F (20),..., F (50) pour chacune des fonctions précédentes : main() int n, r; float t1, t2, t; for(n = 10; n <= 50; n += 5) t1 = clock(); r = Fibo1(n); t2 = clock(); t = (t2 - t1) / CLOCKS_PER_SEC; printf("fibo1(n) = %d\n", r); printf("temps d execution de Fibo1 : %d\n secondes", t); t1 = clock(); r = Fibo2(n); t2 = clock(); t = (t2 - t1) / CLOCKS_PER_SEC; printf("fibo2(n) = %d\n", r); printf("temps d execution de Fibo2 : %d\n secondes", t); t1 = clock(); r = Fibo3(n); t2 = clock(); t = (t2 - t1) / CLOCKS_PER_SEC; printf("fibo3(n) = %d\n", r); printf("temps d execution de Fibo3 : %d\n secondes", t); t1 = clock(); r = Fibo4(n); t2 = clock(); t = (t2 - t1) / CLOCKS_PER_SEC; printf("fibo4(n) = %d\n", r);

14 14 printf("temps d execution de Fibo4 : %d\n secondes", t); getch(); 6. Question hors série : cette question est hors-série. Exercice 3 1. D après la définition de la partie entière, F (x) = Maxk 0 k 2 x. On fait donc une recherche séquentielle pour trouver le plus grand élément de l ensemble k 0 k 2 x. D où la fonction suivante : int F(int x) int k = 0; while(k * k <= x) k++; return k - 1; Remarque : à la sortie de la boucle while, on a k 2 retourner est donc k 1. > x. La valeur à 2. Posons y = F (x/4). Par définition, y x/4 < y + 1 et par suite y 2 x/4 < (y + 1) 2 (2y) 2 x < (2y + 2) 2 2y x < 2y + 2. Il y a alors deux cas : si 2y x < 2y + 1, alors F (x) = 2y et si 2y + 1 x < 2y + 2, alors F (x) = 2y + 1. Le cas de base est F (0) = 0. D où l algorithme : int F(int x) if(x == 0) return 0; int y = F(x / 4); /* appel récursif */ if(x < (2 * y + 1) * (2 * y + 1)) return 2 * y; return 2 * y + 1;

15 15 Remarque : n utilisez pas pow(2 y + 1, 2), cette fonction est faite pour le type double et non pas pour le type int. Elle ne donne pas toujours un résultat correct. Par exemple pour les valeurs de x suivantes : 49, 789,..., elles donne des résultats faux. 3. Soit x 0 un entier. On sait que F (x) est le plus grand entier k vérifiant k 2 x. Si x 1, alors F (x) = x. Il est clair que 0 F (x) < x, pour x 2. On peut donc effectuer une rechreche dichotomique pour trouver k dans l intervalle [0...x]. Soient x 2 et d et f deux entiers tels que d 2 x < f 2. Il est clair que F (x) [d...f 1]. Si f = d + 1, alors F (x) = d. Sinon, l intervalle [d...f 1] contient au moins deux éléments. On le divise par deux en calculant son milieu m = (d + f)/2. Il y a alors trois cas : Si m 2 = x, alors F (x) = m. Si m 2 > x, alors F (x) [d...m]. Si m 2 < x, alors F (x) [m...f]. D où l algorithme : int F(int x, int d, int f) if(x <= 1) return x; if(f - d == 1) return d; int m = (d + f) / 2; if(m * m == x) return m; if(m * m < x) return F(x, m, f); return F(x, d, m); Voici un programme principal qui illustre l utilisation de ces trois fonctions (Nous appelons la première F1, la deuxième F2 et la troisième F3) : main() int x, y;

16 16 printf("donner la valeur de x : "); scanf("%d", &x); y = F1(x); printf("la valeur de F(x) par l algorithme 1 : %d\", y); y = F2(x); printf("la valeur de F(x) par l algorithme 2 : %d\", y); y = F3(x, 0, x); printf("la valeur de F(x) par l algorithme 3 : %d\", y); getch(); 4. Comparaison des temps d exécution des trois algorithmes : notons par T i (x) (resp. E i (x)) l efficacité en temps (resp. en espace) de l algorithme i. Analyse de l algorithme 1 : T 1 (x) = 3 x + 8, x 0. E 1 (x) = 3 4 = 12 octets, x 0. Analyse de l algorithme 2 : T 2 (x) = 2, si x = 0. Si x 1, on a : On en déduit alors que : 11 + T 2 ( x/4 ) T 2 (x) 12 + T 2 ( x/4 ) 11k + T 2 ( x 4 k ) T 2(x) 12k + T 2 ( x 4 k ) Soit k le plus petit entier tel que k log(4) < log(x), c est-à-dire k = 1 + log 4 (x). Alors : log 4 (x) T 2 (x) log 4 (x) On dit alors que T 2 (x) = Θ(log 4 (x)). E 2 (x) = 2 4 = 8 octets, si x = 0 et E 2 (x) = E 2 ( x/4 ) = 12 + E 2 ( x/4 ) octets, si x 1. On en déduit alors que : E 2 (x) = 12k + E 2 ( x 4 k ). Soit k = 1 + log 4 (x). Alors : E 2 (x) = 12(1 + log 4 (x) ) + 8 = ( log 4 (x) ) On écrit : E 2 (x) = Θ(log 4 (x)). Analyse de l algorithme 3 : On montre que T 3 (x) = Θ(log 2 (x)). On montre que E 3 (x) = Θ(log 2 (x)) octets. En conclusion, l algorithme le plus efficace en temps est l algorithme 2, car il est en Θ(log 4 (x)), et le plus efficace en espace et l algorithme 1, car il utilise une quantité de mémoire constante (Θ(1)).

17 17 Exercice 4 #include <stdio.h> #include <math.h> #include <stdarg.h> int bintodec(int nb,...) if(nb == 0) return 0; va_list x; int r = 0, i; va_start(x, nb); for(i = 0; i < nb; i++) r = r + (va_arg(x, int) - 0 ) * pow(2, nb i); va_end(x); return r;

18 18 Exercice 1 Solutons des exercices de la série N 3 (a) Correct : on affiche un caractère (%c) et \n est un caractère. (b) Incorrect : on affiche un caractère (%c), mais "\n" est une cha^ıne et n est pas un caractère. (c) Incorrect : on affiche une cha^ıne (%s), mais \n est un caractère et n est pas une cha^ıne. (d) Correct : on affiche une cha^ıne (%s) et "\n" est une cha^ıne. (e) Incorrect : le premier argument de printf doit ^etre une cha^ıne constante, mais \n ne l est pas. (f) Correct : le premier argument de printf doit ^etre une cha^ıne constante et "\n" est une cha^ıne constante. (g) Correct : l argument de putchar doit ^etre un caractère et \n est un caractère. (h) Incorrect : l argument de putchar doit ^etre un caractère et "\n" n est pas un caractère. (i) Incorrect : l argument de puts doit ^etre une cha^ıne, mais \n n est pas une cha^ıne. (j) Incorrect : puts("\n") va afficher deux sauts de lignes. (k) Correct : l argument de puts doit ^etre une cha^ıne et "" est une cha^ıne (vide, donc n affiche rien, mais après puts ajoute un saut de ligne à la fin). Exercice 2 Il suffit d analyser le prototype de chacune des deux fonctions : int putchar(int); int puts(const char*); (a) Incorrect, car p est un pointeur sur char et non pas un char. (b) Correct, car *p est un char (donc aussi un int). (c) Correct, car p est un pointeur sur char. (d) Incorrect, car *p est un char et non pas un pointeur sur char. Exercice 3 La fonction scanf doit lire un entier et le stocker dans la variable i, une chaîne et la stocker dans le variable s, puis un entier et le stocker dans la variable j. Il ne faut pas oublier que la fonction scanf lit les données depuis un tempon (buffer). Si l utilisateur a saisi l entrée :

19 19 12abc34 56def78 alors le tempon contiendra : Pour lire un entier (%d), scanf va accepter uniquement des chiffres. Par conséquent, les caractères 1 et 2 seront lus et l entier crée est 12. Maintenant, le pointeur de lecture pointe sur le caractère a. Pour lire une chaîne (%s), scanf va accepter tous les caractères sauf le caractère espace et tabulation. Par suite, les caractères a, b, c, 3 et 4 seront lus et la chaîne formée est abc34. Maintenant, le pointeur de lecture pointe sur le caractère espace. Pour lire un entier (%d), scanf va accepter uniquement des chiffres. Tout d abord, le caractère espace sera ignoré (car on doit lire un entier). Puis, les caractères 5 et 6 seront lus et l entier crée est 56. Maintenant, le pointeur de lecture pointe sur le caractère d. En conclusion, la variable i contient la valeur 12, la chaîne s contient la valeur abc34 et l entier j contient la valeur 56.

20 20 Exercice 4 Pour comprendre les effets des instructions, supposons par exemple que la chaîne str contient la valeur abc, ce qui sera schématisé par la figure suivante : (a) l instruction : *str = 0; affecte la valeur 0 à *str. Cela a pour effet de faire pointer str sur le caractère de code ASCII 0, c est-à-dire le caractère \0. Par suite, la chaîne str est vide : (b) l instruction : str[0] = \0 ; affecte le caractère \0 au premier élément de la chaîne str (c est-à-dire str[0]). Par conséquent, la chaîne str est vide : (c) l instruction : strcpy(str, ""); réalise une copie de la chaîne vide sur la cahîne str. Ce qui donne exactement le même effet :

21 21 (d) l instruction : strcat(str, ""); effectue la concaténation de la chaîne vide à la fin de la cahîne str. Ceci à pour effet d ajouter un autre caractère \0 à la fin de str : Dans ce cas, la chaîne str n est pas vide, mais contient la valeur abc. Finalement, l instruction qui est différente des trois autres est l instruction écrite en (d). Exercice 5 1. #include <ctype.h> 2. void majuscule(char str[]) int i = 0; while(str[i]!= \0 ) if(islower(str[i])) str[i] = toupper(str[i]); i++; main() char str1[20], str[20], *str2;

22 22 3. printf("str1 : "); gets(str1); majuscule(str1); puts(str1); /* on fait pointer str2 sur str */ str2 = str; printf("str2 : "); gets(str2); majuscule(str2); puts(str2); /* ou bien on alloue de la mémoire pour str2 */ str2 = (char*) malloc(sizeof(char) * 20); printf("str2 : "); gets(str2); majuscule(str2); puts(str2); getch(); void majuscule(char *str) while(*str!= \0 ) if(islower(*str)) *str = toupper(*str); str++; 4. Le programme principal ne change pas. Exercice 6 void modifier(char *str) while(*str) if(strncmp(str, "foo", 3) == 0) strnset(str, x, 3); str += 3;

23 23 str++; Exercice 7 int est_prefixe(const char *str1, const char *str2) while(*str1) if(*str1!= *str2) return 0; str1++; str2++; return 1; Exercice 8 #include <stdio.h> #include <string.h> #define TAILLE_MAX 20 typedef char chaine[taille_max + 1]; main() chaine str, courte, longue; printf("saisir une chaine : "); gets(str); if(*str == \0 ) printf("aucune chaine saisie, Arret du programme\n"); getch(); exit(0);

24 24 strcpy(courte, strcpy(longue, str)); while(1) printf("saisir une chaine : "); gets(str); if(*str == \0 ) break; if(strlen(str) < strlen(courte)) strcpy(courte, str); if(strlen(str) > strlen(longue)) strcpy(longue, str); printf("la chaine la plus courte est : %s\n", courte); printf("la chaine la plus longue est : %s\n", longue); getch();

25 25 Exercice 1 Solutons des exercices de la série N 4 Oui, elles sont légales. En effet, la première déclare une variable x de type structure (anonyme) et la deuxième déclare une variable y de type structure (également anonyme). La structure x peut avoir un champ de nom x (la règle de portée est respectée, car ce champ appartient au bloc entre accolades). Même chose pour y. Oui, on peut les mettre ensemble dans le même programme. L instruction d affectation : x = y; est interdite. En effet, le langage C considère deux variables dont le type n a pas été déclaré explicitement comme ayant des types non compatibles. Le compilateur va lancer une erreur d incompatibilité de types. Dans notre cas, même si les deux variables sont réellement deux structures comportant chacune deux entiers, mais elles sont incompatibles à cause du fait que leut type n a pas été déclaré d une manière explicite. Pour remédier à ce problème, on a plusieurs possibilités : 1. Déclarer x et y en même temps (moins efficace) : struct int x; int y x, y; 2. Déclarer le type d une manière explicite : struct t int x; int y x, y; 3. Déclarer le type avec un aléas : typedef struct t int x; int y; t x, y; Exercice 2 1. #include <stdio.h> main() struct char lettre; int numero; sigle;

26 26 2. #include <stdio.h> main() struct char lettre; int numero; sigle = X, 25; putchar(sigle.lettre); printf("%d\n", sigle.numero); getch(); 3. Dans le cours, on a vu que la taille mémoire d une structure est généralement la somme des tailles de ses champs. Si un char occupe 1 octet et un int 4 octets, notre structure devrait alors prendre au total 1+4 = 5 octets. Mais, voyons voir ce que ce code de vérification donne : #include <stdio.h> main() struct char lettre; int numero; sigle = X, 25; printf("la taille total est = %d octets\n", sizeof(sigle)); getch(); L exécution de ce code affiche : La taille total est = 8 octets Justification de ce phénomène : le bus de données permet souvent de charger un certain nombre d octets depuis la mémoire. Ce nombre d octets n est rien d autre que la taille du bus de données. Le processeur de l ordinateur peut ainsi charger 2, 4 ou 8 octets d un seul coup (et parfois plus). On dit que le processeur accède aux données stockées dans la mémoire par mot mémoire. Pour le cas d une structure, et afin de régulariser l accès à ses champs, le compilateur réalise ce qu on appelle un alignement des champs en tenant compte de la taille du bus de données.

27 Dans notre cas, la structure contient un champ de type char (1 octet) et un champ de type int (4 octets). Le compilateur va procéder à un alignement des champs en rajoutant 3 octets supplémentaires après le premier octet, ceci pour avoir des adresses multiples de 4. On peut vérifier ceci à l aide du code suivant : #include <stdio.h> main() struct char lettre; int numero; sigle = X, 25; 27 printf("adresse du premier champ : %d\n", &sigle.lettre); printf("adresse du second champ : %d\n", &sigle.numero); getch(); L exécution de ce code donne : Adresse du premier champ : Adresse du second champ : #include <stdio.h> struct sigle char lettre; int numero; ; main() struct sigle sig = X, 25; #include <stdio.h> struct sigle char lettre; int numero; ; void afficher(struct sigle s)

28 printf("%c%d\n", s.lettre, s.numero); main() struct sigle sig = X, 25; afficher(sig); getch(); #include <stdio.h> typedef struct sigle char lettre; int numero; sigle; void afficher(struct sigle s) printf("%c%d\n", s.lettre, s.numero); main() sigle les_sigles[3] = X, 101, X, 102, X, 103; int i; for(i = 0; i < 3; i++) afficher(les_sigles[i]); getch(); void modifier_numero(sigle *s, int n) (*s).numero = n; /* et non pas *s.numero = n; */ /* ou bien : s->numero = n; */ En effet, l opérateur. est plus prioritaire que l opérateur *. 8. #include <stdio.h>

29 typedef struct sigle char lettre; int numero; sigle; void afficher(struct sigle s) printf("%c%d\n", s.lettre, s.numero); void modifier_numero(sigle *s, int n) s->numero = n; main() sigle les_sigles[3] = X, 101, X, 102, X, 103; int i; 29 puts("avant :\n"); for(i = 0; i < 3; i++) afficher(les_sigles[i]); for(i = 0; i < 3; i++) modifier_numero(&les_sigles[i], i); puts("\napres :\n"); for(i = 0; i < 3; i++) afficher(les_sigles[i]); getch(); Exercice 3 1. typedef enum categorie INT, FLOAT, DOUBLE categorie; typedef struct Nombre categorie cat; union int ival; float fval; double dval; valeur;

30 Nombre; Nombre creer_nombre(categorie cat) Nombre n; n.cat = cat; switch(cat) case INT : printf("un entier : "); scanf("%d", &n.valeur.ival); break; case FLOAT : printf("un flottant : "); scanf("%f", &n.valeur.fval); break; case DOUBLE : printf("un double : "); scanf("%lf", &n.valeur.dval); break; return n; void afficher_nombre(nombre n) switch(n.cat) case INT : printf("un entier %d\n", n.valeur.ival); case FLOAT break; : printf("un flottant %f\n", n.valeur.fval); break; case DOUBLE : printf("un double : %lf\n", n.valeur.dval); break; main() Nombre tabnb[10]; Nombre *entiers, *floats, *doubles; int i, cat; int ni = 0, nf = 0, nd = 0; int j = 0, k = 0, l = 0;

31 31 for(i = 0; i < 10; i++) printf("categorie du nombre : "); scanf("%d", &cat); tabnb[i] = creer_nombre(cat); ni += (cat == INT); nf += (cat == FLOAT); nd += (cat == DOUBLE); entiers = (Nombre*) malloc(sizeof(nombre) * ni); floats = (Nombre*) malloc(sizeof(nombre) * nf); doubles = (Nombre*) malloc(sizeof(nombre) * nd); for(i = 0; i < 10; i++) switch(tabnb[i].cat) case INT : entiers[j] = tabnb[i]; j++; break; case FLOAT : floats[k] = tabnb[i]; k++; break; case DOUBLE : doubles[l] = tabnb[i]; l++; break; for(i = 0; i < ni; i++) afficher_nombre(entiers[i]); for(i = 0; i < nf; i++) afficher_nombre(floats[i]); for(i = 0; i < nd; i++) afficher_nombre(doubles[i]); getch();

32 32 Exercice 4 1. (a) x est un tableau de 10 pointeurs sur fonctions ayant comme argument un int et retournant un char. 2. (b) x est une fonction ayant n ayant pas d arguments et retournant un pointeur sur une fonction ayant comme argument un int et retournant un pointeur sur float. (a) typedef struct point float x; float y; point; point *p[10]; (b) char* (* (*p)[10] )(double); Exercice 5 Tout d abord, le prototype de la fonction est le suivant : int sigma(int (*f)(int), int n, int m); Une solution itérative : int sigma(int (*f)(int), int n, int m) int s = 0; int i; for(i = n; i <= m; i++) s += (*f)(i); /* ou bien : s += f(i) */ return s; Une solution récursive : (basée sur le fait que m i=n f(i) = m 1 i=n f(i) + f(m) ) int sigma(int (*f)(int), int n, int m) if(n > m)

33 33 return 0; return sigma(&f, n, m - 1) + f(m);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours d Algorithmique et de Langage C 2005 - v 3.0

Cours d Algorithmique et de Langage C 2005 - v 3.0 Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU cordeau@onera.fr Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris

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

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

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

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

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite

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

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

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

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

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

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

4. Les structures de données statiques

4. Les structures de données statiques 4. Les structures de données statiques 4.1 Tableaux à une dimension 4.1.1 Introduction Imaginons que dans un programme, nous ayons besoin simultanément de 25 valeurs (par exemple, des notes pour calculer

Plus en détail

Conventions d écriture et outils de mise au point

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

Plus en détail

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

Introduction au Langage de Programmation C

Introduction au Langage de Programmation C Faculté Polytechnique de Mons Service d'informatique Introduction au Langage de Programmation C Mohammed Benjelloun 1 ère Candidature Année académique 2003-2004 Avant-propos Ces notes permettent de se

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

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

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

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel) Algorithmes et Programmes Introduction à l informatiquel! Vie d'un programme! Algorithme! Programmation : le langage! Exécution et test des programmes Chapitre : Algorithmes et Programmes 2 Cycle de vie

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

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

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

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

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S. MINIMUM connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.I maj n 4) Equipe de formation sur les microcontrôleurs PIC Robert Toquebeuf

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

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

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

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

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

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

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

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

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

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

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

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

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) Modularité Extensions Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) généricité modules de première classe : peuvent être

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

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation Complexité Objectifs des calculs de complexité : - pouvoir prévoir le temps d'exécution d'un algorithme - pouvoir comparer deux algorithmes réalisant le même traitement Exemples : - si on lance le calcul

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

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

1 Recherche en table par balayage

1 Recherche en table par balayage 1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément

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

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

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

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

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

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

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

TP2 : tableaux dynamiques et listes chaînées

TP2 : tableaux dynamiques et listes chaînées Licence 2 Informatique 9 / 2014 TP2 : tableaux dynamiques et listes chaînées Contact.h 1 #include 2 #include 3 4 typedef struct contact { 5 char *nom; 6 char *num; 7 char *adresse;

Plus en détail

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS MASTER PROFESSIONEL LASERS, MATERIAUX, MILIEUX BIOLOGIQUES COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS Christine ANDRAUD 2007/08 2 PLAN DU COURS: I. Introduction II. III. IV. Notions de bases Types

Plus en détail

Logiciel de base. Première année ENSIMAG

Logiciel de base. Première année ENSIMAG Logiciel de base Première année ENSIMAG 1 Procédures, paramètres, pile En assembleur une fonction est une étiquette, c'est l'adresse de sa première instruction Lors de l'appel d'une fonction, la pile sert

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

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

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

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

COURS DE LANGAGE C. DIAO Oumar. oumar.diao@univ-rennes1.fr. Université de Rennes 1. Master 1

COURS DE LANGAGE C. DIAO Oumar. oumar.diao@univ-rennes1.fr. Université de Rennes 1. Master 1 COURS DE LANGAGE C DIAO Oumar oumar.diao@univ-rennes1.fr Université de Rennes 1 Master 1 théorie de l'information & cryptographie analyse numérique & modélisation Année universitaire 20112012 1 Table des

Plus en détail

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert

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

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

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

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

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation. Université du Québec à Chicoutimi Département d informatique et de mathématique Plan de cours Titre : Élément de programmation Sigle : 8inf 119 Session : Automne 2001 Professeur : Patrice Guérin Local

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

PROJET ALGORITHMIQUE ET PROGRAMMATION II PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du

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

Représentation d un entier en base b

Représentation d un entier en base b Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir

Plus en détail

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique. École Polytechnique de Montréal Département de Génie Informatique et Génie Logiciel Cours INF2610 Contrôle périodique Automne 2013 Date : 11 octobre 2013 de 18h à 20h Professeur : Boucheneb Hanifa Documentation

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

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail Finalités Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail Réalisé par sa modestie Arnaud de VILLEDON de NAIDE, le 9 mars 2013 Document sous licence GPL. Vous avez le droit d'en faire

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

Rappels sur les suites - Algorithme

Rappels sur les suites - Algorithme DERNIÈRE IMPRESSION LE 14 septembre 2015 à 12:36 Rappels sur les suites - Algorithme Table des matières 1 Suite : généralités 2 1.1 Déition................................. 2 1.2 Exemples de suites............................

Plus en détail

Outils pour la pratique

Outils pour la pratique Cinquième partie Outils pour la pratique 121 CHAPITRE 1 Les bases des séances de TP Avant de lire cettre section, il est suggéré de relire vos notes de cours se rapportant au système d exploitation Unix.

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

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

ALGORITHMIQUE ET PROGRAMMATION En C

ALGORITHMIQUE ET PROGRAMMATION En C Objectifs ALGORITHMIQUE ET PROGRAMMATION Une façon de raisonner Automatiser la résolution de problèmes Maîtriser les concepts de l algorithmique Pas faire des spécialistes d un langage Pierre TELLIER 2

Plus en détail

Représentation des Nombres

Représentation des Nombres Chapitre 5 Représentation des Nombres 5. Representation des entiers 5.. Principe des représentations en base b Base L entier écrit 344 correspond a 3 mille + 4 cent + dix + 4. Plus généralement a n a n...

Plus en détail