Travaux Pratiques d Informatique 1



Documents pareils
I. Introduction aux fonctions : les fonctions standards


Programmation C++ (débutant)/instructions for, while et do...while

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

CORRECTION EXERCICES ALGORITHME 1

Claude Delannoy. 3 e édition C++

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)

Initiation à la programmation en Python

Introduction au langage C

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

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

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

STAGE IREM 0- Premiers pas en Python

et Programmation Objet

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

TP 1. Prise en main du langage Python

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction à MATLAB R

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

Cours d Algorithmique et de Langage C v 3.0

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmique et Programmation, IMA

Chap III : Les tableaux

Le langage C. Séance n 4

Les structures de données. Rajae El Ouazzani

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

Java Licence Professionnelle CISII,

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

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

TP : Gestion d une image au format PGM

LES TYPES DE DONNÉES DU LANGAGE PASCAL

IUT ANNECY Département Mesures Physiques Cours d informatique Initiation au langage C

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

TP, première séquence d exercices.

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

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

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

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

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

Conventions d écriture et outils de mise au point

Programmer en JAVA. par Tama

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

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

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

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

F7n COUP DE BOURSE, NOMBRE DÉRIVÉ

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

Recherche dans un tableau

Corrigé des TD 1 à 5

Programmation Classique en langage C

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

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

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Tp 1 correction. Structures de données (IF2)

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

Algorithmique I. Algorithmique I p.1/??

as Architecture des Systèmes d Information

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

Programme Compte bancaire (code)

1 Recherche en table par balayage

Les arbres binaires de recherche

INF 321 : mémento de la syntaxe de Java

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Introduction à l algorithmique et à la programmation M1102 CM n 3

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Travaux Dirigés n 1 : chaînes de caractères

Cours d algorithmique pour la classe de 2nde

Probabilités sur un univers fini

Présentation du langage et premières fonctions

Notions fondamentales du langage C# Version 1.0

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

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

Outils pour la pratique

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

EXCEL TUTORIEL 2012/2013

Initiation. àl algorithmique et à la programmation. en C

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

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Les chaînes de caractères

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Cours 1 : Qu est-ce que la programmation?

Chapitre 2 Devine mon nombre!

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre 2. Classes et objets

Gestion distribuée (par sockets) de banque en Java

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

Les structures. Chapitre 3

Examen Médian - 1 heure 30

Partie 1. Fonctions plus complexes dans Excel. Fonctions Si(), Et(), Ou() et fonctions imbriquées. Opérateurs logiques. I.1.

Découverte de Python

Programmation système I Les entrées/sorties

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

ACTIVITÉ DE PROGRAMMATION

Transcription:

Faculté Polytechnique de Mons Service d Informatique Travaux Pratiques d Informatique 1 par Mohammed BENJELLOUN Avec la participation de : J-F Bauwens, Assistant S. Mahmoudi, Assistant E. Malengreau, Assistante pédagogique A. Wermelinger, Assistante Année académique 2006-2007

Table des matières Introduction 1 Consignes....................................... 1 1 Instructions de base 2 1.1 Objectifs de la séance.............................. 3 1.2 Rappels syntaxiques.............................. 3 1.3 Le jeu de l urne................................. 5 1.4 Le jeu du nombre caché............................ 7 1.5 Pour ceux qui ont terminé........................... 9 2 Tableaux et instruction switch 10 2.1 Objectifs de la séance.............................. 11 2.2 Rappels théoriques............................... 11 2.3 Application................................... 12 3 Les Fonctions 14 3.1 Objectifs de la séance.............................. 15 3.2 Rappels théoriques............................... 15 3.3 Application................................... 16 4 Pointeurs, références et arguments de fonctions 18 4.1 Objectifs de la séance.............................. 19 4.2 Rappels théoriques............................... 19 4.3 Application................................... 22 Conclusions et perspectives 23 i

Introduction Consignes Si malgré la préparation du TP, vous n avez pas terminé à la fin de la séance, vous devrez le continuer seul et poser vos éventuelles questions avant le TP suivant. Vous pouvez venir nous les poser directement, durant les ateliers du mercredi ou les poser via le forum du cours. Cette remarque est valable pour tous les travaux pratiques de ce cours. Pour rappel, les travaux pratiques sont obligatoires. 1

Chapitre 1 Instructions de base Contents 1.1 Objectifs de la séance........................ 3 1.2 Rappels syntaxiques......................... 3 1.2.1 Les commentaires.......................... 3 1.2.2 Les opérateurs de base........................ 3 1.2.3 Les flux d entrées/sorties...................... 3 1.2.4 Les structures alternatives...................... 4 1.2.5 Les structures répétitives...................... 4 1.3 Le jeu de l urne........................... 5 1.3.1 Modifications............................. 5 1.3.2 Nombre aléatoire........................... 6 1.3.3 Complexité algorithmique...................... 6 1.4 Le jeu du nombre caché...................... 7 1.4.1 Première étape............................ 7 1.4.2 Deuxième étape............................ 8 1.4.3 Troisième étape............................ 8 1.4.4 Quatrième étape........................... 8 1.5 Pour ceux qui ont terminé..................... 9 2

Instructions de base 3 1.1 Objectifs de la séance Nous commencerons par rappeler dans ce chapitre les principales instructions qui seront utilisées lors de ces travaux pratiques. Ces notions seront illustrées avec la mise en pratique d un exemple traité durant le cours théorique. A la fin de cette séance, l étudiant maîtrisera la syntaxe des principales instructions de base. 1.2 Rappels syntaxiques 1.2.1 Les commentaires 1 // ceci est un commentaire 2 3 /* ceci est un commentaire 4 sur 5 plusieurs lignes*/ 1.2.2 Les opérateurs de base Voir syllabus d exercices, chapitre 2. 1.2.3 Les flux d entrées/sorties cout est le flux standard de sortie habituellement associé à l écran. cin est le flux standard d entrée habituellement associé au clavier. 1 #include <iostream> 2 using namespace std; 3 4... 5 // affichage à l écran 6 cout << "Un entier" 7 8 // saisie au clavier et stockage dans la variable temp 9 cin >> temp

Instructions de base 4 1.2.4 Les structures alternatives Si l expression A est vraie alors les instructions 1 et 2 s exécutent. Sinon, ce sont les instructions 3 et 4 qui s exécutent. 1 if (expressiona){ 2 instruction1; 3 instruction2; 4 } 5 else{ 6 instruction3; 7 instruction4; 8 } 1.2.5 Les structures répétitives 1 for ( expression1 ; expression2 ; expression3){ 2 instruction1; 3 instruction2; 4... 5 } 1 while (expression){ 2 instruction1; 3 instruction2; 4... 5 } 1 do{ 2 instruction1; 3 instruction2; 4... 5 }while (expression);

Instructions de base 5 1.3 Le jeu de l urne Le jeu de l urne expliqué durant le cours théorique consiste à tirer au sort 2 boules dans une urne. Les boules sont soit noires soit vertes. A chaque tirage, une boule est replacée dans l urne comme l illustre la figure 1.1. Le but du jeu est de déterminer la couleur de la dernière boule. Fig. 1.1 Illustration du jeu de l urne [2]. Programmer le jeu de l urne (version automatique) en respectant les étapes ci-dessous. 1. Demander à l utilisateur combien de boules vertes et noires existent dans l urne. Deux variables NN et NV seront utilisées pour mémoriser cette information. Calculer NT = NN + NV et afficher le résultat. 2. Dans un premier temps, l utilisateur tire les boules en regardant dans l urne. Il a donc le choix entre tirer deux boules noires, 1 noire et 1 verte, ou deux boules vertes. Réaliser un tirage. Afficher NN, NV et la couleur de la boule qui est remise dans l urne en fonction du choix de l utilisateur. Tester le programme et vérifier les différents cas possibles. 3. Afin de vider complètement l urne, il est nécessaire de prélever plusieurs fois des boules de l urne. Recommencer l opération précédente tant qu il y au a moins une boule dans l urne. S il n y a qu une boule dans l urne, le tirage est impossible. La boucle peut donc être interrompue avec l instruction break et la couleur de la dernière boule est affichée pour terminer le jeu. 1.3.1 Modifications Le programme résultant du point précédent peut être amélioré de plusieurs manières.

Instructions de base 6 1. Comme vu en théorie, le nombre d opérations dépend strictement du nombre initial de boules dans l urne. Mettre en commentaire les modifications du point 3 de la section 1.3 et recommencer le tirage i fois, pour i variant de NT à 2. 2. Recommencer la saisie des variables NN et NV tant que NT n est pas compris entre 1 et 20. En effet, il faut protéger l utilisateur des mauvaises manipulations qu il pourrait commettre. De plus, NN et NV doivent être positifs. 1.3.2 Nombre aléatoire Le jeu sera complet dès que l utilisateur tire réellement au sort les boules dans l urne. L ordinateur va donc générer un nombre aléatoire pour remplacer l intervention de l utilisateur dans le tirage au sort (point 2 de la section 1.3). Pour ce faire, les fonctions srand() et rand() seront utilisées. La première permettra d initialiser le générateur aléatoire de la machine à l aide d un nombre passé en paramètre. La seconde procède au tirage au sort d un nombre alétoire proprement dit. Un exemple est donné ci-après. 1 do 2 cin>>nbr; 3 while(nbr<0); 4 5 srand(nbr); //on initialise le générateur de chiffre aléatoire avec nbr saisi auparavant 6 7 // une boucle pour nous donner un nombre aléatoire entre 0 et 3 car 3 options sont possibles 8 do 9 choix=rand(); 10 while(choix>2); Il est possible d améliorer l exemple précédent grâce à l opération modulo (%). 1.3.3 Complexité algorithmique A l aide du programme précédent, vérifier la complexité de votre algorithme.

Instructions de base 7 1.4 Le jeu du nombre caché Ecrire un programme qui choisira un nombre entier aléatoire compris entre 0 et 100, puis le fera deviner à l utilisateur au moyen d essais successifs : le programme demandera au joueur d entrer un nombre; si le joueur devine le bon nombre, il a gagné, le programme lui affiche Bravo, c est trouvé! et s arrête. si le joueur ne donne pas le bon nombre, le programme lui précise trop petit ou trop grand, puis lui demande un autre essai, jusqu à ce que le joueur trouve. Dans un premier temps, le nombre à deviner sera saisi au clavier et sera nommé chifacher. Pour vous aider, voici le début du programme : 1 2 #include <iostream> 3 using namespace std; 4 void main() { 5 // chifacher : c est le chiffre que l on cherche 6 int chiffre, chifacher; 7 8 cout<<"entrez le chiffre positif (entre 1 et 100) a chercher : "; 9 cin >> chifacher; 10 11 cout<<"entrez votre chiffre positif "<<endl; 12 cin >> chiffre; 13 14 if (chiffre>chifacher) 15 cout << "Votre chiffre est Trop Haut \n"; 16 else if (chiffre = = chifacher) 17 cout << "Bravo c est trouve \n"; 18 else 19 cout << "Votre chiffre est Trop Bas \n"; 20 } Ecrivez ce programme et testez-le en jouant plusieurs fois. 1.4.1 Première étape Malheureusement, le chiffre à rechercher reste affiché à l écran. Dès lors, il n est pas très difficile de le trouver. Utilisez la boucle for afin d afficher 100 endl à l écran. Que se passe-t-il?

Instructions de base 8 1.4.2 Deuxième étape Lorsque le chiffre à rechercher n est plus affiché à l écran, il est presque impossible de le trouver dans l état où se trouve votre programme. En effet, il est nécessaire de disposer de plusieurs essais pour trouver le nombre à rechercher. Perfectionnez le programme pour que le joueur dispose de 5 essais pour trouver le nombre. Ensuite, modifiez le programme pour qu il puisse compter le nombre d essais du joueur et afficher le score en fin de partie. Cette boucle s exécute tant que l utilisateur n a pas trouvé. Comparez ces 2 méthodes et expliquez la principale différence? A la fin de chaque partie, une fois le nombre trouvé, le programme propose de continuer : une autre partie (O/N)? 1.4.3 Troisième étape Que se passe-t-il si le chiffre à rechercher n est pas compris entre 1 et 100? Remédiez à ce problème en obligeant le joueur à recommencer la saisie du chiffre à recherche tant que celui-ci n est pas compris entre 1 et 100. 1.4.4 Quatrième étape En vue d améliorer le programme, le chiffre à deviner ne sera plus saisi par l utilisateur mais choisi aléatoirement par l ordinateur. Pour ce faire, utilisez la fonction random. Testez le nouveau programme en jouant plusieurs fois. Que constatez-vous? Pourrait-on encore améliorer le programme?

Instructions de base 9 1.5 Pour ceux qui ont terminé Écrire un programme C++ qui calcule les racines d un polynôme du second degré à coefficients réels. Examinez toutes les possibilités (racines réelles, complexes, doubles, infinité ou inexistence de solutions). ax 2 + bx + c = 0 1 si a=b=c=0 Il y a une infinité de solutions réelles 2 3 si a=b=0 et c!=0 Il n y a aucune solution 4 5 si a=0, b!=0 et c!=0 une racine réelle de valeur -c/b 6 7 si a!=0, b!=0 et c!=0 8 delta = b*b - 4.0*a*c 9 si delta =0 // racine double 10 racine1 = racine2 = -b/(2*a) 11 sinon si delta > 0 //2 racines réelles 12 temp = sqrt(delta) 13 racine1 = (-b + temp)/(2*a) 14 racine2 = (-b - temp)/(2*a) 15 afficher( racine1) 16 afficher( racine2) 17 sinon // 2 racines complexes conjuguées 18 temp = sqrt(-delta) 19 reel = -b/2*a imag = temp/2*a 20 afficher("z1 = reel + imag*i") 21 afficher("z2 = reel - imag*i") aide : sqrt(x) = racine carrée de x, nécessite math.h

Chapitre 2 Tableaux et instruction switch Contents 2.1 Objectifs de la séance........................ 11 2.2 Rappels théoriques......................... 11 2.2.1 Les tableaux............................. 11 2.2.2 La structure de sélection switch................... 11 2.3 Application.............................. 12 2.3.1 Première étape............................ 12 2.3.2 Deuxième étape............................ 12 2.3.3 Troisième étape............................ 12 2.3.4 Quatrième étape........................... 13 10

Tableaux et instruction switch 11 2.1 Objectifs de la séance Le but de la séance est : de manipuler des tableaux (à une et deux dimensions) de différents types; de structurer un programme grâce à l utilisation de l instruction switch. 2.2 Rappels théoriques 2.2.1 Les tableaux Un tableau est un ensemble de variables de même type. Chacune d elles est appelée élément du tableau. Tous les éléments sont référencés à l aide du nom du tableau et sont stockés dans des emplacements contigus en mémoire. Syntaxe générale 1 Type Nom[n]; L élément Type correspond à l indicateur du type de données à stocker dans le tableau. L élément Nom est le nom du tableau déclaré. n définit le nombre d éléments et doit figurer entre crochets. Les tableaux sont indexés de 0 à n-1. Le premier élément correspond à l indice 0, le deuxième élément à l indice 1, etc. Un tableau à N dimensions est déclaré de la façon suivante : 1 Type Nom[Taille1][Taille2]...[TailleN]; où N est un nombre positif. 2.2.2 La structure de sélection switch L instruction de sélection switch est dédiée aux programmes qui déclenchent des actions en fonction de valeurs précises, comme les menus. Cette instruction permet de remplacer plusieurs if-else imbriqués et ainsi de gagner en lisibilité quand leur nombre augmente. Syntaxe 1 switch ( variable_contr^ole) { 2 case expression1: instruction1 ; 3 break; 4 case expression2: instruction2 ; 5 break; 6... 7 default:instruction-par-défaut ; 8 }

Tableaux et instruction switch 12 L expression conditionnelle variable contrôle est évaluée en premier. Si la valeur de renvoi est égale à l expression constante expression1, l instruction ensemble instruction1 s exécute. Si elle est égale à la valeur de expression2, ensemble instruction2 s exécute. Si la valeur de renvoi n est égale à aucune des expressions, l instruction figurant immédiatement après le mot clé default s exécute. Le mot clé case régit chaque cas. Remarque : En l absence de break, l instruction suivante est exécutée. 2.3 Application 2.3.1 Première étape Ecrire un programme qui demande à l utilisateur d entrer un entier N compris entre 1 et une constante Nmax. On fixera Nmax à 10. La valeur saisie sera mémorisée dans la variable N, par exemple. Le programme réitérera sa demande tant que N n est pas compris dans l intervalle fermé [1, Nmax]. Si l utilisateur ne satisfait pas à la demande après 3 essais, le programme s arrêtera. Tester le programme plusieurs fois. 2.3.2 Deuxième étape Après avoir saisi un entier N compris entre [1,Nmax], le programme proposera différentes opérations à l utilisateur : 1. calcul de la somme de N réels; 2. calcul de la moyenne de N entiers; 3. recherche du maximum de N string; 4. recherche du minimum d une matrice NxN de caractères. Le programme demandera ensuite à l utilisateur de faire son choix et le mémorisera dans la variable choix. Tester le programme plusieurs fois. 2.3.3 Troisième étape Une fois le choix de l utilisateur effectué, le programme l exécutera directement. Pour ce faire, utiliser l instruction switch afin de structurer le programme. Chaque cas du switch exécutera une des quatre opérations mentionnées ci-dessus et détaillées dans ce paragraphe.

Tableaux et instruction switch 13 Opération 1 - Calcul de la somme de N réels Le programme saisira N réels et les stockera dans un tableau. Il affichera les éléments du tableau puis calculera et affichera ensuite la somme de ces N réels. Pour rappel, la valeur de N est celle saisie en début de programme. Opération 2 - Calcul de la somme de N entiers Le programme saisira N entiers et les stockera dans un tableau. Il affichera les éléments du tableau puis calculera et affichera ensuite la moyenne de ces N entiers. Opération 3 - Recherche du maximum de N string Le programme saisira N string et les stockera dans un tableau. Il calculera et affichera ensuite le maximum (en se basant sur un classement alphabétique) de ces N strings. Opération 4 - Recherche du minimum d une matrice NxN de caractères Le programme saisira NxN caractères et les stockera dans une matrice (tableau à 2 dimensions). Il calculera et affichera ensuite le minimum (en se basant sur un classement alphabétique) de ces NxN caractères. 2.3.4 Quatrième étape Dès qu une opération est terminée, le programme proposera à nouveau le menu à l utilisateur tant que celui-ci ne décide pas de le quitter. Ajouter les instructions nécessaires pour satisfaire à cette condition. Pour vous aider : 1 boucle{ 2 cout << "Somme des reels, tapez 1" << endl; 3 cout << "Moyenne des entiers, tapez 2" << endl; 4 cout << "Max des strings, tapez 3" << endl; 5 cout << "Min de la Matrice de char, tapez 4" << endl; 6 cin >> choix; //deuxième étape 7 8 switch(choix){ 9 10 case 1: Saisit N réels, les range dans un tableau. Calcule et affiche la somme. 11 case 2: Saisit N entiers, les range dans un tableau. Calcule et affiche la moyenne. 12 case 3: Saisit N string, les range dans un tableau. Cherche et affiche le maximum. 13 case 4: Saisit NxN carctères, les range dans une matrice. Cherche et affiche le minimum. 14 }// switch(choix) - troisième étape 15 } // boucle - quatrième étape

Chapitre 3 Les Fonctions Contents 3.1 Objectifs de la séance........................ 15 3.2 Rappels théoriques......................... 15 3.3 Application.............................. 16 3.3.1 Première étape............................ 16 3.3.2 Deuxième étape............................ 16 3.3.3 Troisième étape............................ 17 14

Les Fonctions 15 3.1 Objectifs de la séance Le but de la séance est d apprendre à mettre en oeuvre des fonctions afin de modulariser un programme qui gagnera en lisibilité. 3.2 Rappels théoriques Une fonction est un ensemble d instructions, doté d un nom et pouvant éventuellement comporter des paramètres. On peut l appeler (en provoquant l exécution) depuis une autre fonction (éventuellement de la fonction main correspondant au programme principal ) en citant son nom, suivi, entre parenthèses, d une liste de paramètres, à condition d avoir préalablement déclaré cette fonction par un prototype. Il existe deux grandes classes de fonctions : celles qui ne revoient pas de résultats (fonction action); leur appel ne peut se faire que sous la forme d une instruction simple comme : 1 fct (n,a); celles qui fournissent un résultat; leur appel peut se faire, soit comme précédemment (leur résultat n est alors pas utilisé), soit au sein d une expression arithmétique, comme dans : 1 z= fct(n,x) * 2 + s ; Dans la définition d une fonction : l en-tête précise son nom, le type de paramètres (dits alors muets) et le type de sa valeur de retour; on utilise le mot void pour indiquer l absence de paramètres ou de valeur de retour; on peut déclarer des variables qui sont alors dites locales à la fonction, utilisables uniquement dans les instructions de la fonction. Une fonction peut renvoyer n importe quel type de valeur, à l exception d un tableau ou d une fonction. L instruction return figure dans la définition de la fonction et renvoir un type de valeur correspondant à celui qui est indiqué dans la déclaration. Lorsqu un tableau est mentionné en paramètre effectif, c est en fait la valeur de son adresse qui est transmise à la fonction. Cette dernière peut alors, contrairement à ce qui se passe pour les variables scalaires, modifier le contenu de ce tableau. Si l on souhaite qu une fonction modifie la valeur d une variable scalaire, il faut utiliser les pointeurs ou les références (voir TP4).

Les Fonctions 16 3.3 Application 3.3.1 Première étape Lors de cette séance, il vous est demandé de transformer le programme réalisé lors de la dernière séance en un programme modulaire, c est-à-dire un programme faisant appel à différentes fonctions. Pour rappel, dans un premier temps, on demandera à l utilisateur d entrer un entier N compris entre 1 et une constante Nmax. On fixera Nmax à 10. La valeur saisie sera mémorisée dans la variable N, par exemple. Le programme réitérera sa demande tant que N n est pas compris dans l intervalle fermé [1,Nmax]. Si l utilisateur ne satisfait pas à la demande après 3 essais, le programme s arrêtera. On demandera ensuite à l utilisateur d effectuer un choix parmi différentes opérations (voir ci-dessous) proposées dans une fonction menu(), par exemple. Une fois le choix de l utilisateur effectué, le programme l exécutera directement grâce à l utilisation de l instruction switch. Chaque cas du switch exécutera une des quatre opérations reprises ci-dessous. Chaque opération sera traitée à l aide de trois fonctions (une fonction saisie, une fonction affichage et une fonction propre à l opération traitée). Opération 1 - Calcul de la somme de N réels Le programme saisira N réels et les stockera dans un tableau (fonction Saisie reel(), par exemple). Il affichera les éléments du tableau (fonction Affiche reels(), par exemple) puis calculera et affichera ensuite la somme de ces N réels (fonction Affiche Som()). Pour rappel, la valeur de N est celle saisie en début de programme. Opération 2 - Calcul de la moyenne de N entiers Le programme saisira N entiers et les stockera dans un tableau. Il affichera les éléments du tableau puis calculera et affichera ensuite la moyenne de ces N entiers. Opération 3 - Recherche du maximum de N strings Le programme saisira N strings et les stockera dans un tableau. Il calculera et affichera ensuite le maximum de ces N strings (en se basant sur un classement alphabétique). Opération 4 - Recherche du minimum d une matrice NxN de caractères Le programme saisira NxN caractères et les stockera dans une matrice (tableau à 2 dimensions). Il calculera et affichera ensuite le minimum de ces NxN caractères (en se basant sur un classement alphabétique). 3.3.2 Deuxième étape Après avoir quitté la boucle switch et avant de quitter le programme, on demandera à ce dernier d afficher le résultat des quatre opérations (somme, moyenne, maximum, minimum).

Les Fonctions 17 Que se passera-t-il si les résultats des fonctions n ont pas été stockés dans une variable temporaire? Que se passera-t-il si le programme n a pas exécuté toutes les opérations? Existe-t-il un moyen simple qui permette de vérifier quels cas du switch ont été traités ou non? Pour vous aider, vous pouvez vous inspirer de la modularité suivante : 1 boucle{ 2 choix = menu(??); 3 switch(choix){ 4 case 1: Saisie_reels(???); 5 Affiche_Reels(???); 6 Som = Affiche_Som(???); 7 case 2: Saisie_entiers(???); 8 Affiche_enties(???) ; 9 Moy = Affiche_Moy(???); 10 case 3: Saisie_ strings(???); 11 Affiche_ strings(???); 12 Max = Affiche_Max(???); 13 case 4: Saisie_ Matrice(???); 14 Affiche_ Matrice(???); 15 Min= Affiche_Min(???); 16 } // switch(choix) 17 Ici avant de quitter le programme, on affiche Som, Moy, Max et Min; 18 } // boucle 3.3.3 Troisième étape Afin d optimiser le programme, est-il possible de minimiser le nombre de fonctions saisie et affichage? Que deviendrait le programme si les vecteurs des réels, des entiers et des strings n avaient pas tous le même nombre d éléments (même valeur de N)?

Chapitre 4 Pointeurs, références et arguments de fonctions Contents 4.1 Objectifs de la séance........................ 19 4.2 Rappels théoriques......................... 19 4.2.1 Les pointeurs............................. 19 4.2.2 Différents types de passage de paramètres d une fonction.... 19 4.2.3 Allocation dynamique de la mémoire................ 21 4.3 Application.............................. 22 4.3.1 Première étape............................ 22 4.3.2 Deuxième étape............................ 22 18

Pointeurs, références et arguments de fonctions 19 4.1 Objectifs de la séance Le but de la séance est : d utiliser des fonctions; de passer des paramètres par référence et/ou à l aide de pointeurs; de se familiariser avec la notion de vecteur dynamique. 4.2 Rappels théoriques 4.2.1 Les pointeurs Un pointeur est une variable dont la valeur est une adresse. Cette adresse est l emplacement d une autre variable en mémoire. On dit que le pointeur pointe vers cette autre variable. Il peut donc recevoir des valeurs différentes tout au long de l exécution du programme. Nous avons donc, lorsque le pointeur P pointe vers la variable i : Fig. 4.1 Illustration des pointeurs [1]. P = 35 P = 5A0F3 &P = 60C19 i = 35 &i = 5A0F3 4.2.2 Différents types de passage de paramètres d une fonction Il existe deux modes de passages de paramètres : le passage par valeur (cf. TP3) et le passage par référence (ou par adresse). Passage de paramètre par valeur Le passage de paramètre par valeur réalise une copie locale (au niveau de la fonction) de la valeur de la variable. La fonction travaille alors sur une copie de la variable et

Pointeurs, références et arguments de fonctions 20 toutes les modifications apportées à la copie seront oubliées à la fin de l exécution de la fonction (destruction de la copie). On utilise donc le passage par valeur lorsque le programme appelant n a pas besoin de garder les modifications, réalisées par la fonction, du contenu de la variable passée en argument. Remarque : l instruction return permet de récupérer les modifications d une et une seule variable vers la fonction appelante. Passage de paramètre par référence ou par adresse Le passage de paramètre par adresse transmet à la fonction l adresse de la variable qui sera utilisée durant l exécution de la fonction. Dès lors, les modifications seront réalisées sur la variable originale et seront donc toujours acquises après l exécution de la fonction. On utilise le passage par référence (ou par adresse) lorsque le programme appelant a besoin de garder les modifications, réalisées par la fonction, du contenu de la variable passée en argument. Remarque : lorsqu un tableau est mentionné en paramètre, c est en fait son adresse, qui correspond à l adresse de la première case du tableau, qui est transmise à la fonction. Exemple : Fig. 4.2 Illustration du passage par valeur, par pointeur, par référence [1].

Pointeurs, références et arguments de fonctions 21 Syntaxe : Déclaration : Appel : 1 void nom_fonction (type &paramètre(s)); 1 nom_fonction ( paramètre(s)) Définition : 1 void nom_fonction (type &paramètre(s)){ 2... 3 } 4.2.3 Allocation dynamique de la mémoire Il est parfois difficile de déterminer à l avance la taille requise d un tableau avant l exécution du programme. Trop élevée ou trop réduite, la taille d un tableau peut pénaliser considérablement une application. Heureusement, il existe des opérateurs spécifiques d affectation dynamique de mémoire permettant d allouer et de libérer de la mémoire. Les opérateurs new[] et delete[] sont utilisés pour allouer et restituer la mémoire pour les types tableaux. Il est ainsi possible de réserver l espace strictement nécessaire au bon fonctionnement de l application. Syntaxe : Allocation : 1 type *nom_tableau = new type[taille] ; Libération : 1 delete[] nom_tableau ;

Pointeurs, références et arguments de fonctions 22 4.3 Application 4.3.1 Première étape Écrire un programme qui traite un vecteur de nombres entiers et de taille maximale égale à vingt (taille max = 20) et qui gère en boucle le menu suivant : 1. Saisie du vecteur et affichage de ses données. 2. Calcul (1 seule fonction) et affichage du minimum et du maximum du vecteur. 3. Échange de position maximum minimum et affichage. 4. Efface le premier et le dernier élément du vecteur et affichage. 5. Ajout d un élément au milieu du vecteur et affichage. 6. Tri à bulles du vecteur et affichage. 7. Quitter. Consignes : Le menu sera affiché via une fonction et les différentes opérations seront traitées via l instruction switch case. Les points 1 à 6 seront chacun traités par au moins une fonction. Le nombre d éléments N du vecteur, plus petit ou égal à taille max, doit être demandé et testé dans la fonction saisie. Il vous est demandé d éviter l utilisation de l instruction return dans les fonctions et de privilégier l emploi des références pour retourner les modifications des paramètres à la fonction appelante. L optmisation des tests est souhaitée; le calcul du minimum, par exemple, ne peut être effectué avant de faire la saisie des données du vecteur. 4.3.2 Deuxième étape Que deviendrait le programme si le vecteur est crée dynamiquement?

Conclusions et perspectives Les travaux réalisés permettront d aborder avec sérénité la programmation orientée objet en 2ème année de Bachelier. Les lecteurs ne doivent pas perdre de vue qu il serait très difficile de parcourir exhaustivement les bases du C++ en si peu de temps. Dès lors, les travaux pratiques décrits ici sont considérés comme une introduction à un domaine très vaste, aussi bien par la matière qu il aborde que par les problématiques qu il peut résoudre. 23

Bibliographie [1] M. Benjelloun, Introduction à la programmation en c++, 1e bachelier, Syllabus, Mutuelle d Edition des étudiants, Faculté Polytechnique de Mons, 150 pages, 2006-2007. [2] G. Libert, Informatique 1 : cours de théorie, Syllabus, Mutuelle d Edition des étudiants, Faculté Polytechnique de Mons, 2006-2007. 24