FONCTIONS avec paramètres en Entrée/Sortie

Slides:



Advertisements
Présentations similaires
La boucle for : init7.c et init71.c
Advertisements

Les fonctions A quoi ça sert ?
Rappels C.
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
3- Déclaration et accès aux objets
C.
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Paramètres et pointeurs
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.
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.
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
Particularités des calculs
Base de programmation Script unity en c#.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
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?
Récursivité Définition récursive d’un problème. Critère d’arrêt et convergence. Performance des algorithmes récursifs. Résolution d’un problème à l’aide.
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
C++ : variables Déclaration de variables
Structures de données IFT-2000
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
Introduction à la programmation orientée objets
Faculté Polytechnique de Mons
L’essentiel du langage C
Chapitre X Modèles.
Python Fonction et procédure
Stocker plusieurs valeurs de même type dans une variable
Le langage C Structures de données
Programmer en langage c
CYCLE 1 : Saisir – Afficher – Données Initialiser des Variables par affectation 1- Rôle de l’affectation 2- Syntaxe de l’affectation 3- Exécution de l’affectation.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
B.Shishedjiev - Informatique II1 Travaux dirigés 4 Les tableaux.
Les pointeurs Suite.
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
SIF-1053 Architecture des ordinateurs
Les deux facteurs de création de valeur.
Argc et argv Utilisation des paramètres de la ligne de commande.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
Programmation Système et Réseau
Les types composés Les enregistrements.
Variables et environnement utilisateur W. Barhoumi.
Évaluation et application des fonctions Let f = function x -> ( function y -> x+y );; Type :int -> (int ->int) int -> int ->int f int.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
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.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
PRO-1027 Programmation Scientifique en C
Directives Ocaml Définition
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Informatique 2A Langage C 4ème séance
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
(a)(b) (a) (d).
Algorithmique Langage C
Semaine 11 Les pointeurs (suite)
Les fonctions.
Int 10. Int 6.
A b c. a b ab ab.
Transcription de la présentation:

FONCTIONS avec paramètres en Entrée/Sortie CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée/Sortie 1- Pourquoi les FONCTIONS peuvent échanger des données en E/S entre elles ? 2- Comment écrire des FONCTIONS avec paramètre en E/S ? 3- Comment le CPU exécute des FONCTIONS avec paramètre en E/S ?

FONCTIONS avec paramètres en Entrée/Sortie CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée/Sortie 1- Pourquoi les FONCTIONS peuvent échanger des données en E/S entre elles ?

Les Entrées et Sorties ne suffisent pas : tableaux /* Initialisation d’un tableau */ float [] RemplirTableau(void) { float tabReel[3]; … return(tabReel); } Fonction : un tableau ne peut pas être renvoyé en Sortie par une fonction. Comment récupérer un tableau à partir d’une fonction ? Les tableaux modifiés par une fonction doivent donc être transmis par un autre mécanisme que la Sortie : Les paramètres en Entrée/Sortie sont transmis à la fonction (à l’appel) et modifiables par cette fonction.

Les Entrées et Sorties ne suffisent pas : si plusieurs retours /* Valeur absolue d’un entier, renvoie 1) la valeur absolue de x 2) le signe de x (+: 1, -: -1) */ int Vabs(int x) { int signe, abs; if (x<0) abs= -x; signe= -1; else abs= x; signe= 1; return(signe,abs); } Fonction : une fonction ne peut pas renvoyer en Sortie plus d’une valeur. Comment récupérer les 2 résultats de la fonction ? Un autre mécanisme doit donc permettre de transmettre une des 2 Sorties : Un paramètre passé en Entrée/Sortie (lors de l’appel) sera modifiable par la fonction.

est l’adresse d’une case RAM transmise à la fonction : Fonction avec paramètre en Entrée/Sortie Un paramètre en E/S est l’adresse d’une case RAM transmise à la fonction : Le contenu de la case sera modifiable par la fonction…

FONCTIONS avec paramètres en Entrée/Sortie CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée/Sortie 2- Comment écrire des FONCTIONS avec paramètre en E/S ?

Limitation des fonctions à 1 seule Sortie La fonction Vabs() doit renvoyer 2 résultats : Or, 2 valeurs ne peuvent pas être renvoyées en Sortie par une fonction. Donc, COMMENT PASSER la 2° variable (abs) à la fonction, de façon à ce qu’elle soit modifiable ? /* Valeur absolue d’un entier, renvoie 1) la valeur absolue de x 2) le signe de x (+: 1, -: -1) */ int Vabs(int x) { int signe, abs; if (x<0) abs= -x; signe= -1; else abs= x; signe= 1; return(signe,abs); }

Un paramètre en E ne peut pas être modifié par la fonction La fonction Vabs() doit renvoyer 2 résultats : Or, une valeur transmise en Entrée ne permet pas de modifier la variable passée dans l’appel : le main() ne connaîtra pas le changement. Donc, COMMENT PASSER la 2° variable à la fonction, de façon à ce qu’elle soit modifiable ? /* Valeur absolue d’un entier, renvoie 1) la valeur absolue de x 2) le signe de x (+: 1, -: -1) */ int Vabs(int x , int abs) { int signe; if (x<0) abs= -x; signe= -1; else abs= x; signe= 1; return(signe); }

Ecrire une fonction avec paramètre en E/S de type simple La fonction Vabs() doit renvoyer 2 résultats : Or, 2 Sorties impossibles. Or, paramètre en Entrée non modifiable. Pour pouvoir modifier la variable, il faut passer l’adresse de cette variable, COMME dans le scanf() : la fonction a ainsi accès direct à la case RAM de cette variable. /* Appel à la fonction Valeur absolue, en passant une adresse */ sign= Vabs(a,&abs); /* a est l’entier de départ, sign est le signe de a, &abs est l’adresse RAM où sera stockée la valeur absolue */

Un paramètre en E/S est passé par ADRESSE Un PARAMETRE en E/S est passé par adresse. Il est en lecture/écriture pour la fonction appelée, qui peut le modifier. Donc, la variable de type simple, dont l’adresse est passée, est modifiée directement par la fonction. passage paramètre par adresse  transmission adresse de la donnée

Le type POINTEUR : ADRESSE d’une simple variable COMMENT passer L’ADRESSE d’une variable à une fonction ? Un POINTEUR est une adresse. C’est un type de données : un pointeur pointe sur une variable de type simple. // pointeur x sur un int int n, *x; // initialisation x= &n; // utilisation *x= 3; x &x &n  *x= n  3 x= &n 4 octets

nom différent dans appel et définition PARAMETRE en E/S : Transmettre l’adresse d’une variable de type simple à une fonction (utilisation des pointeurs) /* PROTOTYPE FONCTION : void NomFonction(TYPES POINTEUR); */ void Vabs(int *); int main() { int a; ... /* APPEL FONCTION : NomFonction(Adresse VariableE/S); */ Vabs(&a); } /* DEFINITION DE LA FONCTION void NomFonction(TYPES POINTEUR NOMSPARAMETRES); */ void Vabs(int *x) { *x= ... nom différent dans appel et définition

Ecrire une fonction avec paramètre en E/S de type Tableau /* PROTOTYPE FONCTION : void NomFonction(TYPETABLEAU); */ void RemplirTableau(float [ ]); int main() { float tabReel[3]; ... /* APPEL FONCTION : NomFonction(NOMTABLEAU); */ RemplirTableau(tabReel); } void RemplirTableau(float tabR[3]) /* DEFINITION DE LA FONCTION */ { tabR[0]= ... nom différent dans appel et définition

Précision sur le passage du nom du tableau Nom des cases du tableau tab[0] tab[1] tab[2] 2 5 4 Indices relatifs des cases du tableau tab Nom du tableau = adresse tableau =&tab[0] 0 1 2 tab=&tab[0] tab[0] 2 &tab[1] tab[1] 5 Adresses des cases du tableau RAM &tab[2] tab[2] 4

Passage par ADRESSE (paramètre en E/S) : Tableau Un PARAMETRE en E/S est passé par adresse. Il est en lecture/écriture pour la fonction appelée, qui peut le modifier. Donc, le TABLEAU passé, est modifié directement par la fonction.

FONCTIONS avec paramètres en Entrée/Sortie CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée/Sortie 3- Comment le CPU exécute des FONCTIONS avec paramètre en E/S ?

Exécution CPU d’un passage de paramètre en E/S de type Tableau : quel est le lien entre tabReel et tabR ? int main() { float tabReel[2]; int i; RemplirTableau(tabReel); for(i=0;i<2;i++) { printf("\t%.2f",tabReel[i]); } } void RemplirTableau(float tabR[2]) { int i; for ( i=0 ; i<=1 ; i=i+1 ) { tabR[i]= i+1; } } @2 (tabReel) tabR= tabReel tabReel[0]: --- tabReel[0]: 1 @4 tabR tabReel[1]: --- tabReel[1]: 2

Exécution CPU d’un passage de paramètre en E/S de type simple : quel est le lien entre a et x ? int main() { int a; printf("Donner a : "); scanf("%d",&a); printf("\na : %d", a); Vabs(&a); // valeur absolue printf("\na : %d", a); } void Vabs(int *x) { if (*x<0) { *x= - (*x); } @3 x &a= @1 *x= a: 2 a: -2 x= &a= @1

Exécution CPU du passage de paramètre en Entrée/Sortie Exécution de la fonction main() Déclaration et saisie de a : a reçoit -2 du clavier Appel fonction avec passage de l’adresse de a : Vabs(&a) Exécution de la fonction appelée Initialisation des paramètres en E/S : x= &a Modification de la valeur de a : *x= -(-2). Suite et fin du main() : le contenu de a a été modifié (2). /* PROTOTYPE FONCTION */ void Vabs(int *); int main() { int a; ... /* APPEL FONCTION */ Vabs(&a); } /* DEFINITION DE LA FONCTION */ void Vabs(int *x) { *x= ...