Travaux pratiques 9 : Qu y a-t-il au menu?



Documents pareils
STAGE IREM 0- Premiers pas en Python

Algorithmique et Programmation, IMA

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

Le langage C. Séance n 4

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

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

Corrigé des TD 1 à 5

Java Licence Professionnelle CISII,

Introduction au langage C

TP1 - Prise en main de l environnement Unix.

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

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

Securexam pour le programme CPA,CGA

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

Programmation système I Les entrées/sorties

Création d une SIGNATURE ANIMÉE avec PHOTOFILTRE 7

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

Solutions du chapitre 4

Rappels Entrées -Sorties

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours de Systèmes d Exploitation

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l 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)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chapitre 2 Devine mon nombre!

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

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

NOTICE TELESERVICES : Créer mon compte personnel

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

Cours Programmation Système

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

La Clé informatique. Formation Excel XP Aide-mémoire

Assistant d e tablissement de Tableaux

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

TP 1 Prise en main de l environnement Unix

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

Initiation à la programmation en Python

Algorithmique et programmation : les bases (VBA) Corrigé


Le prototype de la fonction main()

Programmation système en C/C++

TUTORIEL IMPRESS. Ouvrir Impress cocher «présentation vierge», «suivant» cocher «écran», «suivant» cocher «standard», «créer»

Initiation à LabView : Les exemples d applications :

NOTICE D' UTILISATION CAMWORKS FRAISAGE. Luc Vallée Lycée Blaise Pascal Segré

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

Introduction à MATLAB R

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

ENVOI EN NOMBRE DE SMS

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

Utilisation d Hyperplanning 2011

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

Premiers pas avec SES-Pegase (version 7.0) SES : Un Système Expert pour l analyse Statistique des données. Premiers pas avec SES-Pegase 1

Chap III : Les tableaux

Présentation du langage et premières fonctions

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

Note de cours. Introduction à Excel 2007

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

Comment accéder à d Internet Explorer

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

Inscription de votre site sur Google Configuration du sitemap et de Webmaster Tools pour PrestaBox

Numbers en EPS UN TUTORIEL POUR LA! NOUVELLE VERSION DE NUMBERS EST! DISPONIBLE SUR TICEPS.FREE.FR. ticeps.free.fr

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

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

ENVOI EN NOMBRE DE SMS

INF 321 : mémento de la syntaxe de Java

Premier cours d informatique

ALGORITHMIQUE ET PROGRAMMATION En C

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Chaque ordinateur est constitué de différentes unités de stockage de données (Disque dur, Graveur ) que l on peut imaginer comme de grandes armoires.

Silhouette Studio Leçon N 2

SUPPORT DE COURS. Langage C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TD séance n 2c Mise à jour des Systèmes

Les structures. Chapitre 3

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Assemblage couleur & trait en InDesign pour fichier Acrobat - 1

Initiation à l algorithmique

Programme Compte bancaire (code)

PROJET 1 : BASE DE DONNÉES REPARTIES

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

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

AWS avancé. Surveiller votre utilisation d EC2

Outils pour la pratique

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

Guide de l Administrateur

Signature plume. Matériel : une plume ou un crayon. Ouvrir PhotoFiltre. Ouvrir votre image plume dans PhotoFiltre

Guide de démarrage rapide. (pour la version 5.0.)

Atelier Travailler vos photos Mars 2015

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

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

Saisissez le login et le mot de passe (attention aux minuscules et majuscules) qui vous ont

Examen Médian - 1 heure 30

ZOTERO Un outil gratuit de gestion de bibliographies

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

TP 1. Prise en main du langage Python

1 Introduction - Qu est-ce que le logiciel R?

Utilisation de l éditeur.

Transcription:

Université Paris-Nord L1 Institut Galilée Année 2009-2010 Licence 1-1er semestre Travaux pratiques 9 : Qu y a-t-il au menu? Correction. Note aux chargés de TD. L objectif du TP est de les familiariser avec les fonctions au travers d un des points présenté en cours : la structuration du code. Ils créent un menu permettant l exécution de différents sous-problèmes qu il sont déjà résolus en TP, chaque sous-problème étant implanté dans une fonction. On incite ici les étudiants à structurer, indenter et commenter correctement leur code, sans quoi ils ne viendront pas à bout de ce type d exercice. Dans les TP précédents vous avez réalisé plusieurs programmes en C effectuant chacun une tâche. Le but de ce TP est de réunir plusieurs de ces programmes en un seul, dans lequel l utilisateur choisira la tâche à effectuer dans un menu. À la fin de l exécution d une tâche, le menu est à nouveau affiché pour laisser le choix à l utilisateur d exécuter d autres tâche ou de quitter le programme. Un exemple d exécution est donné plus bas. 1 Un menu Dans un répertoire TP9, écrire et tester le programme menu1.c de manière à ce que : 1. le programme affiche un menu proposant 3 choix représentés par des entiers : (1) tester si un entier est premier, (2) calculette ou (0) quitter. L utilisateur fera son choix en entrant un entier. 2. Si cet entier est 0, mettre fin au programme. 3. Sinon : si cet entier est 1 afficher «premier : non disponible», si c est 2, «calculette : non disponible» sinon «choix non disponible», puis boucler à l étape 1. 2 Des programmes Dans votre répertoire TP9, créer le programme premier.c qui teste si un nombre entré par l utilisateur est premier (voir TD). Vérifier que votre programme fonctionne. Dans votre répertoire TP6 (ou celui de votre binôme) doit se trouver le programme réalisant une mini-calculatrice. Vérifier que celui-ci est correctement indenté et commenté, et qu il fonctionne. 1

3 Intégration des programmes dans le menu en utilisant les fonctions Remarque : pour copier/coller sous un système unix vous pouvez : (copier) sélectionner le texte à copier à l aide de la souris ; (coller) effectuer un clic du milieu (bouton-molette) à l endroit où vous souhaitez coller. Enregistrer le fichier menu1.c sous le nom menu2.c. Dans premier.c, extraire le code relatif au problème et intégrer-le dans une fonction qui sera appelée à la bonne place dans votre menu2.c : déclarer une fonction int est_premier(int n) et la définir. Cette fonction renverra la constante symbolique TRUE si n est premier et FALSE (valeur 0) sinon. Faire en sorte que le traitement du choix 1 de l utilisateur utilise cette fonction pour déterminer si un nombre est premier. Faire la même chose avec la calculatrice. Tester menu2.c et s il vous reste du temps ajouter des choix dans le menu, inspirés par les différents problèmes que vous avez déjà résolus dans les TP précédents ( factorielle, deviner le nombre secret, sortir le chien, majeure, mineure ). ****************** MENU ****************** * 1) Tester si un nombre est premier * * 2) Calculette * * 0) QUITTER * ************************** votre choix : 1 Donner un nombre entier positif : 34 Le nombre 34 n est pas premier, 2 divise 34 ****************** MENU ****************** * 1) Tester si un nombre est premier * * 2) Calculette * * 0) QUITTER * ************************** votre choix : 2 Entrer expression : nombre operateur nombre 4.001 * 0.7 4.001 * 0.7 = 2.8007 ****************** MENU ****************** * 1) Tester si un nombre est premier * * 2) Calculette * * 0) QUITTER * ************************** votre choix : 0 Sayonara Correction. Correction avec d autres fonctions ajoutées au menu. La correction est légérement différente de ce qui est demandé. 1 /* -*- coding: utf-8 -*- pour que emacs travaille en utf8 */ 2 /* menu3.c (L1 EI), debut de l utilisation de fonctions dans le menu */ 3 #include <stdlib.h> /* EXIT_SUCCESS, rand, srand */ 4 #include <stdio.h> /* printf, scanf */ 5 #include <time.h> /* time */ 6 7 #define TRUE 1 8 #define FALSE 0 9 #define NB_MAX 100 10 /* declaration de fonctions utilisateurs */ 11 12 /* test de primalité */ 13 int est_premier(int n); 2

14 15 /* Calcul de la factorielle (vaut 1 si l argument est négatif) */ 16 int factorielle(int n); 17 18 /* Tirer un nombre au hasard entre 0 et n */ 19 int nombre_aleatoire(int n); 20 21 /* motif cercle de rayon rayon et de centre (0,0) */ 22 char cercle(int x, int y, int rayon); 23 24 25 int main() 26 { 27 int continuer = TRUE; /* TRUE si on doit proposer le menu */ 28 int choix_menu = 0; /* Choix de l utilisateur */ 29 30 srand(time(null)); /* à ne faire qu une fois */ 31 32 /* Boucle principale d interaction avec l utilisateur */ 33 while(continuer) 34 { 35 /* Affichage du menu */ 36 printf("\n\n"); 37 printf("****************** MENU ******************\n"); 38 printf("\n"); 39 printf("* 1) Tester si un nombre est premier *\n"); 40 printf("* 2) Calculette *\n"); 41 printf("* 3) Deviner un nombre *\n"); 42 printf("* 4) Cercle d etoiles *\n"); 43 printf("*... *\n"); 44 printf("\n"); 45 printf("\n"); 46 printf("* 0) QUITTER *\n"); 47 printf("\n"); 48 printf("************************** votre choix : "); 49 50 /* Choix utilisateur */ 51 scanf("%d", &choix_menu); 52 53 /* Execution du choix de l utilisateur (cas mutuellement exclusifs) */ 54 55 if (1 == choix_menu) /* ---------------- Test de primalité ---------------- 56 { 57 int p; /* nombre a tester */ 58 59 /* Saisie utilisateur */ 60 printf("donner un nombre entier positif : "); 3

61 scanf("%d", &p); 62 63 if (est_premier(p)) /* p est premier... ou négatif */ 64 { 65 printf("le nombre %d est premier\n", p); 66 } 67 else /* x n est pas premier et i - 1 divise x */ 68 { 69 printf("le nombre %d n est pas premier\n", p); 70 } 71 } 72 73 if (2 == choix_menu) /* --------------- Calculette ------------------------ 74 { 75 double nombre_g; /* membre gauche de l expression */ 76 double nombre_d; /* membre droit de l expression */ 77 char op; /* operateur */ 78 double expr; /* resultat de l expression */ 79 80 /* saisie expression */ 81 printf("entrez une expression de la forme : nombre operateur nombre\n") 82 scanf("%lg",&nombre_g); 83 scanf(" %c",&op); 84 if (op ==! ) 85 { 86 int n = nombre_g; /* ignorer la décimale */ 87 expr = factorielle(n); 88 nombre_g = n; /* ignorer la décimale dans l affichage */ 89 } 90 else 91 { 92 scanf("%lg",&nombre_d); 93 } 94 /* calcul valeur expression */ 95 /* cas mutuellement exclusif */ 96 if(op == + ) /* addition */ 97 { 98 expr = nombre_g + nombre_d; 99 } 100 101 if(op == - ) /* soustraction */ 102 { 103 expr = nombre_g - nombre_d; 104 } 105 106 if(op == * ) /* multiplication */ 107 { 4

108 expr = nombre_g * nombre_d; 109 } 110 111 if(op == / ) /* division */ 112 { 113 expr = nombre_g / nombre_d; 114 } 115 116 /* affichage resultat */ 117 if (op ==! ) 118 { 119 printf("%g! = %g\n",nombre_g, expr); 120 } 121 else 122 { 123 printf("%g %c %g = %g\n",nombre_g,op,nombre_d,expr); 124 } 125 } 126 127 if (3 == choix_menu) /* --------------- Deviner un nombre ---------------- 128 { 129 int choix; /* choix de l utilisateur pour le nombre secret */ 130 int trouve = FALSE; /* TRUE si trouvé */ 131 int nombre_secret; 132 133 /* Tirage aléatoire du nombre secret */ 134 nombre_secret = nombre_aleatoire(nb_max); 135 136 /* manche joueur */ 137 while(!trouve) /* pas trouvé nombre secret */ 138 { 139 /* demande nombre à l utilisateur */ 140 printf("votre choix (nombre entre 0 et %d)?\n",nb_max); 141 scanf("%d",&choix); 142 143 if(choix == nombre_secret) /* trouvé */ 144 { 145 trouve = TRUE; 146 } 147 else /* pas trouvé */ 148 { 149 /* donne indice */ 150 if(choix > nombre_secret) 151 { 152 printf("trop grand.\n"); 153 } 154 else 5

155 { 156 printf("trop petit.\n"); 157 } 158 } 159 } 160 /* trouvé nombre secret */ 161 162 printf("vous avez trouvé le nombre secret.\n"); 163 } 164 165 if (4 == choix_menu) /* --------------- Cercle --------------------------- 166 { 167 int ligne; /* numero de ligne */ 168 int colonne; /* numero de colonne */ 169 int rayon; /* rayon du cercle */ 170 171 printf("donner le rayon : "); 172 scanf("%d", &rayon); 173 printf("\n"); 174 175 /* Affichage par balayage */ 176 for (ligne = -rayon; ligne <= rayon; ligne = ligne + 1) 177 { 178 for (colonne = -rayon; colonne <= rayon; colonne = colonne + 1) 179 { 180 printf("%c", cercle(colonne, ligne, rayon)); 181 } 182 printf("\n"); 183 } 184 185 } 186 187 if (4 < choix_menu) /* Non disponible */ 188 { 189 printf("\n** Choix non disponible **\n"); 190 } 191 192 193 if (0 < choix_menu) /* Attendre que l utilisateur soit pret a revenir au me 194 { 195 char c; 196 printf("\n[saisir un caractere pour revenir au menu] "); 197 scanf(" %c", &c); /* un caractère blanc ne sera pas pris en compte */ 198 } 199 200 if (0 == choix_menu) /* quitter */ 201 { 6

202 printf("sayonara\n"); 203 continuer = FALSE; 204 } 205 } 206 207 /* valeur fonction */ 208 return EXIT_SUCCESS; 209 } 210 211 /* implantation de fonctions utilisateurs */ 212 int est_premier(int n) 213 { 214 int i; 215 216 for (i = 2; i < n; i = i + 1) 217 { 218 if (n % i == 0) 219 { 220 return FALSE; 221 } 222 } 223 return TRUE; 224 } 225 226 227 int factorielle(int n) 228 { 229 int i; /* Var. de boucle */ 230 int res = 1; /* resultat */ 231 232 for (i = 1; i <= n; i = i + 1) /* Pour i = 1, 2,..., n */ 233 { 234 res = res * i; /* mettre i dans le produit */ 235 } 236 237 /* Valeur fonction */ 238 return res; 239 } 240 241 char cercle(int x, int y, int rayon) 242 { 243 if (x*x + y*y <= rayon * rayon) 244 { 245 return * ; 246 } 247 return ; 248 } 7

249 250 int nombre_aleatoire(int n) 251 { 252 /* tirage du nombre secret */ 253 return rand() % n; /* entre 0 et n inclus */ 254 } 8