Sous-programmes.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Chapitre annexe. Récursivité
Les fonctions A quoi ça sert ?
Introduction au Langage C,C++
Rappels C.
Les procédures et interruptions en Assembleur (Tasm)
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
DECLARATION DE VARIABLES
3- Déclaration et accès aux objets
C.
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Tests et itérations Programmes séquentiels ne résolvent pas tous les problèmes exemple simple : calcul des racines d'un polynôme de d° 2 dans R Algorithme.
Paramètres et pointeurs
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Fonctions Dans un programme : certaines opérations (ou séquences d'opérations) peuvent se répéter plusieurs fois : affichage de tableau, saisie, ou même.
6. Les sous-programmes P. Costamagna – ISEN N1.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 1- Pourquoi les FONCTIONS peuvent échanger des données en E entre elles ? 2- Comment écrire des.
B.Shishedjiev - Informatique II
Principes de programmation (suite)
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
Les éléments de base de l’algorithmique
TRAITEMENT DE STRUCTURES
CYCLE 1 : Saisir – Afficher – Données Déclarer des Constantes dans un programme 1- Rôle de la déclaration de constante 2- Syntaxe de la déclaration de.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Algorithmique et Programmation
Instruction sélective switch-case Instruction répétitive do-while For
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Environnements d'exécution
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Chapitre 9 Les sous-programmes.
Plan troisième cours Instruction sélective Instruction répétitive
Procédures et fonctions
La librairie assert.h.
L’essentiel du langage C
Python Fonction et procédure
Structures des données
B.Shishedjiev - Informatique II
CYCLE 1 : Saisir – Afficher – Données Déclarer des Variables dans un programme 1- Rôle de la déclaration de variable 2- Syntaxe de la déclaration de variable.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Notion de fonction A partir d’un exemple Types de fonctions
CYCLE 1 : Saisir – Afficher – Données Saisir des valeurs de variables au clavier 1- Rôle du scanf() 2- Syntaxe du scanf() 3- Exécution du scanf() par le.
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
B.Shishedjiev - TD11 Travaux dirigés 1 Expressions et affectation Entrée-sortie.
CYCLE 6 : FONCTIONS Faire un programme en C avec des FONCTIONS 1- A quoi servent les FONCTIONS ? 2- Comment écrire un programme avec FONCTIONS ? 3- Comment.
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
SIF-1053 Architecture des ordinateurs
8PRO100 Éléments de programmation Comment répéter plusieurs fois une séquence d’instructions.
Décomposition et paramétrage des algorithmes
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
1 Quatrième journée Les flots de données Les entrées/sorties Les flots de données Les entrées/sorties.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Introduction au langage C Fonctions et Procédures
Les types composés Les enregistrements.
Structures de contrôle
ISBN Chapitre 10 L'implémentation des sous- programmes.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
PRO-1027 Programmation Scientifique en C
Visibilité de variables Paramètres de fonction premier auteur : Agata Savary.
Introduction à l’Informatique Licence SPI Mme Delmotte.
Transcription de la présentation:

Sous-programmes

B.Shishedjiev -Sous-programmes Les sous-programmes Définition – Le sous-programme est une partie de programme presque indépendante qui a un nom et peut être appelée d’un autre sous-programme ou du programme principal. Définition – description de l’algorithme avec paramètres formels (muets) Appel – exécution avec les paramètres effectifs Types Procédures – ne produit pas un résultat et son appel est une instruction Fonctions – produit une valeur comme résultat, donc son appel est une expression. B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Exemple début Définition val float fex(x,a,b,c) Paramètres formels x=1.5, a=4 n=3, p=2 q=10 val = ax2+bx+c Appel y = fex(x,a,n,p) return val Résultat fin afficher y z = fex(x+1,1,q,n-1) Paramètres effectifs afficher z fin B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Exemple en C #include <stdio.h> float fex(float, int,int,int); void main (void) { float x = 1.5; float y,z; int a=4, n=2, q = 7, p=3; y = fex(x,a,n,p); printf ("y = %8.3f\n",y); z = fex(x+1,1,q,n-1); printf ("z = %8.3f\n",z); } float fex(float x, int a,int b,int c){ float val, val1=3.4; val = a*x*x+b*x+c; return val; Déclaration Paramètres effectifs Appel Paramètres formels B.Shishedjiev -Sous-programmes Définition

Syntaxe Organigramme C Définition Appel vg1,vg2.. vgn vl1,vl2,,,,,vln type nom_de_la_function (p1,p2,p3,..,pn) Algorithme fin C Définition type-de-retour nom-de-la-fonction ( type par1, type par 2, ..., type parn) { déclaration des variables locales ; instructions avec au moins une instruction return } Appel nom-de-la-fonction ( par1, par 2, ..., parn) B.Shishedjiev -Sous-programmes

Exécution du sous-programme La pile du programme Enregistrement d’activation Exécution d’appel Créer l’EA Passer les paramètres Exécution des instructions Retour du contrôle Destruction de l’EA L’enregistrement de la fonction précédente pile paramètre n ... paramètre 1 Enregistrement d’activation adresse de retour variable locale 1 ... variable locale n B.Shishedjiev -Sous-programmes

Passage des paramètres Passage par valeur pile programme appelant Sous-programme y ? 3 p(x) ... x=x+1 ; ... y=3 ; p(y) ; afficher(y) ; x=y x 4 ? 3 AR B.Shishedjiev -Sous-programmes

Passage des paramètres Passage par adresse pile programme appelant Sous-programme ->adresse de y y 3 4 ? p(x) ... x=x+1 ; ... y=3 ; p(y) ; afficher(y) ; x ? AR B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Les fonctions en C Particularités le passage des paramètres est toujours par valeur on peut les appeler comme une instruction – le résultat n’est pas utilisé. on peut avoir une fonction sans résultat. L'appel est toujours une instruction on peut avoir une fonction sans paramètres printf ("%d",a); void nom(paramètres) type nom(void) B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Fonctions en C Exemple Faire une fonction qui trouve le pgcd de deux nombres entiers positifs. Ecrire un programme qui lit une suite de nombres et calcule le pgcd de chaque 2 nombres voisins. t,da,db int pgcd (a,b) début Lire x1 Initalisation da=a, db =b Lire x2 oui EOF t= da%db non da = db db = t d = pgcd(x1,x2) oui t0 afficher d non x1 = x2 return da fin fin B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Fonctions en C Exemple... #include <stdio.h> int pgcd( int ,int ); void main (void) { int x1, x2,r,d; do { printf ("tapez un nombre positif:"); scanf("%d", &x1); } while (x1 <= 0); while(1){ r = scanf("%d", &x2); } while (x2 <= 0); if ( r<1) break; d = pgcd(x1,x2); printf ("Le pgcd de %d et %d est %d\n", x1,x2,d); x1 = x2; } int pgcd( int a,int b){ int da, db, t; da = a; db = b; do{ t = da % db; da = db; db = t; }while (t!=0); return da; } B.Shishedjiev -Sous-programmes

Les paramètres résultat En utilisant les pointeurs on obtient l'effet de passage par adresse pile y 4 3 ? #include <stdio.h> void p(int *x){ *x+=1 ; } void(main(void){ int y=3 ; p(&y) ; printf(“%d\n”,y) ; x @ ? AR B.Shishedjiev -Sous-programmes

Les paramètres résultat Exemple Faire une fonction qui échange les valeurs de ces deux paramètres entiers. pile x1 ? 4 3 #include <stdio.h> void echange( int * ,int * ); void main (void) { int x1, x2; printf ("tapez deux nombres entiers:"); scanf("%d%d", &x1, &x2); printf ("Avant l'echange x1= %d et x2 = %d \n",x1,x2); echange(&x1,&x2); printf ("Apres l'echange x1= %d et x2 = %d \n",x1,x2); } void echange( int *a,int *b){ int t; t = *a ; *a = *b; *b = t; return ; x2 ? ? 4 3 a ? @ b @ ? AR t 3 ? B.Shishedjiev -Sous-programmes

Les paramètres résultat Exemple – remanier le programme pgcd pour que la saisie ce fait par une fonction. int lirepositif(int *x) { int r; do { printf ("tapez un nombre positif:"); r = scanf("%d", x); } while (*x <= 0); return r; } int pgcd( int a,int b){ int da, db, t; da = a; db = b; do{ t = da % db; da = db; db = t; }while (t!=0); return da; #include <stdio.h> int pgcd( int ,int ); int lirepositif(int *); void main (void) { int x1, x2,r,d; lirepositif(&x1); while(1){ r=lirepositif(&x2); if ( r<1) break; d = pgcd(x1,x2); printf ("Le pgcd de %d et %d est %d\n", x1,x2,d); x1 = x2; } B.Shishedjiev -Sous-programmes

Les paramètres résultat Exemple – remanier le programme pgcd pour que la saisie ce fait par une fonction. int lirepositif(void) { int r,x; do { printf ("tapez un nombre positif:"); r = scanf("%d", &x); } while (x <= 0); if (r>0) return x; else return -1; } int pgcd( int a,int b){ int da, db, t; da = a; db = b; do{ t = da % db; da = db; db = t; }while (t!=0); return da; #include <stdio.h> int pgcd( int ,int ); int lirepositif(void); void main (void) { int x1, x2,d; x1 = lirepositif(); while(1){ x2=lirepositif(); if ( x2<0) break; d = pgcd(x1,x2); printf ("Le pgcd de %d et %d est %d\n",x1,x2,d); x1 = x2; } B.Shishedjiev -Sous-programmes

Classes d’allocation Zones de mémoire la zone des variables statiques. la zone des variables automatiques – la pile; la zone des variables dynamiques – le tas. pile tas Zone des variables statiques Enregistrement d'activation de main() Enregistrement d'activation de func1() ... Enregistrement d'activation de funcn() B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Les blocs Bloc Déclaration des variables En dehors de toute fonction En l'intérieur d'un bloc Des paramètres formels Variables par leur portée globales locales – ils peuvent masquer les globales paramètres { déclarations instructions exécutables } B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Portée des variables int globale ; //variable globale void main(void) { int local ; //variable locale global = 1 ; //on peut utiliser globale ici local = 2 ; // et locale aussi ( // début d’un bloc nouveau int plus_locale ; //c’est locale de ce bloc plus_locale=globale+locale ; } // le bloc interne est fermé //on ne peut plus utiliser plus_locale portée de globale portée de locale portée de plus_locale B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Masquer les variables int totale ; // nombre totale d’entrées int compteur ; //le nombre d’entrées void (main(void) { totale = 0 ; //variable locale compteur = 0 ; int compteur ; //compteur locale while (1) { if (compteur > 10) break ; totale += compteur ; ++ compteur; } portée de la variable globale compteur locale variable compteur cache la variable compteur globale B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes L'attribut static L'attribut static a différente action variable locale – la portée de cette variable est le bloc où elle est définie mais sa durée de vie et toute l’exécution. variable globale Syntaxe static int k ; static type nom ; B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes L'attribut static Exemple #include <stdio.h> int main() { int counter; /* compteur d'itérations */ for (counter = 0; counter < 3; ++counter) { int temporary = 1; /* variable temporelle*/ static int permanent = 1; /* variable permanente */ printf("Temporelle %d Permanente %d\n", temporary, permanent); ++temporary; ++permanent; } return (0); B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes L'attribut static Exemple – une fonction qui compte les appels #include <stdio.h> int appels(void){ static int app; app++; return app; //rend le numéro d'appel } int main(void) { int counter; /* compteur d'itérations */ for (counter = 0; counter < 3; ++counter) { printf ("appel No %d \n", appels()); printf("Quel est ce nombre ? %d\n", appels()-appels()); return (0); B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Intialisation Variables globales 0 par défaut expression constante Variables locales par défaut – valeur indéfinie expression ordinaire Variables statiques – comme les variables globales B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Intialisation Exemple #include <stdio.h> #define N 5 int appels(int p1){ static int app = 2; // expression constante; int loc = p1 +1; // initialisation d’une variable automatique static int st1 = loc-1; // erreur – l’expression n’est pas constante static int j = N; // expression constante; app++; return app; } int main(void) { int counter ; /* compteur d'itérations ici sa valeur n’est pas définie*/ for (counter = 0; counter < 3; ++counter) { printf ("appel No %d \n", appels(counter)); printf("Quel est ce nombre ? %d\n", appels(3)-appels(4)); return (0); B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes Récapitulation Type de variable Déclaration Portée Classe de mémoire Initialisation Globale En dehors de toute fonction la partie du fichier source suivant sa déclaration n’importe quel fichier source avec extern Statique Implicite – 0 Explicite – expression constante Globale cachée En dehors de toute fonction, avec attribut static Locale « remanente » Au début d’un bloc avec attribut static Le bloc Locale à une fonction Au début d’une fonction La fonction Automatique Implicite – il n’y a pas Explicite - Expression Locale à un bloc Au début d’un bloc B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes L'attribut const Exemple #include <stdio.h> const int N=19; int appels(const int M){ static int app =M; //ici on peut initialiser – M est une constante int i; for (i=0; i<M; i++) printf("*"); M++; // erreur on ne peut pas modifier une constante printf("\n"); app++; return app; } int main(void) { N++; // erreur on ne peut pas modifier une constante printf("Quel est ce nombre ? %d\n", appels(3)-appels(5)); return (0); B.Shishedjiev -Sous-programmes

B.Shishedjiev -Sous-programmes L'attribut const L'attribut const dans la déclaration d'un pointeur La différence entre #define et const p va toujours désigner i int i; int * const p = &i; La valeur désignée par p est constante int i=2; int const * p = &i; B.Shishedjiev -Sous-programmes