TD3 Qualificatifs static et extern

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Programme Compte bancaire (code)

Le prototype de la fonction main()

Cours de Programmation Impérative: Zones de mémoires et pointeurs

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Introduction au langage C

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

TD3: tableaux avancées, première classe et chaînes

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

OS Réseaux et Programmation Système - C5

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

Rappels Entrées -Sorties

Java Licence Professionnelle CISII,

Programmation en langage C

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Chap III : Les tableaux

UE C avancé cours 1: introduction et révisions

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Les processus légers : threads. Système L3, /31

Le langage C. Séance n 4

Plan du cours. Historique du langage Nouveautés de Java 7

as Architecture des Systèmes d Information

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)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INITIATION A LA PROGRAMMATION

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmer en JAVA. par Tama

Cours 1: Java et les objets

Programmation système I Les entrées/sorties

Chapitre 10. Les interfaces Comparable et Comparator 1

Génération de code binaire pour application multimedia : une approche au vol

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

UE Programmation Impérative Licence 2ème Année

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Cours d initiation à la programmation en C++ Johann Cuenin

Généralités sur le Langage Java et éléments syntaxiques.

I. Introduction aux fonctions : les fonctions standards

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Algorithmique et Programmation, IMA

Derrière toi Une machine virtuelle!

INITIATION AU LANGAGE JAVA

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

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Une introduction à Java

Utilisation d objets : String et ArrayList

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

Algorithmique I. Algorithmique I p.1/??

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

IRL : Simulation distribuée pour les systèmes embarqués

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP : Gestion d une image au format PGM

Programmation avec des objets : Cours 7. Menu du jour

Bases de programmation. Cours 5. Structurer les données

Programmation Objet Java Correction

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

TP1 : Initiation à Java et Eclipse

Programmation en Java IUT GEII (MC-II1) 1

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

Cours Langage C/C++ Programmation modulaire

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

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

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

INF 104 (SELC) Introduction au langage C

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

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

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

Cours d Algorithmique et de Langage C v 3.0

Chapitre 1 : La gestion dynamique de la mémoire

Java Licence Professionnelle CISII,

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

Algorithmique, Structures de données et langage C

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

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

V- Manipulations de nombres en binaire

Corrigé des exercices sur les références

Arguments d un programme

Programmation Classique en langage C

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TP, première séquence d exercices.

Lier Erlang avec d autres langages de programmation


Claude Delannoy. 3 e édition C++

Les structures de données. Rajae El Ouazzani

Structurer ses données : les tableaux. Introduction à la programmation

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

ACTIVITÉ DE PROGRAMMATION

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

Langage Java. Classe de première SI

Compression de Données - Algorithme de Huffman Document de Conception

Programmation par les Objets en Java

Transcription:

TD3 Qualificatifs static et extern Langage C (LC4) semaine du 11 février 1 La portee des variables Que se passe-t-il lorsque l on tente de compiler le code suivant? Justifiez votre réponse. float A; int B, C[10]; void P1 (int I, int J) B= I + J; void P2 () int B, D; P1 (B, D); int main ( ) P1(C[5], C[6]); P2(); 2 Utilisation de static sur les fonctions Question 1. Définissez une fonction void echange(int *c1, int *c2) qui prend en argument deux pointeurs vers des entiers et échange les valeurs vers lesquelles ils pointent Définissez une fonction void tri3int(int *c1, int *c2, int *c3) qui prend en argument trois pointeurs vers des entiers et qui les trie dans l ordre croissant, en ce sens que le pointeur c1 pointera vers le plus petit entier et c3 vers le plus grand. (Il s agit d utiliser la fonction echange.) void echange(int *c1, int *c2) int temp; 1

void tri3int(int *c1, int *c2, int *c3) if (*c1> *c2) On suppose que ces fonctions appartiennent à un fichier tri3int.c. Question 2. De manière analogue définissez une fonction void echange(char *c1, char *c2) et une fonction void tri3car(char *c1, char *c2, char *c3). On considère que l ordre des caractères est l ordre de leur code ASCII. void echange(char *c1, char *c2) char temp; void tri3car(char *c1,char *c2, char *c3) On suppose que ces fonctions appartiennent à un fichier tri3car.c. Question 3. Que se passe-t-il lorsque l on tente de compiler le code suivant (un fichier main.c à l aide de la commande gcc main.c tri3car.c tri3int.c. Justifiez votre réponse et surtout expliquez comment il serait possible de remédier à ce problème. void tri3int(int *, int *, int *); void tri3car(char *, char *, char *); int main() int i1 = 3, i2 = 2, i3 = 1; char c1 = x, c2 = z, c3 = y ; 2

tri3int(&i1, &i2, &i3); tri3car(&c1, &c2, &c3); printf("les entiers : %d, %d, %d\n", i1, i2, i3); printf("les caracteres : %c, %c, %c\n", c1, c2, c3); static devant les fonctions echange. Le qualificatif static rend les fonctions locales. 3 Le qualificatif extern Maintenant on va se donner pour but de compter le nombre d appels aux fonctions echange, tri3car et tri3int. Pour cela on va déclarer trois entiers dans le fichier main.c qui seront initialisés à 0. Voici une première modification de main.c. void tri3int(int *, int *, int *); void tri3car(char *, char *, char *); int c_echange = 0; int c_tri3car = 0; int c_tri3int = 0; int main() int i1 = 3, i2 = 2, i3 = 1; char c1 = x, c2 = z, c3 = y ; tri3int(&i1, &i2, &i3); tri3car(&c1, &c2, &c3); printf("les entiers : %d, %d, %d\n", i1, i2, i3); printf("les carateres : %c, %c, %c\n", c1, c2, c3); printf("nombre d echanges : %d\n", c_echange); printf("nombre de tri3car : %d\n", c_tri3car); printf("nombre de tri3int : %d\n", c_tri3int); Question 4. Comment accéder aux entiers c_echange, c_tri3car et c_tri3car depuis les autres fichiers? Utilisation judicieuse de extern Question 5. Modifiez tri3int.c et tri3car.c afin que c_echange, c_tri3car et c_tri3car comptent bien ce que l on attend qu ils comptent. 3

extern int c_echange; extern int c_tri3car; static void echange(char *c1, char *c2) char temp; c_echange++; void tri3car(char *c1,char *c2, char *c3) if (*c1> *c2) c_tri3car++; extern int c_echange; extern int c_tri3int; static void echange(int *c1, int *c2) int temp; c_echange++; void tri3int(int *c1, int *c2, int *c3) if (*c1> *c2) c_tri3int++; Question 6. Le qualificatif extern peut-il être utilisé sur toutes déclarations d une même variable (d un même entier par exemple)? Non, ce n est pas possible, il y en a au moins une qui doit «définir» cette variable. 4

Question 7. Cela aurait-il du sens de déclarer une variable de la manière suivante? extern int ma_var = 0; Pourquoi? Non pas trop. Si la variable est extern c est qu elle est censée être définie et donc initialisée ailleurs. 4 Utilisation de static à l intérieur des fonctions Maintenant on change d avis et on décide de ne compter que les appels aux fonctions tri3car et tri3int. Pour ce faire on souhaite déclarer des compteurs à l intérieur même de ces fonctions. En plus on en modifie les types, elles deviennent désormais : int tri3car(char *c1,char *c2, char *c3) et int tri3int(int *c1, int *c2, int *c3), et l entier renvoyé est le nombre d appels déjà effectués. Question 8. Comment feriez vous? int tri3int(int *, int *, int *); int tri3car(char *, char *, char *); int main() int i1 = 3, i2 = 2, i3 = 1; char c1 = x, c2 = z, c3 = y ; printf("%d\n", tri3int(&i1, &i2, &i3)); printf("%d\n", tri3car(&c1, &c2, &c3)); // printf("%d\n", tri3int(&i1, &i2, &i3)); // printf("%d\n", tri3car(&c1, &c2, &c3)); printf("les entiers : %d, %d, %d\n", i1, i2, i3); printf("les caracteres : %c, %c, %c\n", c1, c2, c3); static void echange(char *c1, char *c2) char temp; int tri3car(char *c1, char *c2, char *c3) 5

static int c_tri3car = 0; c_tri3car++; return c_tri3car; static void echange(int *c1, int *c2) int temp; int tri3int(int *c1, int *c2, int *c3) static int c_tri3int = 0; c_tri3int++; return c_tri3int; 5 Si on a le temps... Question 9. Qu affiche le programme suivant? int f() static int cpt = 0; cpt++; return cpt; int g() static int cpt = 1; cpt *= 2; return cpt; 6

int main() int i; for (i = 0; i < 3; i++) printf("%d\n", f()); printf("--------\n"); for (i = 0; i < 3; i++) printf("%d, %d\n", f(), g()); return 0; 1 2 3 -------- 4, 2 5, 4 6, 8 7