UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 1/56

UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 1/56 Plan des TP Les TP durent 3 heures et se font sur machine. Un compte rendu de TP sera relevé en fin de séance. Ce compte rendu se fera sous OpenOffice (copie des sources des programmes et des copies d'écran d'exécution). A la fin des 7 séances de TP,vous aurez un partiel de TP d'une durée de 3 heures ou vous programmerez seul. Vous aurez donc 2 notes de TP:  une note de séance qui sera la moyenne des notes des 7 séances (coeff 1/3)  une note de partiel (coeff 2/3). Pour chaque TP (excepté le premier TP), la préparation est obligatoire. Un compte rendu de TP devra être remis à l'enseignant en debut de séance. Plan des TP 1 TP1 Premiers programmes 2 TP2 Résolution d'équation du second degré 18 TP3 Algorithmique 1 25 TP4 Algorithmique 2 29 TP5 Tableaux et chaînes de caractères 33 TP6 Les fonctions 37 TP7 Chaîne de compilation, fonctions et pointeurs 43 UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 2/56 TP1 Premiers programmes Thèmes  Programmation sous Visual C++ , notion de projet, d'exécutable  Utilisation du débuggeur.  Opérations arithmétiques et logiques.  Règles de programmation.  Premiers programmes, utilisation de puts, printf, putchar, boucle for.  Utilisation de l'aide, exécution d'un programme d'exemple.  Introduction à la boucle for. Préparation Lire les documents ressources en fin de TP. Règles de programmation : Tous les programmes que vous allez écrire vont être sauvés dans un fichier ayant comme nom TPi_exoj.c avec i le numéro du TP et j le numéro de l'exercice. Tous les fichiers du tp1 seront sauvés dans le répertoire i1/tp1 sous votre compte (i1/tp2 pour le tp2 etc…). Chaque programme devra avoir un en-tête dans lequel devra figurer le nom du fichier, l'auteur, la description du programme et la date de création ( et peut-être de modification). //************************************************************************ // // File........: nom_du_fichier.c // // Author(s)...: NOM_AUTEUR // // Description.: but du programme (à détailler) // // CREATION : 05/09/2006 MODIFICATION : // //************************************************************************* #include <stdio.h> #include <stdlib.h> int main(void) { // le programme system("PAUSE"); return 0; } Travail à faire : Prise en main de Visual C++ en mode console  Créer le répertoire i1 sous votre compte.  Lancer Visual Studio. UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 3/56  Créer un nouveau projet tp1 (Fichier, Nouveau, Projet).  Décocher "Créer le répertoire pour la solution" Le fait de créer un nouveau projet va créer automatiquement le répertoire tp1.  Dans la fenêtre suivante, dans paramètres de l'application choisir Application console et projet vide. UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 4/56 A partir de là, VC++ a créé un répertoire tp1 et placé les fichiers permettant la gestion du projet. Pour créer un exécutable, il faut placer dans le projet un fichier source (xxx.c) avec l'extension ".c" contenant le code de l'application.  Pour cela , clic droit sur fichier source, Ajouter, Nouvel élément,  Dans la fenêtre suivante, le fichier à ajouter se nomme tp1_exo1.c où se trouvera le code du premier exercice. Cliquer sur Ajouter. On obtient alors un fichier vide.  Recopier le fichier modèle vu précédemment et modifier l'en-tête. UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 5/56 programme à placer UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 6/56  Placer à la place du commentaire les lignes suivantes : int n1=5; int nRes=6; printf(" j'ai une valeur a afficher :%d\n",n1); printf(" j'ai deux valeurs a afficher :%d et %d \n",n1,nRes); puts ("operations aritmetiques"); nRes=n1*3; printf("%d*2=%d\n",n1,nRes); nRes=n1/2; printf("%d/2=%d\n",n1,nRes); nRes=n1%2; printf("%d%2=%d\n",n1,nRes); nRes=n1-2; printf("%d-2=%d\n",n1,nRes); puts ("operations logiques"); nRes=n1&0x07; printf("%d&2=%d\n",n1,nRes); nRes=n1|0x07; printf("%d|2=%d\n",n1,nRes); nRes=n1^0x07; printf("%d^2=%d\n",n1,nRes); puts ("fin du programme");  Lancer le programme. Clic sur la flèche verte Une fenêtre s'affiche , cocher la case "Ne plus afficher cette boite de dialogue"., puis clic sur oui. ------ Début de la génération : Projet : tp1, Configuration : Release Win32 ------ Compilation en cours... tp1_exo1.c Édition des liens en cours... Génération de code en cours Fin de la génération du code Incorporation du manifeste en cours... Le journal de génération a été enregistré à l'emplacement "file://g:\iut_courant\i1\programmes_2007_2008\tp1\Release\BuildLog.htm" tp1 - 0 erreur(s), 0 avertissement(s) ========== Génération : 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été ignoré ========== 1) Analyser chaque ligne affichée et expliquer le résultat obtenu (Compléter le tableau ci-dessous). OPERATION RESULTAT UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 7/56 nRes=n1*3 nRes=n1/2; nRes=n1%2; nRes=n1-2; nRes=n1&0x07; nRes=n1|0x07; nRes=n1^0x07; Trouver les erreurs de compilation Nous allons ici voir comment le compilateur peut aider à trouver les erreurs faites lors de la saisie du code. Pour cela nous allons faire un certain nombre d'erreurs classiques :  Première erreur : oubli du point virgule.  Deuxième erreur : non déclaration d'une variable.  Troisième erreur : problème de l'apostrophe dans le "printf".  Quatrième erreur : appel à une fonction inconnue .  Cinquième erreur : oubli de la fonction "system". Première erreur : l'oubli du point virgule.  Enlever le point virgule à la fin de l'instruction : nRes=n1*3  Puis lancer le programme Le programme affiche le même résultat qu'auparavant !!! Cela est tout simplement du au fait que lorsque vous lancez le programme, VC++ fait 2 opérations :  appel au compilateur qui génère le fichier exécutable,  puis lancement de l'exécutable (avec le chargement des dll permettant l'exécution du programme). Dans les 2 cas , l'affichage des informations issues de ces 2 étapes se fait dans la fenêtre "sortie" ( ALT+2 ou dans le menu ,Affichage, Sortie). Vous ne voyez donc que les informations issues du lancement de l'exécutable , les informations issues du compilateur sont masquées. Si le compilateur rencontre une erreur dans le fichier tp1_exo1.c, il est incapable de générer le fichier exécutable et c'est l'ancien exécutable qui est lancé. Vous avez donc l'impression que votre programme fonctionne alors que c'est l'ancien exécutable qui est lancé! Pour vérifier que la compilation s'est bien passée, il faut visualiser les messages issus du compilateur: Pour cela dans la fenêtre "sortie" choisir "Afficher la sortie à partir de Générer" pour avoir les messages issus de la compilation. Vous auriez pu plus simplement faire un F7 (Générer la solution) qui permet de lancer le compilateur sans lancer l'exécution à la suite. Par la suite il sera préférable de choisir cette solution qui a l'avantage de ne pas masquer les messages d'erreurs issus du compilateur. Vous obtenez la ligne suivante : .\tp1_exo1.c(25) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'printf' Ainsi qu'un marqueur vert sur la ligne ayant un problème : UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 8/56 Deuxième erreur : non déclaration d'une variable. Toutes les variables doivent être déclarées avant d'être utilisées. Quel message donne le compilateur fasse à ce type d'erreur ?  Remplacer la ligne int n1=5; par n1=5;  Générer la solution (F7) : Vous obtenez la ligne suivante : .\tp1_exo1.c(18) : error C2065: 'n1' : identificateur non déclaré D'autres erreurs à la suite de cette erreur sont vues par le compilateur. Ces erreurs sont dues à la première erreur et ne doivent donc pas être corrigées. Il faut toujours traiter les erreurs de compilation dans l'ordre et ne pas hésiter après avoir traité la première erreur à refaire une génération de code. Il est possible qu'un certain nombre d'erreurs disparaissent alors !!! troisième erreur : problème de l'apostrophe dans le printf  Remplacer printf("%d-2=%d\n",n1,nRes); par printf("%d-2=%d\n,n1",nRes);  Générer la solution Vous obtenez la ligne suivante : .\tp1_exo1.c(31) : warning C4313: 'printf' : conflit entre '%d' dans la chaîne de format et l'argument 2 de type 'char [12]' Il faut lire attentivement le message issu du compilateur. Ce message n'est pas un message d'erreur mais un Warning (avertissement). Un avertissement permet de donner une information au programmeur mais sans bloquer la génération du code. Le compilateur génère l'exécutable. Par contre l'affichage du résultat est incohérent. 2) Lancer le programme et donner le résultat affiché par cette ligne de code. Conclure sur l'importance des Warnings. Quatrième erreur : appel à une fonction inconnue.  Remplacer system("PAUSE"); par systeme("PAUSE"); l'erreur se situe ici ! UNSA/IUT de Nice - département GEII I1 - TP 1ère Année 08/08/2007 JLS page 9/56  Générer la solution : Vous obtenez les lignes suivantes : .\tp1_exo1.c(42) : warning C4013: 'systeme' non défini(e) ; extern retournant int pris par défaut Compilation en cours... tp1_exo1.c .\tp1_exo1.c(42) : warning C4013: 'systeme' non défini(e) ; extern retournant int pris par défaut Édition des liens en cours... tp1_exo1.obj : error LNK2001: symbole externe non résolu _systeme Le compilateur génère un warning à la ligne 42.Dans cet avertissement le compilateur informe que la fonction uploads/S4/ tp-informatique.pdf

  • 30
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Apv 14, 2021
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 0.9949MB