1.5- Les pointeurs et la gestion de la mémoire

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

Download "1.5- Les pointeurs et la gestion de la mémoire"

Transcription

1 1.5- Les pointeurs et la gestion de la mémoire 1- Notion de pointeur, déclaration et initialisation 2- La gestion de la mémoire et ses dangers 3- Opérations sur les pointeurs 4- Pointeurs et tableaux 5- Pointeurs et fonctions 6- Transtypage des pointeurs 1 Notion de pointeur, déclaration et initialisation La mémoire est organisée comme une série d'espaces qu'on peut remplir de valeurs ou dont on peut accéder le contenu. Généralement l'octet est l'espace de base. Chaque octet a un numéro unique, une adresse. La mémoire vive est divisée en emplacements d'un octet numérotés séquentiellement : Numérotation des octets Bits de chaque octet Dès que l'on défini un programme, les variables et les fonctions que l'on utilise occupent un espace en mémoire et ont une adresse qui leur est associée. Pour une variable ou une fonction, l'adresse qui lui est associée est le numéro du premier octet à partir duquel elle est stockée. Si un char, de taille 1 octet, est à l'adresse 34, cela signifie que ce sont les bits de l'adresse 34 qui définissent la valeur du char. Si un int, de taille 4 octets, est à l'adresse 34, cela signifie qu'il est codé sur les octets

2 Un pointeur est une variable particulière, c'est une variable qui contient une adresse, soit le numéro d'un octet à partir duquel est stocké une valeur. Opérateur & Pour obtenir l'adresse d'une variable (l'adresse du premier octet à partir duquel cette variable est stockée), on utilise l'opérateur &. Soit le code suivant : #include <isotream> int i=0; std::cout << "L'adress de i : " << &i; On constate que l'affichage est une valeur en base hexadécimale lorsque l'on exécute ce code. Pour obtenir une valeur entière, on procède à un transtypage : #include int i=0; std::cout << "L'adresse de i : " << (long)&i; On peut tester le cas d'une variable globale : #include <iostream> int a; double y; int i=0,j; double x; std::cout << "L'adress de i : " << (long)&i << "\n";

3 std::cout << "L'adress de j : " << (long)&j << "\n"; std::cout << "L'adress de x : " << (long)&x << "\n"; std::cout << "L'adress de y : " << (long)&y << "\n"; std::cout << "L'adress de a : " << (long)&a << "\n"; Sur un run, cela donne sur l'ordinateur du rédacteur de ce cours : L'adress de i : L'adress de j : L'adress de x : L'adress de y : L'adress de a : On constate que les variables globales ne sont pas stockées au même endroit que les variables locales à la fonction main() ici. On constate également que la numérotation est consécutive, avec les adresses qui sont séparées de la taille de la variable déclarée. Déclarer une variable pointeur Soit la déclaration suivante : int *pa=0; Ce code déclare pa non pas comme une variable entière, mais comme un pointeur sur un entier de type int. Donc pa stockera l'adresse d'une variable de type int. On peut tester la taille réservée à un pointeur en mémoire vive : std::cout << "La taille pour socker un pointeur : " << sizeof(int*) << "\n"; std::cout << "La taille pour socker un pointeur : " << sizeof(double*) << "\n"; On constate qu'un pointeur est stocké sur 4 octets, quelque soit le type sur lequel il pointe. Ce résultat aurait pu être anticipé : la forme de l'adresse d'un octet ne change pas, qu'il participe du stockage de la valeur d'un int ou d'un double. Il est bon de déclarer les variables pointeurs en faisant en sorte que leur nom commence par p, cf le fait que pour l'exemple précédent, on déclare int *pa; Ceci fait partie des conventions qui permettent de faciliter la lecture du code, mais qu'il n'est pas obligatoire d'adopter (en l'occurrence, celle-ci est très peu répandue, mais elle est peut être utile pour débuter). La machine sait que * est un opérateur sur pointeur et non pas l'opérateur de multiplication en fonction du contexte. Pour la déclaration suivante :

4 int* a,b,c; Dans ce cas, a est un pointeur sur entier, b est un entier et c un entier. L'opérateur * est associé à l'identifieur a dans ce qui précède et non pas au type int. Ce sera toujours le cas. Pour affecter l'adresse d'une variable à un pointeur : int a=5; int *pa; pa=&a; Bien sûr, pour affecter une adresse d'une variable à un pointeur, il faut que la variable et le pointeur soit compatible. Ie si a est de type entier, il faut que pa soit de type int*, ie qu'il soit un pointeur sur entier. Indirection L'indirection consiste à accéder la valeur contenue à l'adresse enregistrée dans un pointeur. On parle aussi de déréferencement d'un pointeur. Dans le cas d'une variable standard, récupérer son contenu n'est pas difficile : double y; double x=7; y=x; Dans ce qui précède, on récupère le contenu de x dans y. Pour accéder la valeur d'un pointeur : double y; double x=7; double *pz=&x; // pz est un pointeur qui contient l'adresse de x y=*pz; L'opérateur d'adressage indirect (*) devant le nom d'une variable signifie "Valeur stockée à l'adresse". double x=5; double *px=&x; *px=7; cout << "La valeur de x : " << x; Ici la valeur de x est 7 après la manipulation. On modifie la valeur de x en modifiant la valeur stocké à l'adresse de x, cette adresse étant stockée dans px. Noter une autre écriture équivalente mais décomposée : double x=5; double *px; px=&x; *px=7; cout << "La valeur de x : " << x;

5 Noter bien la différence entre l'affectation d'un pointeur conjointe à sa déclaration et l'affectation d'un pointeur hors de sa déclaration. Un danger grave lié à la manipulation des pointeurs : manipuler un pointeur sans lui affecter d'adresse double x=5; double *px; cout << (long)px << "\n"; *px=7; cout << "La valeur de x : " << x; Ce code peut s'exécuter et pourtant il contient une erreur très grave. En effet, on déréference le pointeur px, mais sans que l'on ait affecté d'adresse à ce pointeur. Quelle adresse contient donc le pointeur? Lorsque la machine crée la variable pointeur px, elle lui affecte un emplacement. L'adresse contenue dans ce pointeur est donc totalement imprévisible : elle dépend de ce qu'il y avait auparavant dans la mémoire. Une bonne méthode peut consister à mettre tout pointeur à NULL ou à 0 (ce qui est équivalent) lors de sa déclaration (ou bien lui affecter l'adresse d'une variable précédemment déclarée) : double x=5; double *px=0; //on aurait pu mettre également double *px=null; cout << (long)px << "\n"; *px=7; cout << "La valeur de x : " << x; Dans ce cas, le code produirait une erreur lors de l'exécution : au moins le concepteur est conscient du problème lorsqu'il a initialisé le pointeur à NULL (0). De manière générale, la manipulation des pointeurs peut conduire à un certain nombre d'erreurs. Leur manipulation doit s'accompagner de parcimonie au risque sinon de modifications aux conséquences imprévisibles. Une précaution particulière doit être apportée à l'initialisation des pointeurs. Il faut donc ne jamais laisser de déclaration "sèche" de la forme : double *px; Toujours concevoir le code de manière à avoir : double px=&y; ou à tout le moins : double px=0; // ce qui est equivalent à double px=null; Pointeur sur pointeur Il est bien sur possible de définir des pointeur sur pointeurs :

6 int **t; Ici t est un pointeur sur pointeur d'entier. Il contient l'adresse d'une variable qui contient l'adresse d'un entier. Nous ne rentrons pas plus dans les détails ici. Usage des pointeurs Pourquoi manipuler des pointeurs? Passer des variables par référence à des fonctions / création de fonctions avec plusieurs variables de retour. Créer des structures de données ad hoc en fonction d'un problème. On pourra créer les structures de données qui prennent le moins en temps et en espace. Les pointeurs sont à la base d'optimisations significatives. Utilisation du tas Les usages seront développés et exemplifiés plus tard. En plus des usages qui peuvent être présentés ici, ils seront très utiles pour la manipulation des objets. 2 La gestion de la mémoire et ses dangers Organisation de la mémoire Cf le chapitre sur les fonctions : la création de variables se fait dans la pile pour les variables locales aux fonctions. Il existe un autre mode de stockage des variables. Lors de l'exécution d'un programme, une zone de mémoire est réservée pour ce programme. Au sein de cette zone de mémoire, on distingue notamment deux espaces : la pile associée au programme et le tas. Ce tas représente une série d'octets destinés à recevoir des données. Il ne sera libéré qu'à la fin de l'exécution du programme. Dans ce tas, le programmeur peut librement affecter des octets au stockage de variables. Ce stockage n'est plus géré automatiquement comme c'est le cas pour les variables locales ou globales qui sont stockées dans la pile. C'est au programmeur de prévoir les instructions d'affectation et de libération de la mémoire. Les pointeurs permettent de manipuler les données qui sont stockées dans le tas. new et delete new et delete sont deux opérateurs de C++ qui remplacent une série d'opérateurs du C : malloc, calloc, realloc et free. On

7 commence par rappeler le cas des variables locales qui sont stockées dans la pile. Soit le code suivant : void methode1() int j; for(int i=0;i<7;i++) int j2; Dans ce cas, la variable j est locale à methode1() : c'est à dire qu'elle n'existe que dans le bloc d'instructions (l'espace entre les deux accolades) qui correspond à la définition de la fonction, cette variable est stockée dans la pile lors de l'exécution. L'espace qui lui est dédiée dans la pile sera libéré à la fin de l'exécution de la fonction De la même façon, la variable j2 est locale au bloc d'instructions de la boucle. Pour des variables locales à un bloc d'instructions, l'espace qui leur est dédié est crée dans la pile au début de l'exécution de ce bloc d'instruction, il est libéré ensuite à la fin de ce bloc d'instructions. void variation(int j,double x)... Dans ce cas, le passage des deux paramètres se fait par valeur : la machine crée un double local à la fonction, de même qu'un entier local à la fonction. Dans le cas où les variables sont créées comme des variables locales à un bloc d'instructions, elles sont là aussi gérées dans la pile et l'espace qui leur est associé sera libéré à la fin de l'exécution. Jusqu'à maintenant, le cours n'a fait que déclarer des variables dans la pile. Il est possible de manipuler des variables qui ne sont pas locales à un bloc d'instructions : c'est à dire déclarer des variables dans la partie de la mémoire vive qui s'appelle le tas. Si une variable est déclarée dans cette partie de la mémoire vive, qu'elle soit déclarée au sein d'une fonction, d'une boucle, d'une instruction conditionnelle, elle ne sera pas libérée lors de la fin d'exécution de la fonction, de la boucle, de l'instruction conditionnelle. Pour déclarer une variable entière dans le tas alors qu'on dispose d'une variable px de type int* : px=new int; Avec cette instruction, un espace mémoire de la taille d'un int sera reservé dans le tas. Par suite, il faudra libérer la mémoire vive qui a été réservée : delete px;

8 L'instruction delete px libère la mémoire vive dans le tas, mémoire qui avait été réservée pour la variable px. Bien sûr, à la fin de l'exécution du programme, le tas est libéré. Exemple complet #include <iostream> int localvar=5; int *plocal=&localvar; int *pheap=new int; *pheap=7; cout << "localvar : " << localvar <<< "\n"; cout << "*plocal : " << *plocal << "\n"; cout << "*pheap : " << *pheap << "\n"; delete pheap; pheap=new int; *pheap=9; cout << "*pheap " << *pheap << "\n"; delete pheap; return 0; Dans le code précédent on illustre la création de variable dans le tas (new int) et la destruction de cette variable (delete pheap). Un autre exemple : #include <iostream> using namespace std; int* triabulle(long tab[],int nbelts) bool b=true; int *nbechanges=new int; *nbechanges=0; while(b) b=false; for(int i=0;i<nbelts-1;i++)

9 if(tab[i]>tab[i+1]) long echange=tab[i]; tab[i]=tab[i+1]; tab[i+1]=echange; b=true; (*nbechanges)++; return nbechanges; int triabulle2(long tab[],int nbelts) bool b=true; int nbechanges=0; while(b) b=false; for(int i=0;i<nbelts-1;i++) if(tab[i]>tab[i+1]) long echange=tab[i]; tab[i]=tab[i+1]; tab[i+1]=echange; b=true; nbechanges++;

10 return nbechanges; srand(time(0)); int nbelements=10; long tableau[nbelements]; for(int i=0;i<nbelements;i++) tableau[i]=rand(); int *nbechs=triabulle(tableau,nbelements); std::cout << "Le nombre des echanges : " << *nbechs << "\n"; delete nbechs; for(int i=0;i<nbelements;i++) tableau[i]=rand(); int nbechas=triabulle2(tableau,nbelements); std::cout << "Le nombre des echanges : " << nbechas << "\n"; Dans cet exemple, on trie un tableau par la méthode du tri à bulle et on renvoie un pointeur sur une adresse dans le tas qui contient le nombre d'échanges effectués pas la fonction alors que l'autre fonction de tri renvoie un entier contenant le nombre d'échanges. A noter qu'à chaque appel de la fonction triabulle, une nouvelle variable est réservée dans le tas. Danger de la gestion directe de la mémoire - Fuite de mémoire Réaffecter une valeur à un pointeur alors que celui est l'unique référence d'un espace mémoire fait perdre la référence d'un espace mémoire que la machine considère comme affecté. Par exemple : int *px=new int; px=new int; On a perdu la référence sur le premier espace mémoire en faisant cela, mais la machine ne considère pas cet espace comme disponible. Dans le tas, l'espace pour un entier a été réservé, mais on ne dispose plus de l'adresse à laquelle il a été enregistré. Il y a là un espace considéré comme occupé par la machine qui n'est pas libérable. Cet espace est perdu pour le temps du programme.

11 Un autre exemple de fuite de mémoire : on crée un pointeur comme une variable locale d'une fonction. On initialise ce pointeur avec new : à moins de renvoyer la valeur du pointeur par la fonction (ou solution équivalente), on perd de nouveau l'adresse de l'espace réservé pour l'entier qui pourtant est occupée par un entier. Danger des pointeurs - delete Il ne faut pas utiliser un pointeur pour lequel on a libéré l'espace mémoire delete. Une bonne méthode consiste à affecter la valeur nulle à un pointeur après avoir liberé l'espace mémoire qu'il pointe, sinon, si on réaccède cet espace mémoire, on risque de provoquer une erreur. Soit le code suivant, il produit une erreur : 3 Opérations sur les pointeurs Que se passe t'il si on rajoute 1 à une variable de type pointeur? #include <iostream> int n; int *pn=&n; double x; double *px=&x; std::cout << "Taille de int : " << sizeof(int) << " Taille de double : " << sizeof(double) << "\n"; std::cout << (long)pn << " " << (long)(pn+1) << " " << (long)(pn+2) << "\n"; std::cout << (long)px << " " << (long)(px+1) << " " << (long)(px+2) << "\n"; L'exécution sur la machine de l'auteur : Taille de int : 4 Taille de double : On constate que l'adresse obtenue en ajoutant 1 au pointeur est l'adresse du pointeur augmentée de la taille d'un entier lorsque le pointeur est un pointeur sur entier, augmentée de la taille d'un double quand le pointeur est un pointeur sur double. En ajoutant 1 à un pointeur sur entier d'adresse x, on obtient un pointeur sur x+taille d'entier, en ajoutant 1 à un pointeur sur double, on obtient un pointeur sur x+taille double. On verra que pour les objets c'est la même chose.

12 On peut manipuler les adresses en utilisant les opérateurs : +, -, ++, - -. Il faut cependant faire attention à l'ordre de priorité des opérateurs, ainsi, si nbechange est un pointeur sur entier (int*), les deux opérations suivantes sont différentes *nbechanges++; est différent de (*nbechanges)++; Dans le premier cas, on incrémente la valeur du pointeur de 1 : on obtient le premier octet suivant l'entier. Dans l'autre cas, on augmente la valeur de l'entier pointé par nbechanges. On peut conclure de ce petit exemple que l'opérateur *, ou opérateur d'indirection, est prioritaire sur l'opérateur ++ (de manière générale, il sera prioritaire sur l'ensemble des opérateurs de calcul). 4 Pointeurs et tableaux Un tableau On peut tester les adresses des différents entiers contenus dans un tableau d'entiers : #include <iostream> int tab[5]; for(int i=0;i<5;i++) std::cout << &tab[i] << " "; std::cout << "\n" << (long)tab; On peut obtenir un résultat de la forme : On constate que les différentes variables contenues dans le tableau sont stockées les unes à la suite des autres, séparées seulement par un espace de la taille du stockage d'une variable du type du tableau. Une autre remarque à faire sur le code précédent : le nom du tableau se comporte comme une variable de type pointeur qui contient l'adresse du premier élément du tableau. De fait, il devient possible de manipuler l'ensemble des éléments d'un tableau sans utiliser la syntaxe habituelle consacrée à cet usage, en récupérant l'adresse du tableau dans une variable de type pointeur : #include <iostream>

13 int tab[5]; int *a=tab; Ainsi, on dispose désormais de deux moyens de parcourir un tableau : Ce code ne provoque pas d'erreur : c'est qu'un tableau d'entiers est conservée comme une adresse en mémoire. En créant un tableau de 5 entiers, on réserve 5 espaces de taille int en mémoire, on retient l'adresse du premier. On dispose donc de deux moyens pour parcourir le tableau : #include int tab[5]; int *a=tab; tab[0]=0; tab[1]=1; tab[2]=2; tab[3]=3; tab[4]=4; for(int i=0;i<5;i++) std::cout << *(tab+i) << " "; std::cout << "\n"; for(int i=0;i<5;i++) std::cout << tab[i] << " "; Attention un tableau n'est pas un pointeur dans la norme. A noter que non seulement il est possible de manipuler une variable de type tableau comme un pointeur, il est également possible de manipuler une variable de type pointeur comme un tableau : #include <iostream> int c=7,b=6,a=5; std::cout << (long)&a << " " << (long)&b << " " << (long)&c << "\n"; //on constate que les espaces utilisés pour le stockage des variables sont consécutifs en mémoire. int *pa=&a; pa[2]=10; std::cout << a << " " << b << " " << c << "\n";

14 Un tableau dans le tas Il est possible de déclarer un tableau dans le tas, pour ce faire : int *t=new int[100]; Elimination d'un tableau dans le tas : delete[] t; Tableau de pointeurs Il est bien sûr possible de manipuler des collections d'adresses, soit des tableaux de pointeurs : int *t[100]; (note, pour un tableau de pointeurs dans le tas : int **t=new int*[10];) 5 Pointeurs et fonctions Passage par valeur Pour constater le passage par valeur, on montre que les variables créées sont à une adresse différente de celle qui sont utilisées pour l'appel : #include <iostream> void f1(int x) std::cout << "Execution de f1 : " << (long)&x << "\n"; int n=3; std::cout << "Execution de main : " << (long)&n << "\n"; f1(n); En exécutant ce code, on obtient : Execution de main : Execution de f1 : On constate que les variables f1 et n sont stockées à deux adresses différentes : cf donc le passage par valeur.

15 Pointeur en paramètre : passage par référence Les pointeurs rendent possible le passage par référence de variables. Pour passer des variables par référence, on passe l'adresse d'une variable en paramètre plutôt que sa valeur. Soit par exemple une fonction qui calcule les racines d'un polynôme. Cette fonction peut devoir renvoyer non pas une mais deux valeurs, on peut proposer un prototype de la forme : int solvepolydeg2(double a,double b,double c,double* racine1,double *racine2); La fonction prend un premier paramètre qui est le coefficient du terme de degré 2, un second paramètre qui est le coefficient du terme de degré 1, un dernier paramètre ou terme constant. racine1 et racine2 sont deux pointeurs sur double : on passe l'adresse de deux variables : ces adresses sont celles de deux variables qui ont été déclarées dans la fonction appelante. La valeur ou les valeurs calculées pour les racines seront placées à ces adresses. La fonction renvoie le nombre des racines qui ont été découvertes. Avant de voir son appel, on définit la fonction : int solvepolydeg2(double a,double b,double c,double* racine1,double *racine2) double deter=b*b-4*a*c; if(deter>0) double rac=pow(deter,0.5); *racine1=(-b-rac)/(2*a); *racine2=(-b+rac)/(2*a); return 2; else if(deter==0) *racine1=-b/(2*a); *racine2=*racine1; return 1; else return 0; L'appel se fait alors de cette manière : double sol1; double sol2;

16 int nombreracine=solvepolydeg2(1,-2,1,&sol1,&sol2); if(nombreracine==0) std::cout << "Pas de racine"; else if(nombreracine==1) std::cout << "Racine unique : " << sol1; else std::cout << "Deux racines : " << sol1 << " et " << sol2; Dans ce qui précède, on crée deux variables sol1 et sol2 dans main. On passe l'adresse de ces deux paramètres lors de l'appel de la fonction solvepolydeg2 : lors de l'exécution de cette fonction, deux variables locales sont créées qui sont de type double*, soit des pointeurs sur double. Lors de l'appel, les adresses des variables sol1 et sol2 de main sont copiées dans les variables racine1 et racine2 qui sont locales à la fonction solvepolydeg2. Ensuite, la manipulation de *racine1 et *racine2 permet de mettre des valeurs dans sol1 et sol2. A noter que le passage par référence n'est jamais que le passage par valeur d'une adresse : on passe comme paramètre une adresse pour remplir une variable pointeur. Pointeur en sortie Pour écrire une fonction qui renvoie un pointeur sur un entier : int *f1() Ici la fonction f1 renvoie un pointeur sur entier. Adresse des fonctions Une fois qu'une fonction est compilée et que le programme dont elle fait partie est exécutée, la fonction occupe un espace en mémoire et donc a une adresse. Il est possible de définir des pointeurs sur fonction. Par exemple, pour définir un pointeur f sur une fonction qui ne renvoie rien et ne prend pas de paramètres : void (*f)(); Pourquoi ne met on pas le code suivant? void *f(); parce qu'il s'agit de la déclaration d'une fonction f renvoyant void*. Là aussi, pour utiliser un pointeur sur fonction, on doit lui affecter l'adresse d'une fonction :

17 #include <iostream> using namespace std; void f1(int i) cout << "f1 executee avec " << i << endl; void (*fp)(int); // On définit un pointeur sur une fonction fp = f1; // On l'initialise (*fp)(1); // On dereference le pointeur et on appele la fonction void (*fp2)(int) = f1; // on définit un second pointeur et on l'initialise (*fp2)(2); void(*fp3)(int)=&f1; (*fp3)(3); 6 Transtypage des pointeurs : Ici un transtypage qui ne pose pas de difficulté : // (3) Forcing a conversion from void* : void* vp = &i; // Old way produces a dangerous conversion: float* fp = (float*)vp; // The new way is equally dangerous: fp = static_cast<float*>(vp); Bien sûr un tel transtypage est dangereux.

Chapitre 8. Pointeurs & Allocation mémoire

Chapitre 8. Pointeurs & Allocation mémoire Chapitre 8 : Pointeurs & Allocation mémoire 81 Chapitre 8 Pointeurs & Allocation mémoire Chapitre 8 : Pointeurs & Allocation mémoire 82 1. Définitions - La notion de pointeur est spécifique aux langages

Plus en détail

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

Programmation C++ (débutant)/les pointeurs Programmation C++ (débutant)/les pointeurs 1 Programmation C++ (débutant)/les pointeurs Le cours du chapitre 10 : Les pointeurs Présentation Les pointeurs sont une des difficultés majeures du C++. Nous

Plus en détail

TD/TP 1 : Mémoire en C

TD/TP 1 : Mémoire en C DUT Informatique 2014 / 2015 TD/TP 1 : Mémoire en C Rappels de l organisation de la mémoire et des pointeurs étudiés en S21. Comprendre et manipuler les tableaux en C. Durée : 1 TD et 2 TPs. 1 Rappels

Plus en détail

Dossier 1 Principaux éléments de syntaxe Java

Dossier 1 Principaux éléments de syntaxe Java IUT Montpellier Informatique Licence professionnelle 2009/10 Programmation par objets en Java Dossier 1 Principaux éléments de syntaxe Java Cette partie n'aborde pas les notions de classe et d'objet (et

Plus en détail

1.6- Génération de nombres aléatoires

1.6- Génération de nombres aléatoires 1.6- Génération de nombres aléatoires 1- Le générateur aléatoire disponible en C++ 2 Création d'un générateur aléatoire uniforme sur un intervalle 3- Génération de valeurs aléatoires selon une loi normale

Plus en détail

Structures et Pointeurs

Structures et Pointeurs S. REGIS Chapitre 4 Structures et Pointeurs I Les structures 1. Définition Ensemble de plusieurs objets de types éventuellement différents, regroupés sous un même nom. Exemples de structure : En mathématiques,

Plus en détail

Adressage des opérandes

Adressage des opérandes Organisation des ordinateurs et assembleur Chapitre 6 Bien que nous ayons parlé d'adressage des opérandes et que nous ayons utilisé des opérandes dans ce qui précède, la question de l'adressage et des

Plus en détail

4. Pointeurs et allocation dynamique. Définitions et déclarations Tableaux et pointeurs Structures Tableaux multidimensionnels

4. Pointeurs et allocation dynamique. Définitions et déclarations Tableaux et pointeurs Structures Tableaux multidimensionnels 1 4. Pointeurs et allocation dynamique Définitions et déclarations Tableaux et pointeurs Structures Tableaux multidimensionnels 2 Pointeurs Chaque variable a une adresse en mémoire qu il peut être utile

Plus en détail

Langage C avancé Les Pointeurs

Langage C avancé Les Pointeurs Langage C avancé Les Pointeurs Samuel KOKH Maison de la Simulation - CEA Saclay samuel.kokh@cea.fr MACS 1 (2013-2014) Institut Galilée S. KOKH (MdlS) Langage C avancé ISPG/MACS 1 2013-2014 1 / 32 Variables

Plus en détail

Programmation C++ Séance 6. Łukasz Fronc. 26 octobre 2012

Programmation C++ Séance 6. Łukasz Fronc.  26 octobre 2012 Programmation C++ Séance 6 Łukasz Fronc lfronc@ibisc.univ-evry.fr www.ibisc.fr/~lfronc/ 26 octobre 2012 Łukasz Fronc Programmation C++ 1 / 35 Sommaire Surcharge d opérateurs Fonctions et classes amies

Plus en détail

Langage C et aléa, séance 3

Langage C et aléa, séance 3 Langage C et aléa, séance 3 École des Mines de Nancy, séminaire d option Ingénierie Mathématique Frédéric Sur http://www.loria.fr/ sur/enseignement/courscalea/ 1 Les pointeurs Cette séance est une introduction

Plus en détail

IN Cours octobre Matthieu Finiasz

IN Cours octobre Matthieu Finiasz IN 101 - Cours 07 21 octobre 2011 présenté par Matthieu Finiasz Pointeurs et adresses mémoires Qu est-ce qu une adresse mémoire? Pour le processeur, la mémoire est un grand tableau d octets : de 2 32 sur

Plus en détail

Méthodologie de la programmation

Méthodologie de la programmation Méthodologie de la programmation Pablo Rauzy pablo rauzy @ univ-paris8 fr pablo.rauzy.name/teaching/mdlp UFR MITSIC / L1 informatique Séance e Aperçu du langage C : introduction Pablo Rauzy (Paris 8 /

Plus en détail

Algorithmes et programmation II : Les fonctions

Algorithmes et programmation II : Les fonctions Algorithmes et programmation II : Les fonctions Souheib Baarir 1 1 Université Paris Ouest Nanterre La Défense. Laboratoire d'informatique de Paris 6. Souheib.Baarir@u-paris10.fr Licence Mia - 2010/2011

Plus en détail

Rappel: les fonctions

Rappel: les fonctions Rappel: les fonctions Utiliser une fonction se fait en deux temps en C: 1-déclaration 2- définition déclaration: avant le main (globale) ou dans le main ou une fonction (locale) (

Plus en détail

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

Programmation C++ (débutant)/les fonctions Programmation C++ (débutant)/les fonctions 1 Programmation C++ (débutant)/les fonctions Le cours sur les fonctions Pourquoi écrire des fonctions Lorsqu'on a un ensemble de lignes de code qui doivent être

Plus en détail

TP 8 : Les pointeurs

TP 8 : Les pointeurs TP 8 : Les pointeurs Objectif : Maîtriser les notions d adresse et de pointeur LES POINTEURS... 2 1. RAPPEL SUR LES TABLEAUX...2 2. ADRESSES ET POINTEURS...2 3. RECUPERATION DE L ADRESSE D UN ELEMENT...3

Plus en détail

UJF - DU ISN - Langages et Programmation 1

UJF - DU ISN - Langages et Programmation 1 Sous-programmes - Paramètres L. Mounier & A. Rasse UJF - DU ISN - Langages et Programmation 1 9 janvier 2014 1 / 15 Structure générale d un programme Pourquoi structurer un programme? limites d un programme

Plus en détail

(1 er entier) du tableau.

(1 er entier) du tableau. 4. Pointeurs P et Tableaux En C, il existe une relation très étroite entre tableaux et pointeurs. Ainsi, chaque opération avec des indices de tableaux peut aussi être exprimée à l'aide de pointeurs. Comme

Plus en détail

CH.4 ENVIRONNEMENTS D EXÉCUTION

CH.4 ENVIRONNEMENTS D EXÉCUTION CH.4 ENVIRONNEMENTS D EXÉCUTION 4.1 Les langages procéduraux 4.2 L organisation de l espace mémoire 4.3 Les stratégies d allocation 4.4 L accès aux noms non locaux 4.5 Les tables des symboles 4.6 L allocation

Plus en détail

Les instructions du C++

Les instructions du C++ Les instructions du Les instructions d un programme sont exécutées dans l ordre où elles sont écrites par le programmeur. C est une exécution dite séquentielle. Ces instructions décrivent le traitement

Plus en détail

LYCEE Catherine et Raymond JANOT de SENS. COURS de TURBO C CHAPITRE 13. Les Pointeurs et modèles de programmation. Jean - Luc PELLARD

LYCEE Catherine et Raymond JANOT de SENS. COURS de TURBO C CHAPITRE 13. Les Pointeurs et modèles de programmation. Jean - Luc PELLARD LYCEE Catherine et Raymond JANOT de SENS COURS de TURBO C CHAPITRE 13 Les Pointeurs et modèles de programmation Jean - Luc PELLARD Chapitre 13 : Les Pointeurs : les modèles de programmation Page : 2 13.

Plus en détail

LE LANGAGE C POUR MICROCONTROLEURS

LE LANGAGE C POUR MICROCONTROLEURS LE LANGAGE C POUR MICROCONTROLEURS 1. ORGANISATION D UN PROGRAMME C POUR µc. La saisie d un programme en «C» répond pratiquement toujours à la même architecture. Le symbole «#» est suivi d une directive

Plus en détail

Chapitre 3 : Pointeurs et références

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

Plus en détail

Cours 4. Pointeurs et tableau

Cours 4. Pointeurs et tableau Cours 4. Pointeurs et tableau Dimitri Galayko 1 Pointeurs en langage C Un pointeur est une variable qui contient l adresse d une autre variable, ou plus généralement, d une cellule de mémoire. Un objet

Plus en détail

Programmation Impérative

Programmation Impérative Programmation Impérative FLIN202 Vincent BOUDET Janvier 2008 Vincent BOUDET () Programmation Impérative Janvier 2008 1 / 29 Sommaire 1 Tableaux Structure d informations La structure d informations vecteur

Plus en détail

Introduction à l informatique Travaux pratiques: séance 1 INFO X. Baumans

Introduction à l informatique Travaux pratiques: séance 1 INFO X. Baumans Introduction à l informatique Travaux pratiques: séance 1 INFO0205-1 X. Baumans (xavier.baumans@ulg.ac.be) Programme de la séance Déclarations de variables INFO0205-1 X.Baumans 1 / 21 Programme de la séance

Plus en détail

Petit rappel sur les pointeurs

Petit rappel sur les pointeurs Petit rappel sur les pointeurs Version 1 29 mai 2009 Axel Berardino i Table des matières 1 Préface..................................................... 1 2 Introduction...............................................

Plus en détail

Chapitre 5. Opérateurs, expressions et conversions

Chapitre 5. Opérateurs, expressions et conversions Chapitre 5 : Opérateurs, expressions et conversion 41 Chapitre 5 Opérateurs, expressions et conversions Chapitre 5 : Opérateurs, expressions et conversion 42 1. Expressions - Une expression est la composition

Plus en détail

LIFAP1 : ALGORITHMIQUE ET PROGRAMMATION IMPÉRATIVE, INITIATION

LIFAP1 : ALGORITHMIQUE ET PROGRAMMATION IMPÉRATIVE, INITIATION Licence STS Université Claude Bernard Lyon I LIFAP1 : ALGORITHMIQUE ET PROGRAMMATION IMPÉRATIVE, INITIATION 1 COURS 3 : Anatomie d un programme C OBJECTIFS DE LA SÉANCE Apprendre à écrire des programmes

Plus en détail

Cours de Programmation Impérative Allocation dynamique

Cours de Programmation Impérative Allocation dynamique Cours de Programmation Impérative Allocation dynamique Julien David A101 - david@lipn.univ-paris13.fr Julien David (A101 - david@lipn.univ-paris13.fr) 1 / 31 P r`e v i`o u sfi l y `o nffl "P r`oˆgˇr`a

Plus en détail

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN :

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : Claude Delannoy Exercices en langage C++ 3 e édition Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Chapitre 17 Les patrons de fonctions Rappels Introduite par la version 3, la notion de patron

Plus en détail

Objectifs: Problème > Pseudocode > Programme. La bonne Méthode. Introduction: la mauvaise méthode. Problème >... > Programme

Objectifs: Problème > Pseudocode > Programme. La bonne Méthode. Introduction: la mauvaise méthode. Problème >... > Programme Objectifs: Delannoy chap2 (très partiellement) Le Pseudocode d'abord, le programme ensuite savoir décrypter un code source en C Qui fait quoi? Du code source au code exécutable Quelles sont les étapes?

Plus en détail

cm 11 - la mémoire G. Bianchi, G. Blin, A. Bugeau, S. Gueorguieva, R. Uricaru Programmation 1 -

cm 11 - la mémoire G. Bianchi, G. Blin, A. Bugeau, S. Gueorguieva, R. Uricaru Programmation 1 - cm 11 - la mémoire G. Bianchi, G. Blin, A. Bugeau, S. Gueorguieva, R. Uricaru 2015-2016 Programmation 1 - uf-info.ue.prog1@diff.u-bordeaux.fr mémoire virtuelle Lors de l exécution du binaire, un espace

Plus en détail

Programmation en C++ C++ de base. Programme C++ Variables, objets, types Fonctions Namespace Tests Boucles Pointeurs, références

Programmation en C++ C++ de base. Programme C++ Variables, objets, types Fonctions Namespace Tests Boucles Pointeurs, références Programmation en C++ C++ de base Programme C++ Variables, objets, types Fonctions Namespace Tests Boucles Pointeurs, références 1 Programme C++ Le programme C++ le plus simple int main() { return 0;...

Plus en détail

2. Variables et types simples

2. Variables et types simples 1 2. Variables et types simples Déclarations de variables Types scalaires Conversions de types Tableau Espaces de visibilité et classes d allocation 2 Types et variables Tout objet doit être déclaré avant

Plus en détail

Utilisation du langage C en programmation de systèmes

Utilisation du langage C en programmation de systèmes Utilisation du langage C en programmation de systèmes Jacques Mossière 21 septembre 2007 1 Introduction Cette note présente quelques particularités de l utilisation du langage C très utiles pour la programmation

Plus en détail

Le besoin Données structurées algorithmes Programme 2

Le besoin Données structurées algorithmes Programme 2 Historique C++ C++ : extension objet du langage C Bjarne Stroustrup, années 80 Java Inspiré de la partie objet du C++ Années 90 par SUN Vision discutable : Le C++ est un mélange de Java et de C Normalisé

Plus en détail

Chapitre I : Techniques de programmation c++

Chapitre I : Techniques de programmation c++ Chapitre I : Techniques de programmation c++ I. Pointeurs I.1 Rappel Une variable est destinée à contenir une valeur du type avec lequel elle est déclarée physiquement cette valeur se situe en mémoire.

Plus en détail

INF203 - Elements de programmation C

INF203 - Elements de programmation C INF203 - Elements de programmation C Victor Lambret 2017 - https://github.com/vlambret/inf203 Les bases en informatique Les bases utiles La plupart des humains ont dix doigts et comptent donc en base dix

Plus en détail

Le langage Scilab. 2) Les types structurés Les listes Les tableaux (ou matrices)

Le langage Scilab. 2) Les types structurés Les listes Les tableaux (ou matrices) Le langage Scilab I. Les objets du langage( constantes ou variables) 1) Les types élémentaires Les nombres entiers (signés ou non, codés sur 1 octet, 2 octets ou 4 octets). Par exemple, un entier codé

Plus en détail

INFO-H-100 : Règles de bonne pratique

INFO-H-100 : Règles de bonne pratique INFO-H-100 : Règles de bonne pratique [Université Libre de Bruxelles - Service CoDE - Laboratoire I&R] INFO-H-100 : Règles de bonne pratique Ces règles ont été déterminées dans un but pédagogique et/ou

Plus en détail

INF145 Programmation avancée et langage C MOTS RÉSERVÉS ET INSTRUCTIONS AU PRÉPROCESSEUR

INF145 Programmation avancée et langage C MOTS RÉSERVÉS ET INSTRUCTIONS AU PRÉPROCESSEUR Université du Québec (UQ) École de technologie supérieure Service des enseignements généraux Local B-2500-396-8938 Site Internet : http://www.seg.etsmtl.ca/inf115/ INF145 Programmation avancée et langage

Plus en détail

Exercice 1 (niveau 1):Tailles des variables des types de base avec sizeof() Voici le résultat de l'exécution du programme (depuis la VM ):

Exercice 1 (niveau 1):Tailles des variables des types de base avec sizeof() Voici le résultat de l'exécution du programme (depuis la VM ): Serie 6 Corrigé Exercice 1 (niveau 1):Tailles des variables des types de base avec sizeof() Voici le résultat de l'exécution du programme (depuis la VM 2015-16): Taille d'un char : 1 Taille d'un short

Plus en détail

Codage Types en C Paramètres en C. Patrick FULCONIS

Codage Types en C Paramètres en C. Patrick FULCONIS Codage Types en C Paramètres en C Patrick FULCONIS 1 Codage - bases Conversion décimal - binaire Convertissons 01001101 en décimal à l'aide du schéma ci-dessous: 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 0 1 0 0

Plus en détail

Algorithmique et programmation structurée

Algorithmique et programmation structurée Algorithmique et programmation structurée Chapitre 2 : Stockage et codage de l information. Les variables de types scalaires. I. Stockage de l information : les mémoires Pour qu un ordinateur puisse manipuler

Plus en détail

Chapitre 5 : Instructions

Chapitre 5 : Instructions Chapitre 5 : Instructions Informatique de base 2013-2014 Sup Galilée 1 / 23 Qu est-ce qu une instruction? Une instruction est un ordre donné à l ordinateur de réaliser une suite d actions dont chacune

Plus en détail

2.2- Déclarer, définir et utiliser des objets

2.2- Déclarer, définir et utiliser des objets 2.2- Déclarer, définir et utiliser des objets 1- Classes et objets 2- Construction d'objets 3- Destruction d'objets 1 Classes et objets A l'instar du fait de déclarer une fonction avant de l'utiliser,

Plus en détail

NFA031 Programmation avec Java: notions de base

NFA031 Programmation avec Java: notions de base NFA031 Programmation avec Java: notions de base CNAM - centre d enseignement de Paris session 1-12 février 2015 Aucun document n est autorisé. Le barème est donné à titre indicatif. Exercice 1 : QCM (2,5

Plus en détail

Algorithmique P2. Retour au langage Python Renaud Dumont, Ulg

Algorithmique P2. Retour au langage Python Renaud Dumont, Ulg Algorithmique P2 Retour au langage Python Renaud Dumont, Ulg 2009-2010 Python et les listes En python, les listes sont des objets "fourretout" Le type des listes est géré par le langage Elles peuvent contenir

Plus en détail

1 Les sous-programmes en C

1 Les sous-programmes en C Université Paul Sabatier L2 - S4 - Printemps 2005 Programmation impérative et langage C feuille de TD n 3 : Sous-programmes. 1 Les sous-programmes en C 1.1 Fonctions ou procédures Selon son utilisation,

Plus en détail

Algorithmique et programmation TP 1 : Le langage C++, structure d un programme, compilation, types de base, affichage et lecture de données

Algorithmique et programmation TP 1 : Le langage C++, structure d un programme, compilation, types de base, affichage et lecture de données BELFORT MONTBÉLIARD Département d Informatique DUT Informatique S1 Année 2011/2012 Algorithmique et programmation Algorithmique et programmation TP 1 : Le langage C++, structure d un programme, compilation,

Plus en détail

Partie cours. 1- Quelques types de variables. 2- Les fonctions, variables locales, globales. Introduction langage C Application micro-contrôleur

Partie cours. 1- Quelques types de variables. 2- Les fonctions, variables locales, globales. Introduction langage C Application micro-contrôleur Partie cours Il s'agit juste d'une petite fraction du langage C. Il est aisé de trouver un cours exhaustif sur internet. Ces quelques lignes ne sont qu'un très court résumé du langage. Il est donc fortement

Plus en détail

PROGRAMMATION EN ASSEMBLEUR.

PROGRAMMATION EN ASSEMBLEUR. PROGRAMMATION EN ASSEMBLEUR. I. Introduction : Au cœur de tout système microprogrammé, se trouve un microprocesseur. C est lui qui gère toutes les opérations à effectuer. Pour réaliser ces opérations,

Plus en détail

CHAPITRE II : CHEMINEMENT D UN PROGRAMME DANS UN SYSTEME D EXPLOITATION

CHAPITRE II : CHEMINEMENT D UN PROGRAMME DANS UN SYSTEME D EXPLOITATION 14 CHAPITRE II : CHEMINEMENT D UN PROGRAMME DANS UN SYSTEME D EXPLOITATION 2.1 CHAINE DE PREPARATION D UN PROGRAMME : Le développement d un programme, depuis l analyse du problème jusqu'à sa mise au point,

Plus en détail

Allocation Mémoire T. HSU. September 29, 2014. IUT de LENS, Département informatique. T. HSU Allocation Mémoire

Allocation Mémoire T. HSU. September 29, 2014. IUT de LENS, Département informatique. T. HSU Allocation Mémoire Allocation Mémoire T. HSU IUT de LENS, Département informatique September 29, 2014 Introduction Les algorithmes sous-jacents à tout programme informatique consomment essentiellement deux ressources : du

Plus en détail

Corrections des TP précédents. Les tableaux en C. TP 6: script shell. La commande cut

Corrections des TP précédents. Les tableaux en C. TP 6: script shell. La commande cut Corrections des TP précédents. Les tableaux en C Jean-Sébastien Coron Université du Luxembourg 1 Correction des TP TP 6: script shell Enoncé: Ecrire un script shell taille qui renvoie la taille d un fichier

Plus en détail

Introduction aux Types Abstraits de Données: Le Type Liste

Introduction aux Types Abstraits de Données: Le Type Liste Introduction aux Types Abstraits de Données: Le Type Liste Cours Premier Cycle (IBIS), INSA de Rouen Habib Abdulrab Cours IBIS, HA - Plan (I) Types Abstraits de Données (TAD): pourquoi? (II) Le TAD: liste.

Plus en détail

Contrôle Langage C N 1 QCM CORRECTION

Contrôle Langage C N 1 QCM CORRECTION Contrôle Langage C N 1 QCM CORRECTION 1 Une directive du préprocesseur est une ligne qui commence par : { # // /* 2 Qu'est ce qu'une bibliothèque? Un fichier source déjà écrit contenant des fonctions toutes

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 (CORRECTION) durée 3 heures environ page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance

Plus en détail

Programmation objet 2 et outils de développement Licence 3 Informatique. Année universitaire David Genest

Programmation objet 2 et outils de développement Licence 3 Informatique. Année universitaire David Genest Programmation objet 2 et outils de développement Licence 3 Informatique Année universitaire 2016-2017 David Genest POO2 Licence 3 Informatique 2016-2017 1 Chapitre I Introduction 1 Présentation du cours

Plus en détail

2.4- Manipulation de chaînes de caractères

2.4- Manipulation de chaînes de caractères 2.4- Manipulation de chaînes de caractères 1- Les chaînes de caractères comme des tableaux de caractères 2- La classe string 1 Les chaînes de caractères comme des tableaux de caractères Format des chaines

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Objectif: acquérir les bases d un langage de programmation évolué Les éléments abordés seront: - Organisation d un programme - Les variables - Les opérations sur les variables

Plus en détail

C++ Programmation Objet en C++ Programmation générique en C++ Design Patterns et C++ Policies

C++ Programmation Objet en C++ Programmation générique en C++ Design Patterns et C++ Policies C++ Programmation Objet en C++ Programmation générique en C++ Design Patterns et C++ Policies Meilleur C Le langage C++ se veut un langage C amélioré. Il possède des fonctionnalités supplémentaires, et

Plus en détail

Mémoire virtuelle. Ce cours s'intéresse au principe de la mémoire virtuelle. Il aborde notamment les notions liées aux défauts de pages.

Mémoire virtuelle. Ce cours s'intéresse au principe de la mémoire virtuelle. Il aborde notamment les notions liées aux défauts de pages. Mémoire virtuelle Ce cours s'intéresse au principe de la mémoire virtuelle. l aborde notamment les notions liées aux défauts de pages. Principe de la mémoire virtuelle La multiprogrammation implique de

Plus en détail

TD : Complexité des algorithmes

TD : Complexité des algorithmes Année Spéciale 2013-2014 TD : Complexité des algorithmes Exercice 1 On considère deux manières de représenter ce que l on appelle des «matrices creuses», c'est-à-dire des matrices d entiers contenant environ

Plus en détail

À propos des variables C

À propos des variables C 2 À propos des variables C Au sommaire de ce chapitre Mémoire d un programme Objective-C Variables automatiques Variables externes Mots clés de déclaration Portée Allocation dynamique Lorsque vous développez

Plus en détail

Programmation avec Java : notions de base

Programmation avec Java : notions de base Programmation avec Java : notions de base (NFA031) Corrigé session du 6 février 2014 Aucun document n est autorisé. Le barème est donné à titre indicatif. Exercice 1 : QCM (2,5 points) Attention : les

Plus en détail

Ouvrir le fichier en écriture Écrire les données dans le fichier Fermer le fichier. Lire des données écrites dans un fichier

Ouvrir le fichier en écriture Écrire les données dans le fichier Fermer le fichier. Lire des données écrites dans un fichier Flux Fichiers Généralités Créer un fichier Ouvrir le fichier en écriture Écrire les données dans le fichier Fermer le fichier Lire des données écrites dans un fichier Ouvrir le fichier en lecture Lire

Plus en détail

Gestion de liste simplement chaînée Complément au Chap 11 Delannoy

Gestion de liste simplement chaînée Complément au Chap 11 Delannoy Gestion de liste simplement chaînée Complément au Chap 11 Delannoy Objectifs: Maîtriser une structure de donnée dynamique Plan: Rappel sur les pointeurs Interface d un module de gestion de listes Analyse

Plus en détail

Préambule. Adresses IP

Préambule. Adresses IP Préambule TCP/IP est un protocole réseau basé sur deux notions principales: une définition de transport TCP (Transmission Control Protocol) et une définition d'adressage IP (Internet Protocol). Niveau

Plus en détail

IFT1166 - INTRA. Directives: IFT1166 - Session Automne, Intra. Mohamed Lokbani. Prénom(s): Date:20 Octobre 1999

IFT1166 - INTRA. Directives: IFT1166 - Session Automne, Intra. Mohamed Lokbani. Prénom(s): Date:20 Octobre 1999 IFT1166 - Session Automne, Intra Mohamed Lokbani IFT1166 - INTRA Nom: Prénom(s): Signature: Code perm: Date:20 Octobre 1999 Durée: 2 heures (de 18h30: 20h:30) Local: 1360 Directives: - Il vous est permis

Plus en détail

A. Pointeurs sur types de données de base

A. Pointeurs sur types de données de base C++ Ch 7 s et structures dynamiques I. POINTEURS... 1 A. POINTEURS SUR TYPES DE DONNEES DE BASE... 1 B. POINTEURS SUR TYPES STRUCTURES... 2 C. POINTEURS SUR TABLEAUX... 2 D. POINTEURS DE FONCTIONS... 3

Plus en détail

I2 - Partie 1 : Architecture matérielle Langage machine

I2 - Partie 1 : Architecture matérielle Langage machine I2 - Partie 1 : Architecture matérielle Langage machine N. Prcovic 04.91.28.89.51 nicolas.prcovic@univ-cezanne.fr I2 - Partie 1 :Architecture matériellelangage machine p.1/40 L ordinateur en tant que machine

Plus en détail

En base 10 : on exprime les nombres avec 10 chiffres de 0 à 9

En base 10 : on exprime les nombres avec 10 chiffres de 0 à 9 Cours de Langage C Pointeurs et tableaux Rappel : codage binaire i hexadecimal En base 10 : on exprime les nombres avec 10 chiffres de 0 à 9 1984 = 110^3 1.10 + 910^2 9.10 + 810^1 8.10 1 + 410^0 4.10 0

Plus en détail

TD de Langage C Programmation Structurée L3 - EEA Université de Marne La Vallée

TD de Langage C Programmation Structurée L3 - EEA Université de Marne La Vallée TD de Langage C Programmation Structurée L3 - EEA Université de Marne La Vallée 2009-2010 Gautard Valérie, Christophe FLOUZAT 18 février 2010 Résumé Ces TD seront effectués sous un environnement Linux.

Plus en détail

POO Suite. Soit un objet du monde réel ( ou de notre domaine de travail ).

POO Suite. Soit un objet du monde réel ( ou de notre domaine de travail ). POO Suite I. Les classes : 1) Définition : Soit un objet du monde réel ( ou de notre domaine de travail ). Décrire le comportement d'un objet, c'est créer une classe. Un objet s'appelle l'instance d'une

Plus en détail

Tableaux multi-dimensionnels Unions

Tableaux multi-dimensionnels Unions Plan X, Petite classe 65 Langage C Tableaux multi-dimensionnels Unions Algorithmique Graphes Arbres Tas Tri par tas Tableaux X, Petite classe 65 int t[7][8]; int *s[7]; Lors de la déclaration de t, 56

Plus en détail

Chap. II : Initiation au Langage Machine

Chap. II : Initiation au Langage Machine UMR 7030 - Université Paris 13 - Institut Galilée Cours Architecture et Système Dans cette partie du cours, nous allons étudier la programmation en langage machine d un microprocesseur. L étude complète

Plus en détail

P.O.O. - Solution du TD N 3 : Définitions de classes Java

P.O.O. - Solution du TD N 3 : Définitions de classes Java Université A. Belkaïd Tlemcen Faculté des Sciences Département d'informatique 1) a) Erreurs empêchant la compilation : P.O.O. - Solution du TD N 3 : Définitions de classes Java Ligne 1 : L'accolade ouvrante

Plus en détail

INF1256 Informatique pour les sciences de la gestion. Introduction. Jacques Berger

INF1256 Informatique pour les sciences de la gestion. Introduction. Jacques Berger INF1256 Informatique pour les sciences de la gestion Introduction Jacques Berger Objectifs Introduire les concepts de base de la programmation Présenter les éléments d'un premier programme Prérequis Aucun

Plus en détail

TP Informatique n o 4 Algorithmes de tri

TP Informatique n o 4 Algorithmes de tri TP Informatique n o 4 Algorithmes de tri I. Tri fusion et tri rapide I.1. Diviser pour régner On emploie le terme diviser pour régner pour désigner l approche algorithmique consistant à : 1) Diviser :

Plus en détail

INTRODUCTION GENERALE (Rappel)

INTRODUCTION GENERALE (Rappel) Chapitre 1 INTRODUCTION GENERALE (Rappel) Objectifs: Rappeler l'étudiant les notions de base concernant l'informatique et l'algorithmiques déjà connues au niveau précèdent. Mettre la programmation dans

Plus en détail

Sciences de l Ingénieur Page 151 LE LANGAGE C

Sciences de l Ingénieur Page 151 LE LANGAGE C Sciences de l Ingénieur Page 151 LE LANGAGE C Exemple char val1=0xa5; int val2; void tempo(char temps) // Déclaration d une variable caractère avec valeur initiale // Déclaration d une variable nombre

Plus en détail

Aide Mémoire - langage C

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

Plus en détail

Travaux dirigés 2 : pointeurs et tableaux

Travaux dirigés 2 : pointeurs et tableaux Université Paris-Nord L1 Institut Galilée Année 2008-2009 Licence 1-2ième semestre Travaux dirigés 2 : pointeurs et tableaux Le premier exercice fait reference au cours. L arithmétique des pointeurs n

Plus en détail

Exercice 1 Exercice 2 Exercice 3 Exercice 4 Exercice 5 Total Note / 20

Exercice 1 Exercice 2 Exercice 3 Exercice 4 Exercice 5 Total Note / 20 Nom, prénom, numéro d étudiant : Université Paris Sud, Licence MPI, Info 111 Partiel du 7 novembre 2016 (deux heures) Exercice 1 Exercice 2 Exercice 3 Exercice 4 Exercice 5 Total Note / 20 Calculatrices

Plus en détail

Historique C++ C++ : extension objet du langage C Bjarne Stroustrup, années 80 Java Inspiré de la partie objet du C++ Années 90 par SUN Vision discutable : Le C++ est un mélange de Java et de C Normalisé

Plus en détail

Algorithmique et programmation - Séance 1 Révisions - Solutions

Algorithmique et programmation - Séance 1 Révisions - Solutions Ecole polytechnique de Bruxelles Année Académique 2011-2012 Algorithmique et programmation INFO-H-200 Algorithmique et programmation - Séance 1 Révisions - Solutions Les structures conditionnelles et itératives.

Plus en détail

Introduction à la programmation Travaux pratiques: séance 1 INFO0201-1

Introduction à la programmation Travaux pratiques: séance 1 INFO0201-1 Introduction à la programmation Travaux pratiques: séance 1 INFO0201-1 B. Baert, X. Baumans & F. Ludewig Bruno.Baert@ulg.ac.be - Xavier.Baumans@ulg.ac.be Implication des TP info et Pourquoi programmer?

Plus en détail

Les tableaux en JAVA à 1 dimension. à n dimensions!

Les tableaux en JAVA à 1 dimension. à n dimensions! Département d'informatique 2008/2009 Université de Cergy Pontoise Les tableaux en JAVA à 1 dimension ou à n dimensions! Introduction Un tableau est une structure en mémoire dans lequel on peut stocker

Plus en détail

LES STRUCTURES DE CONTROLE { } if.. else switch for while, do... while LA SELECTION. - instruction simple conditionnée (SI / ALORS) if (expression)

LES STRUCTURES DE CONTROLE { } if.. else switch for while, do... while LA SELECTION. - instruction simple conditionnée (SI / ALORS) if (expression) LES STRUCTURES DE CONTROLE INSTRUCTIONS STRUCTUREES BLOC SELECTION ITERATION ALTERNATIVE CHOIX SYSTEMATIQUE DE RECHERCHE if.. switch for while, do... while LA SELECTION - instruction simple conditionnée

Plus en détail

Fiche n 1: Structure Générale d'un Programme Types et opérateurs élémentaires

Fiche n 1: Structure Générale d'un Programme Types et opérateurs élémentaires Fiche n 1: Structure Générale d'un Programme Types et opérateurs élémentaires Structure d un programme et déclarations Algorithmique Langage C# // Commentaire sur une ligne // commentaire sur une seule

Plus en détail

TD 4 : Introduction au langage MIPS

TD 4 : Introduction au langage MIPS ARCHITECTURE DES ORDINATEURS IG3 2012-2013 TD 4 : Introduction au langage MIPS Clément Jonquet {jonquet@lirmm.fr} Environnement de travail Nous allons utiliser un simulateur pour le langage MIPS. Étant

Plus en détail

Programmation Orientée Objet

Programmation Orientée Objet Programmation Orientée Objet Mohamed Tounsi Institut Supérieur d'informatique et de Multimédia Sfax Septembre 2014 Mohamed Tounsi (ISIMS) Programmation Orientée Objet Septembre 2014 1 / 22 de base Les

Plus en détail

Mesures de performance exemple des tris

Mesures de performance exemple des tris IUT De Villetaneuse Dép t informatique Cours d'algorithmique 2 éme Année Cours 7 Mesures de performance exemple des tris Les tris On a un ensemble de données que l'on veut trier. Les données sont dans

Plus en détail

IFT159 Analyse et programmation

IFT159 Analyse et programmation IFT159 Analyse et programmation Chapitre 2 Gabriel Girard Département d informatique 2 septembre 2008 1 Qu est-ce qu un programme C++ 2 Commentaires (1) Directives au compilateur (2) Fonctions (4) 3 float

Plus en détail

Introduction à la Programmation 1

Introduction à la Programmation 1 Introduction à la Programmation 1 Séance 1 de cours/td Université Paris-Diderot Objectifs: Utiliser Java comme une calculatrice. Identifier et donner un sens aux différentes constructions du langage (déclaration

Plus en détail

Chapitre 8. Patrons de fonctions Templates

Chapitre 8. Patrons de fonctions Templates Chapitre 8 : Patrons de fonctions 183 Chapitre 8 Patrons de fonctions Templates Chapitre 8 : Patrons de fonctions 184 1. Généralités - Modèle que le compilateur utilise pour créer des fonctions au besoin.

Plus en détail

Séance 1 Entrées/Sorties et Variables. Exercice 1a : Programme bonjour. Ecrire le programme qui affiche Bonjour. à l'écran.

Séance 1 Entrées/Sorties et Variables. Exercice 1a : Programme bonjour. Ecrire le programme qui affiche Bonjour. à l'écran. Séance 1 Entrées/Sorties et Variables Exercice 1a : Programme bonjour Ecrire le programme qui affiche Bonjour. à l'écran. Un programme qui exécute des entrés/sorties utilise l'include stdio.h L'include

Plus en détail