Université du Québec à Chicoutimi LABORATOIRE 1 INTRODUCTION AU LANGAGUE C/C++ Automne 2012 INTRODUCTION AUX ORDINATEURS (6TIN100) Département des Sciences Appliquées Module d’ingénierie Préparé par Hatem Mrad, Ph.D. Bureau P4-6490 Tél. : (418) 545-5011 poste 2499 Courriel : [email protected] Auxiliaires d’enseignement Mathieu Dionne-Tremblay Jean Gauthier Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie 1. Préparation requise Vous devez vous présenter à la séance de laboratoire avec le présent document imprimé pour faciliter la concentration et le travail à l’ordinateur en évitant la permutation constante des fenêtres du laboratoire et du logiciel de programmation. La copie papier vous sert également à marquer votre état d’avancement et prendre des notes au besoin. Si la taille de l’écran le permet, vous pouvez le diviser en deux en mettant en côte-à-côte le document de laboratoire à gauche et le logiciel de programmation en C++ à droite par le redimensionnement des fenêtres respectives. Cette directive s’applique pour toutes les séances de la session. 2. Logiciel utilisé Microsoft Visual C++ version 6, langage C++ : dans les laboratoires de l'UQAC. 3. Objectifs Les objectifs de la présente séance sont de comprendre la portée des variables dans un programme selon l’emplacement de leur déclaration, de bien distinguer les formats de données des variables ainsi que la saisie d’information à l’écran par l’usager. 4. Procédure de création d’un programme avec plusieurs exercices Pour maintenir la structure de fichier cohérente avec le laboratoire et éviter d’entrer en conflit entre les exercices, il faut créer un niveau additionnel de répertoire de base pour chaque exercice. Ainsi, sous LabN, il faut à chaque laboratoire, créer un sous-répertoire ExN comme suit : Étape Instructions 1. Démarrer le logiciel - Aller dans Menu Démarrer de Windows et sélectionner Microsoft Visual C++ 6.0 2. Créer une nouvelle structure - Aller dans Menu Fichier de Visual Studio > Nouveau > Projet d’application - Dans l’arborescence Type de projet, sélectionner Visual C++ > Win32 et dans la section Modèle d’application, sélectionner Application console Win32. - Entrer dans le champ « nom », un nom de projet correspondant au numéro d’exercice: « Ex1 » - Sélectionner un emplacement désiré pour créer l’application dans le champ « Location ». Créez-vous un répertoire de base afin de correspondre au laboratoire courant, par exemple, sur le disque/répertoire C:\Labs6TIN100\Lab1. - Ne rien entrer dans le champ Nom de solution, et assurez vous que la case Créer le répertoire pour la solution n’est pas cochée, ensuite cliquer « OK ». - À la fenêtre suivante, cliquer sur Suivant. Ensuite à la section Options supplémentaires, cocher la case Projet vide et cliquer sur Terminer pour entamer le processus de mise en place de la structure d’application. Sélectionner une application vierge dans notre cas et « Terminer ». 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 2 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie - L’arborescence répertoire et les fichiers de base constituant la structure d’application sont alors créés. C’est cette structure de répertoire à partir de LabN qu’il faudra compresser en un fichier à remettre. L’arborescence des exercices du laboratoire sera donc sous la forme LabN\ExN 3. Créer le d’application fichier source - Dans l’arborescence créée avec l’explorateur de solution, accéder au menu contextuel en cliquant avec la touche droite de la sourie du répertoire ExN > Fichiers sources et sélectionner Ajouter > Nouvel élément. - Dans l’arborescence Catégories de la nouvelle fenêtre, sélectionner Visual C++ et le modèle Fichier C++ (.cpp). Entrer le nom de fichier correspondant à l’exercice « UtilisationVariables » et Ok. Un fichier vierge est alors créé. 4. Composer le programme - Entrer votre programme à faire dans la fenêtre de programmation, tel que spécifié à l’exercice 1. Attention à la syntaxe. 5. Compiler l’application pour la - Compiler le programme par le menu Générer > Générer la rendre exécutable solution, ou utiliser l’icône ou la touche rapide correspondante. Portez attention au bavard pendant la compilation, il ne doit pas y avoir d’erreur ni d’avertissement. 6. Exécuter le programme - Exécuter le programme par le menu Déboguer > Exécuter sans débogage. - Avis : Vous pouvez personnaliser les menus pour obtenir les icônes de compilation et d’exécution pour les utiliser directement. Il suffit de cliquer sur le menu contextuel dans la zone vide des icônes et activer les menus Déboguer et Générer. On peut ajouter les icônes manquantes par Personnaliser tel que celui correspondant à « Exécuter sans débogage ». - Fermer la fenêtre à la fin en appuyant une touche tel qu’indiqué par le système. 7. Fermeture - Pour fermer l’application et en recréer une nouvelle, passer par le menu Fichier > Fermer la solution puis reprendre du début. - Fermer le logiciel pour terminer par l’icône supérieure droite de la fenêtre logicielle ou par le menu Fichier > Quitter. Exercice 1 : Utilisation de variables dans des calculs et l’affichage Faire l’essai du programme suivant pour vous familiariser avec l’utilisation des variables. On retrouve dans l’ordre, la déclaration des variables, une assignation de valeurs à celles-ci, un affichage à l’écran de leur contenu pour consultation, des calculs et un affichage des résultats. Il est important d’observer le changement de valeur des variables utilisées plusieurs fois au fil de l’exécution du programme pour mettre en évidence, la relation entre les valeurs d’une variable en fonction de la séquence d’exécution du programme, ce dont il faut toujours tenir compte lorsqu’on conçoit un 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 3 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie programme. À la sortie du programme, la variable prend toujours la dernière valeur assignée peut importe ce qui s’est passé précédemment. Suivre la procédure de création d’un programme tel que vu précédemment. Entrer comme nom du fichier source UtilisationVariables avec comme sous-répertoire Ex1. VOIR EN ANNEXE 1 la liste des caractères de contrôle du curseur pour la mise en page à l’écran. Code source // // // // Lab1, Exercice 1 - Utilisation des variables Programme conçu par: Pierre Charbonneau ing. Application: Laboratoires 6TIN100 Titre: UtilisationVariables.cpp // 1- Résumé des fonctionnalités de l’application /* Programme de familiarisation sur l'utilisation des variables selon leur type */ // 2- Instructions au préprocesseur // 2.1- Inclusion des bibliothèques d'entêtes .h #include <iostream> // Fonctions d’entrées sorties // 2.2- Inclusion des bibliothèques directives spéciales using namespace std ; // 3- Programme principal void main() { // 3.1- Déclaration des variables // NOTEZ: Il est de bonne pratique d'apposer le type de la variable en suffixe comme suit. Cela facilite grandement // la mise au point du programme. On utilise généralement la première lettre du type. char aC, bC, cC; int aI, bI, cI; float aF, bF, cF; double aD, bD, cD; char msgC[] = "Inscrire un message de votre choix."; // aC bC cC aI bI cI aF bF cF aD bD cD 3.2- Initialisation des variables = 104; = 185; = 0; = 19540; = 24600; = 0; = 35.230; // NOTEZ BIEN L'AFFICHAGE, LE ZÉRO N'EST PAS AFFICHÉ PAR DÉFAUT = 375.45; = 0.0; = 2343; = -234.3; = 0; // 3.2.1- Affichage des valeurs des variables de type CHAR, noter l'état des valeurs au moment de leur affichage // NOTEZ QUE POUR LE MOMENT LES LETTRES AVEC ACCENT NE SONT PAS UTILISÉES cout << "\nVALEUR DES VARIABLES APRES INITIALISATION:\n\n"; cout << "La valeur de aC est : " << aC << "\n"; 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 4 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie cout cout cout cout cout cout cout cout cout cout cout << << << << << << << << << << << "La "La "La "La "La "La "La "La "La "La "La valeur valeur valeur valeur valeur valeur valeur valeur valeur valeur valeur de de de de de de de de de de de bC cC aI bI cI aF bF cF aD bD cD est est est est est est est est est est est : : : : : : : : : : : " " " " " " " " " " " << << << << << << << << << << << bC cC aI bI cI aF bF cF aD bD cD << << << << << << << << << << << "\n"; "\n"; "\n"; "\n"; "\n"; "\n"; "\n"; "\n"; "\n"; "\n"; "\n"; // QUESTIONS À RÉPONDRE: // Q1: SELON VOUS, POURQUOI ON NE VOIT PAS CORRECTEMENT TOUTES LES VALEUR ? // Q2: QUE DOIT-ON FAIRE POUR OBTENIR LE BON AFFICHAGE ? // Q3: POURQUOI bC EST NÉGATIVE ALORS QU'ELLE EST INITIALISÉE AVEC UNE VALEUR POSITIVE ? // Q4: QUE FAIRE POUR ÉLIMINER LES AVERTISSEMENTS DE TRONCATURE DU COMPILATEUR ? /* Déplacer ce commentaire de paragraphe selon la progression de l'exercice. // 3.3- Calculs et affichage des résultats // NOTEZ QUE les valeurs des variables précédemment affichées changent au moment où celles-ci sont modifiées // Valider les résultats à la calculatrice cout << "\nValeur des variables après modification selon les calculs suivants:\n"; // Il n'est pas nécessaire d'effectuer une conversion lorsque les variables sont toutes du même type. // 3.3.1- Type CHAR cC = aC + bC; cout << "Type CHAR\n---------\n"; cout << "cC = aC + bC;\n"; cout << "cC = " << aC << " + " << bC << " = " << cC << "\n"; // APPLIQUEZ LA CONVERSION APPROPRIÉE // Q5: Est-ce que le résultat est bon ? Qu'est-qui ne va pas avec cette valeur ? // // // Réexécuter l'expression en 3.3.1 avec les changements suivants: 1) Déclarer les variables CHAR en non-signé 2) Répondre à nouveau à la question 5. // NOTEZ QU'UNE PROGRAMMATION SOIGNÉE PERMET D'OBTENIR DES RÉSULTATS SOIGNÉS. AINSI POUR UN AFFICHAGE CONVIVIAL, IL NE FAUT // PAS HÉSITER D'ÉTOFFER LA PROGRAMMATION POUR Y PARVENIR. // 3.3.2- Refaire la section 3.3.1 avec les autres opérateurs changeant l'opérateur et l'expression. Observer les // résultats en questions pour chaque type, ne pas répondre à nouveau à la question 5, vous constaterez les mêmes effets // de débordement de plage. // Q6: POURQUOI DANS CERTAINS CAS, LES VALEURS NE CORRESPONDENT PAS, PARFOIS DE TRÈS PEU COMME DANS LE CAS DE // LA DIVISION, PARFOIS DE BEAUCOUP COMME DANS LE CAS DE LA MULTIPLICATION ? // 3.4- Utilisation de plusieurs types dans une même expression // Lorsque plus d'un type de variable est impliqué, il faut faire une conversion de façon appropriée. 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 5 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie // 3.4.1- EXPRESSION AVEC RÉSULTAT DE TYPE CHAR UTILISANT D'AUTRES TYPES DE VARIABLES cC = aI + bI*aC; cout << "\nCombinaison de types :\n"; cout << "Type CHAR\n---------\n"; cout << "cC = aI + bI * aC;\n"; cout << "cC = " << aI << " + " << bI << " * " << aC << " = " << cC << "\n"; // Q7: Pourquoi rien ne va plus avec cette expression ? Réassigner les valeurs suivantes aux variables avant leur utilisation // aI = 24, bI = 16, aC = 2 et expliquer le nouveau résultat. Appliquez la conversion appropriée. // 3.4.2- EXPRESSION AVEC RÉSULTAT DE TYPE INT UTILISANT D'AUTRES TYPES DE VARIABLES cI = aC + bF*bC; cout << "\nType INT\n---------\n"; cout << "cI = aC + bF * bC;\n"; cout << "cI = " << aC << " + " << bF << " * " << bC << " = " << cI << "\n"; // Q8: Expliquer ce qui se passe en détail dans le calcul de l'expression en 3.4.2 et // appliquer la conversion appropriée // Une façon de voir ce qui se passe dans une expression est de faire plusieurs essais d'affichage selon son // ordre de priorité d'exécution comme suit: // cout << "cI = " << int(aC) << " + " << bF << " * " << int(bC) << " = " << bf * bC << "\n"; // poursuivre jusqu'à l'expression complète de la partie droite de l'égalité. // 3.4.3- EXPRESSION AVEC RÉSULTAT DE TYPE FLOAT UTILISANT D'AUTRES TYPES DE VARIABLES cF = aC/9 + aF; cout << "\nType FLOAT\n---------\n"; cout << "cF = aC/9 + aF;\n"; cout << "cF = " << aC << " / " << 9 << " + " << aF << " = " << cF << "\n"; // Q9: Expliquer ce qui se passe en détail dans le calcul de l'expression en 3.4.3 et // appliquer la conversion appropriée // 3.4.4- EXPRESSION AVEC RÉSULTAT DE TYPE DOUBLE UTILISANT D'AUTRES TYPES DE VARIABLES cD = aF/bC + bF*aC/2; cout << "\nType DOUBLE\n---------\n"; cout << "cD = aF/bC + bF*aC/2;\n"; cout << "cD = " << aF << " / " << int(bC) << " + " << bF << " * " << int(aC) << " / 2" << " = " << cD << "\n"; */ cout << "\n" << msgC << "\n"; // 4- Fin du programme // Aucune information n'est retournée à la fin ce programme } 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 6 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie Copie d’écran des résultats attendus du code source initial 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 7 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie Exercice 2 : Entrées de données L’entrée de données dans un programme doit nécessairement utiliser une ou plusieurs variables pour la manutention des valeurs obtenue de l’usager. Elle permet un dialogue et une interaction nécessaire dans les outils informatiques. Elle évite d’avoir à programmer chaque changement de valeur au programme, qui nécessiterait une compilation et une réexécution pour chaque cas. L’entrée de données rend le programme énormément plus fonctionnel et efficient. Notez bien ici : Il faut toujours accompagner à la déclaration des variables, une description pour documenter le programme et faciliter sa compréhension. Il faut considérer qu’un programme puisse être modifié plusieurs années après sa conception par des personnes différentes et étrangères au concepteur, peu importe sa taille, sa complexité ou son importance. Le programme suivant permet donc de se familiariser avec ce principe. Copiez ce programme en reprenant les mêmes étapes de création de programme que pour le premier exercice, mais sous le 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 8 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie répertoire Ex2. Utiliser le nom de fichier source « EntreeDonnees » tel qu’indiqué en commentaire du programme suivant : Code source // // // // Lab2, Exercice 2 - Entrée de données Programme conçu par: Pierre Charbonneau Application: Laboratoires 6TIN100 Titre: EntreeDonnees.cpp // 1- Résumé des fonctionnalités de l’application /* Programme de familiarisation avec l’entrée de données */ // 2- Instructions au préprocesseur // 2.1- Inclusion des bibliothèques d'entêtes .h #include <iostream> // Fonctions d’entrées-sortie // 2.2- Inclusion des bibliothèques directives spéciales using namespace std ; // 3- Programme principal void main() { // 3.1- Déclaration float lngF, lrgF, htrF; double volD; des variables // Longueur en mètre // Largeur en mètre // Hauteur en mètre // Résultat d'un calcul effectué en mètre cube // 3.2- Initialisation des variables // Il n'est pas nécessaire d'initialiser ici les variables, cette opération étant faite par l'usager. // L'important est de ne pas lire une variable avant de l'avoir initialisé. // 3.3- Entrée des données de l'usager cout << "\n\nProgramme de calcul du volume d'une forme rectangulaire\n\n"; cout << "Entrer la longueur en metre ? "; cin >> lngF; // L'instruction cin permet l'entrée de données par l'usager ou par un fichier de données. cout << "\nEntrer la largeur en metre ? "; cin >> lrgF; cout << "\nEntrer la hauteur en metre ? "; cin >> htrF; // 3.4- Calcul volD = lngF*lrgF*htrF; // Volume de la forme // 3.5- Affichage des résultats cout << "\n\nLe volume de la forme est : " << volD << " m3.\n\n"; // 4- Fin du programme // Aucune information n'est retournée à la fin ce programme } 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 9 de 10 Université du Québec à Chicoutimi Département des Sciences Appliquées Module d’ingénierie ANNEXE 1 C++ Reserved or Nongraphic Characters Character ASCII Representation ASCII Value Escape Sequence Newline NL (LF) 10 or 0x0a \n Horizontal tab HT 9 \t Vertical tab VT 11 or 0x0b \v Backspace BS 8 \b Carriage return CR 13 or 0x0d \r Formfeed FF 12 or 0x0c \f Alert BEL 7 \a Backslash \ 92 or 0x5c \\ Question mark ? 63 or 0x3f \? Single quotation mark ' 39 or 0x27 \' Double quotation mark " 34 or 0x22 \" Octal number ooo — \ooo Hexadecimal number hhh — \xhhh Null character NUL 0 \0 If the character following the backslash does not specify a legal escape sequence, the result is implementation defined. In Microsoft C++, the character following the backslash is taken literally, as though the escape were not present, and a level 1 warning ("unrecognized character escape sequence") is issued. Octal escape sequences, specified in the form \ooo, consist of a backslash and one, two, or three octal characters. Hexadecimal escape sequences, specified in the form \xhhh, consist of the characters \x followed by a sequence of hexadecimal digits. Unlike octal escape constants, there is no limit on the number of hexadecimal digits in an escape sequence. Octal escape sequences are terminated by the first character that is not an octal digit, or when three characters are seen. SOURCE: MSDN Centre Visual C++ (http://msdn.microsoft.com/fr-fr/library/6aw8xdf2.aspx) 6TIN100 Introduction aux ordinateurs Laboratoire 1 Introduction au langage C++ Automne 2011 Page 10 de 10