Travaux Dirigés Initiation à la programmation en C



Documents pareils
Le langage C. Séance n 4

Algorithmique et Programmation, IMA

Les chaînes de caractères

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

Chap III : Les tableaux

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

Solutions du chapitre 4

Conventions d écriture et outils de mise au point

Les structures. Chapitre 3

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)

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

Programmation système I Les entrées/sorties

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


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

ALGORITHMIQUE ET PROGRAMMATION En C

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

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

TP 1. Prise en main du langage Python

Introduction au langage C

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

L informatique en BCPST

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

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

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

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Chapitre 1 : La gestion dynamique de la mémoire

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Présentation du langage et premières fonctions

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

Rappels Entrées -Sorties

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

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

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

Initiation à la programmation en Python

I. Introduction aux fonctions : les fonctions standards

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

Chapitre 2 Devine mon nombre!

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

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

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

Poker. A rendre pour le 25 avril

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

Structure d un programme

UE Programmation Impérative Licence 2ème Année

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

Cours Informatique Master STEP

Représentation d un entier en base b

TP, première séquence d exercices.

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

Programmer en JAVA. par Tama

STAGE IREM 0- Premiers pas en Python

Cours d Informatique

Algorithmique et programmation : les bases (VBA) Corrigé

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

Notions fondamentales du langage C# Version 1.0

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

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

Outils pour la pratique

INITIATION A LA PROGRAMMATION

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Langage Éric Guérin 5 octobre 2010

Algorithme. Table des matières

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

Compression de Données - Algorithme de Huffman Document de Conception

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

Programmation en langage C

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

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

IV- Comment fonctionne un ordinateur?

V- Manipulations de nombres en binaire

Créer le schéma relationnel d une base de données ACCESS

Initiation à Excel. Frédéric Gava (MCF)

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

SUPPORT DE COURS. Langage C

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

Java Licence Professionnelle CISII,

Programmation impérative

Introduction à MATLAB R

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

Créer une page Google+ Pro internet.com

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Logiciel de base. Première année ENSIMAG

Feuille TD n 1 Exercices d algorithmique éléments de correction

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

VOS PREMIERS PAS AVEC TRACENPOCHE

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Programmation Objet - Cours II

Le prototype de la fonction main()

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

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Access 2007 FF Access FR FR Base

INF 321 : mémento de la syntaxe de Java

Rappels d architecture

Transcription:

Travaux Dirigés Initiation à la programmation en C Sylvain MONTAGNY sylvain.montagny@univ-savoie.fr Bâtiment chablais, bureau 13 04 79 75 86 86 TD1 : Compilation et bases de la programmation TD2 : Les expressions conditionnelles TD3 : Les boucles TD4 : Les fonctions TD5 : Tableaux et pointeurs TD6 : Les chaines de caractères TD7 : Les structures TD8 : Gestion dynamique de la mémoire TD9 : Utilisation du débuggeur gdb Retrouver tous les documents de Cours/TD/TP sur le site www.master-electronique.com

Initiation au langage C TD 1 Compilation et base de la programmation Exercice 1 : Fichier : compilation.c Compilation Récupérer le fichier source «compilation.c» et éditer le programme avec l éditeur de texte de votre choix. Exécuter ensuite la commande de compilation : gcc -Wall -o compilation compilation.c L option Wall permet de faire afficher l ensemble des «warning» de la compilation «compilation.c» est le fichier source en langage C «compilation» est le nom qu on donne au fichier exécutable créé après compilation. Visualiser les erreurs du programme et les corriger. Exécuter correctement le programme. Exercice 2 : Affichage de valeur Qu affiche le programme suivant à l'aide de la fonction printf() printf("x=%d y=%d %s%d %s%x\n",12,10,"x*y=",120,"12=",12); Rappel des principaux codes de la fonction printf() : %s : affichage de chaîne de caractères %d : nombre décimal %X : nombre hexadécimal %c : affichage d un caractère à partir de sa valeur ASCII %f : affichage d un flottant \n : caractère de retour à la ligne Vous évaluerez la ligne de code puis vérifierez votre résultat en codant le programme. Exercice 3 : Conversion Ecrire un programme qui répondra en une seule fois aux questions suivantes : Afficher en décimal la variable dont la valeur hexadécimal est a=0x89? Afficher en hexadécimal la variable dont la valeur décimal est c=137?

Exercice 4 : Affectation des variables Fichier : affectation.c Quelles sont les valeurs contenues dans les trois variables nombre1, nombre2 et calcul à l issue du programme présent dans le fichier source affectation.c? Vous trouverez le résultat en lisant le programme, puis validerez en exécutant le code que vous aurez modifié. Exercice 5 : Périmètre d un cercle Ecrire un programme qui calcule et affiche le périmètre d un cercle d un rayon de 14.3 cm. On utilisera une valeur approchée de π : 3,14159. Exercice 6 : Cube et carré des nombres Fichier : carre.c Le programme proposé affiche et calcul le cube des nombres de 1 à 5. Proposer une modification de ce programme afin de calculer le carré des nombres pairs de 2 à 10. Exercice 7 : Correspondance des caractères ASCII Ecrire un programme qui affiche le texte "Bonjour" et le code ASCII de chaque caractère, avec un caractère et un code par ligne, à l aide d une variable de type caractère (char) et à l aide des chaînes de formatage %c et %d. En sortie on doit obtenir à l écran : B correspond au caractère ASCII 66 o correspond au caractère ASCII 111 n correspond au caractère ASCII 110 j correspond au caractère ASCII 106 o correspond au caractère ASCII 111 u correspond au caractère ASCII 117 r correspond au caractère ASCII 114 Exercice 8 : Fichier affectation2.c Explication d affectation Dans le programme affectation2.c, donner et expliquer la valeur de x et y? Exercice 9 : Opérateurs logiques Estimer les résultats des expressions suivantes, puis vérifier à l aide d un programme simple : 0xEC << 2 0xEC >> 3 0xEC & 0x18 0xEC 0x18 0xEC ^ 0x18

TD 2 Les expressions conditionnelles Rappel : Afin d utiliser une saisie au clavier, nous utiliserons la fonction scanf() Exemple de saisie d un nombre entier 1. int main(void) 2. { 3. int saisie ; 4. scanf( %d,&saisie) ; //la variable saisie est affecté de la valeur saisie au clavier 5. printf( %d,saisie) ; // affiche la valeur saisie 6. } Exercice 1 : Test de supériorité Créer un programme qui réalise pour chaque test possible entre 2 entiers saisie au clavier (=, >, <) le résultat de la comparaison de ces entiers. Exemple : Si a=1 et b=2, le programme affiche : "1 est inférieur à 2" etc Exercice 2 : Mention d une note Ecrire un programme affichant la mention en fonction d une note. Ce programme doit afficher les mentions selon les conditions suivantes, c est-à-dire en fonction de la valeur contenue dans la variable note (type float) : Si la note est inférieure strictement à 10, afficher «Revenez en septembre pour les rattrapages» Si la note est entre 10 et 15, afficher «Bien» Si la note est entre 15 et 20, afficher «Très Bien» Exercice 3 : Calcul d une expression Ecrire un programme avec les instructions suivantes :

Saisie au clavier d un nombre entier A. Affecte à la variable entière B le résultat des expressions dans les cas suivants : o Si la valeur de A est divisible par 3 (utiliser l opérateur modulo %), calculer l expression (A / 3 + 2) o Sinon calculer l expression (A % 3 + 1) Exercice 4 : Les chiffres en toutes lettres En utilisant l expression conditionnelle «switch-case», créer un programme qui affiche les entiers de 0 à 10 en toute lettre. Les nombres seront saisis au clavier. Ex : 0 affiche "zero", 1 affiche "un",... Si l'entier entré n'est pas compris entre 0 et 10, afficher un message d'erreur. Exercice 5 : Géométrie Ecrire un programme testant si le point de l espace (x, y, z) dont les coordonnées sont (ex : x=10, y=20, z=30) est à l intérieur d un parallélépipède rectangle (rectangle en 3 dimensions) de dimensions 15 x 30 x 5 (x, y, z). Si la condition est remplie, la programme affiche «Le point saisie est l intérieur» sinon il doit afficher «Le point saisi est à l extérieur». Exercice 6 : Tests multiples Ecrire un programme, à l aide des variables entières a, b et c et qui réalise les instructions suivantes : Affecte les valeurs entières respectivement aux variables a, b, et c, Affiche «ok» si la condition suivante est vraie : «(a + b) est supérieur strictement à (c % 5) et que (a b) est différent de (c b) ou que (a + 3) est égal (c 86)» Exercice 7 : Transformation en heures : minutes : secondes Transformez une durée exprimée en secondes (saisie au clavier), en heures, minutes et secondes.

TD 3 Les boucles Exercice 1 : Affichage des entiers Ecrire un programme qui calcule et affiche la somme des entiers de 1 à x (entier saisie au clavier). Exercice 2 : Vérification de saisie Ecrire un programme qui demande à un utilisateur d'entrer un code ASCII de lettre minuscule compris entre 97 et 122 inclus. Si le nombre entré n'est pas compris dans la plage, demander à l utilisateur une nouvelle saisie jusqu'à ce que le nombre entré soit valide. Si l entrée est valide, on affichera le caractère saisie. Exercice 3 : Produit et moyenne à l aide de boucle Ecrivez un programme qui lit N nombres entiers au clavier et qui affiche leur somme, leur produit et leur moyenne. Le nombre N est à saisir au clavier en début de programme. Résoudre ce problème en utilisant une boucle «while». Résoudre ce problème en utilisant une boucle «do-while». Résoudre ce problème en utilisant une boucle «for». Exercice 4 : Jeu «plus ou moins» Réaliser un jeu de «plus ou moins» qui consiste à deviner un nombre tiré aléatoirement. Un premier joueur saisie un nombre aléatoirement. Le second joueur propose un nombre et le jeu lui répond si celui-ci est au dessus ou en dessous du nombre à trouver. Si le joueur découvre le nombre exact en dix coups (ou moins), il a gagné, sinon il a perdu. Résoudre le jeu pour des nombres compris entre -50 et +50

TD 4 Les fonctions Exercice 1 : Fonction carré Écrivez un programme fonction_carre.c contenant une fonction carre qui prend un entier n et retourne le carré de n. Exercice 2 : Coordonnées polaires Écrivez un programme fonction_polaire.c contenant une fonction polaire qui prend des coordonnées x et y flottantes et qui calcul et affiche les coordonnées polaires (module / argument) correspondantes. Exercice 3 : Factorielle d un nombre Écrivez un programme factorielle.c contenant une fonction factorielle qui prend un entier naturel n et calcule la factorielle. Vous utiliserez deux façons pour coder votre fonction : Un méthode à l aide de boucle classique (while, for ) Une méthode de manière récursive (c'est-à-dire que votre fonction factorielle( ) s appelle elle même.

TD 5 Les tableaux et pointeurs Exercice 1 : Les bases des pointeurs. Écrire un programme simple en suivant les consignes suivantes : Déclarez un pointeur sur un entier P Déclarez deux entiers A et B, donner leurs une valeur Faire pointer P sur l'adresse de A Afficher la valeur de A en passant par P Afficher l'adresse de B Exercice 2 : Fichier : pointeur.c Manipulation de pointeurs Le programme source pointeur.c manipule des pointeurs. Représenter les pointeurs en mémoire et indiquer ce que vaut la variable d à l issue du programme. Vérifier en faisant afficher sa valeur. Exercice 3 : Fichier : erreur.c Erreur de programmation Expliquer en quoi les fonctions suivantes sont de graves erreurs de programmation. Les corrigés en expliquant ce que vous souhaitez faire lorsque cela est possible. Expliquer les cas où il n y a pas d erreur de compilation mais des erreurs à l exécution. Exercice 4 : Transposée de matrice Ecrire un programme qui calcule et affiche la transposée d une matrice carrée (An,n) 10x10. On remplira cette matrice telle que Ai,j = 2i+j pour i et j compris entre 0 et 9 compris. Réalisez une fonction initialisation() qui affecte les bonnes valeurs à la matrice initiale. La matrice doit être passée en paramètre de la fonction initialisation. Réalisez une fonction affichage() qui affiche la matrice avant la transposition et après la transposition. Vous devez trouverez les prototypes de chaque fonction afin de répondre au problème.

TD 6 Les chaines de caractère Exercice 1 : Comptage de chiffres dans une chaine de caractères Ecrire la fonction compter() qui compte le nombre de chiffres contenus dans une chaîne de caractères passée en paramètre. Vous définirez d abord le prototype de la fonction. La chaine de caractère sera codée en dur dans le programme. Exercice 2 : Concaténation de deux chaines de caractères (1) Ecrire la fonction concat() qui concatène deux chaînes de caractères avec le prototype suivant. La deuxième chaine de caractere est rajouté a la première. void concat(char * ch1, char * ch2); Exercice 3 : Concaténation de deux chaines de caractères (2) Ecrire une fonction de concaténation en utilisant des opérateurs arithmétiques sur les pointeurs, ainsi que le prototype de la fonction suivante : void concat(char * ch1, char * ch2) Exercice 4 : Recherche de palindrome Un palindrome est un mot qui peut se lire dans les deux sens (ex : radar, laval ). Ecrivez une fonction palindrome qui valide le fait que la chaine de caractère passé en paramètre est un palindrome.

TD 7 Les structures Exercice 1 : Exercice 1 : Carte grise (1) Ecrire une structure décrivant une carte grise avec les éléments suivants : nom et prénom du propriétaire, numéro d immatriculation, puissance fiscale, date de mise en service. Afficher à l écran l ensemble des données de la carte grise que vous avez saisie au clavier. Le champ date pourra être considéré comme un tableau de 3 entiers. Exercice 2 : Exercice 2 : Carte grise (2) Reprendre l exercice précédent en utilisant maintenant une structure Date pour modéliser la date de mise en circulation. On aura donc 3 champs entiers (int) dans cette structure afin de définir le jour, le mois et l année. Faire de même l affichage de toutes les données de la carte grise. Exercice 3 : Exercice 3 : Comparaison date En reprenant l exercice précédent, écrire une fonction comparaison() qui prend en paramètre deux dates, à l aide de la structure Date, et qui retourne la valeur entière 1 si les dates sont identiques et qui retourne 0 dans les autres cas.

TD 8 Gestion dynamique de la mémoire Exercice 1 : Fichier : erreur.c Erreur de gestion mémoire Lors du TD sur les pointeurs, nous avions décelé l erreur de cette fonction. Rappeler l erreur et corriger la en utilisation l affection dynamique de la mémoire. Exercice 2 : Fichier : personne.c Structure personne Un programme est donné dans le code source suivant. Avant de compiler et d exécuter ce programme, faite un commentaire sur chaque ligne de ce programme pour expliquer ce qui a voulu être réalisé. Vous corrigerez les éventuelles erreurs de programmation et testerez les fonctionnalités de ce code. Vous pourrez créer une fonction affichage() avec le prototype convenable afin d afficher les champ d une structure Personne. Exercice 3 : Enregistrement de phases Ecrire un programme qui lit 5 phrases d'une longueur maximale de 50 caractères au clavier et qui les mémorise dans un tableau de pointeurs sur char en réservant dynamiquement l'emplacement en mémoire pour les chaînes. Ensuite, l'ordre des phrases est inversé en modifiant l ordre des pointeurs et le tableau résultant est affiché et la mémoire sera libérée. Remarques : Vous pourrez avantageusement utiliser les fonctions gets() pour la saisie des phrases, strlen() pour la taille d une chaine de caractère et strcpy() pour la copy d une chaine de caractère. Il faudra utiliser des fonctions de la bibliothèque string en faisant appel à string.h.

TD 9 Débugger un programme avec GDB 1. Pourquoi un débuggeur? Lorsque l'exécutable ne produit pas le résultat attendu ou que le programme s'interrompt avant la fin de l'exécution (segmentation fault), ou encore qu'il entre dans une boucle infinie, il est difficile de connaître exactement la cause de l'erreur et la ligne du fichier à laquelle elle se produit. Jusqu'à maintenant nous utilisions des printf() afin de suivre l évolution des variables pendant l exécution du programme. Cette méthode a des performances très limitées. Il devient impossible de l utiliser pour des programmes conséquents. De plus, l intérêt d utiliser un débuggeur est de pouvoir faire du pas à pas, d affecter des variable en cours d exécution ou encore de placer des points d arrêt à n importe qu elle endroit du programme. 2. Compilation du programme Il est important d utiliser une option spéciale lors de la compilation avec gcc afin de pouvoir utiliser gdb. En effet, de nombreuses informations inutiles lors de l exécution du programme ne sont pas mises par défaut lors d une compilation classique : gcc -Wall -o compilation compilation.c Ainsi, il est a priori inutile de savoir (si on ne fait pas de débogage), au cours de l exécution du programme, à quel endroit on se trouve dans le code source, ou bien de connaître le nom de la variable que nous sommes en train de modifier. Par contre ce genre de renseignement est utile à gdb afin que l utilisateur s y retrouve. De plus, il faut absolument empêcher le compilateur de faire des optimisations, sinon le débuggeur ne pourra plus faire la correspondance entre l application et les lignes du fichier source. Il est donc nécessaire de compiler le code de la façon suivante : gcc -Wall -g -o compilation compilation.c Et de lancer le débuggeur par : gdb compilation Le lancement du débuggeur se fait par la commande run : run On peut alors quitter gdb : quit 04/09/2011 Page 1/3

3. Résumé : quelques commandes importantes Entre parenthèses, les abréviations que l on peut utiliser à la place des commandes en toutes lettres. quit (q) quitter gdb run (r) lancer l exécution break,watch,clear,delete (b,w,cl,d) introduire un point d arrêt, ou bien surveiller une variable. step,next,continue (s,n,c) avancer d un pas en entrant (step) ou pas (next) dans les sous fonctions. Relancer (continue) jusqu au prochain point d arrêt. display,print,backtrace,list (p,bt,l) afficher à nouveau la valeur d un variable à chaque pas (display). Afficher la valeur d une variable (print), de la pile d exécution (backtrace), afficher l endroit où l on se trouve dans le code (list) set, whatis Modifier la valeur d un variable (set x=4), connaître le type de la variable info donne les informations sur le débugage en cours. help aide dans les commandes Note : Pour afficher la valeur de l adresse d une variable on utilise : print &var. Pour mettre un point d arrêt, nous pouvons utiliser le numéro de ligne ou le nom de la fonction. Exercice 1 : Lancement de gdb En utilisant le programme test_gdb.c fourni, réaliser simplement (sans utiliser les fonctionnalités du débuggeur) une compilation et l exécution du programme dans le débuggeur. 4. Démonstration des fonctionnalités Utilisation des points d arrêt (breakpoint) C est la commande break qui permet d indiquer des points d arrêt. On peut fournir un numéro de ligne dans le code source, ou bien le nom d une fonction. L exécution s interrompra alors à chaque appel à cette fonction. Dès lors qu un point d arrêt intervient, gdb redonne la main à l utilisateur. Exercice 2 : Les points d arrêts A partir du programme de test, mettre un point d arrêt à la fonction f (break), visualiser ou vous êtes exactement dans le code (list) et faites une impression de la variable x (print). Vérifier le bon fonctionnement du programme jusqu alors. 04/09/2011 Page 2/3

Exercice 3 : Exécuter le programme A partir de du point d arrêt de l exercice précédent, exécuter le programme en pas à pas (step) et visualiser les valeurs de retour des fonctions f appelées (print). Vérifier le bon fonctionnement. 5. Débogage de programme Exercice 4 : Débogage de 3 exemples de codes Les codes des fonctions suivantes sont erronés. Soit la fonctionnalité ne correspond pas aux cahiers des charges, soit l exécution ne se fait pas. Sans vous plonger dans le code, estimer les tests que vous pensez pertinent et qui vous amènerons à la source du disfonctionnement. Source : exercice_gdb_1.c exercice_gdb_2.c exercice_gdb_3.c 04/09/2011 Page 3/3