IN3SO3 Programmation en C pour programmeurs Java TP 2
Transcription
IN3SO3 Programmation en C pour programmeurs Java TP 2
ESIEE 2011–2012 IN3SO3 Programmation en C pour programmeurs Java TP 2 – durée 2h Important: si nécessaire terminer le travail commencé en TP avant la séance suivante Objectifs: réussir ses premiers pas les chaînes de caractères, la programmation modulaire en C, sur les structures Notions abordées: structures, typedef, passage d'une structure en paramètre d'une fonction PARTIE A: programmation modulaire applquée aux chaînes de caractères Écrivez un programme pour tester toutes les fonctions programmées dans les 3 exercices suivants. • Déclarations prototypes des fonctions: fichier fonctionsChaines.h. et utilisation du #ifndef • Définition des fonctions: fichier source fonctionsChaines.c. • Programme de test avec les appels des fonctions sur les chaînes: fichier source testFonctionsChaines.c Compilation séparée et éditions de liens selon les commandes de compilation vues en cours. Exercice 1: Miroir Écrivez une fonction qui prend en argument une chaîne de caractères, la renverse sur elle-même et retourne l’adresse de cette chaîne. Exemple: le miroir de "toto " est "otot". Prototype : char * miroir (char * s); Exercice 2: Fréquence Écrivez une fonction qui compte le nombre d’occurrences d’un caractère c dans une chaîne s. La fonction pourra être récursive. Écrivez un programme pour tester cette fonction. Prototype : int compte (char c, char * s); Exercice 3: Chercher/remplacer Écrivez une fonction qui recherche dans une chaîne chaque caractère c pour le remplacer par un caractère r et retourne l’adresse de la chaîne. Prototype : char * cherche_remplace (char c, char r, char * s); PARTIE B: programmation modulaire et utilsation d'une makefile appliquée aux structures Exercice1: encore et toujours des km, miles, Fahrenheit et Celsius. Compiler et exécuter un programme C sous UNIX via la commande make. Quand les 3 fichiers: conversion.h, conversion.c, utilisationConversion.c seront écrits: 1) écrire un fichier makefile (les indentations se font impérativement avec des tabulations) conversion.o: conversion.h conversion.c gcc -c -Wall conversion.c utilisationConversion.o: utilisationConversion.c conversion.h gcc -c -Wall utilisationConversion.c utilisationConversion: conversion.o utilisationConversion.o gcc conversion.o utilisationConversion.o -o utilisationConversion 2) lancer la commande make sous Shell (session Terminal) make 3) lancer votre exécutable renommé utilisationConversion 4) renommer le fichier makefile en mkConversion mv makefile mkConversion 5) lancer la commande make sous Shell (session Terminal) make -f mkConversion 6) insérer une ligne blanche dans conversion.h make -f mkConversion (que se passe-t-il pour les recompilations?) 7) insérer une ligne blanche dans conversion.c make -f mkConversion (que se passe-t-il pour les recompilations?) 8) lancer votre exécutable renommé utilisationConversion 1) Fichier conversion.h Soit un structure de type Conversion, contenant les 4 champs suivants, tous de de type double: km, mile, fahrenheit, celsius. Penser à utiliser un typedef. Les déclarations prototypes des fonctions relatives à ce type Conversion sont: • Initialisation d'une conversion extern void initCalcul(Conversion* conversion); • Saisie d'une conversion extern void saisieCalcul(Conversion* conversion); • Affichage d'une conversion extern void afficheCalcul(const Conversion* conversion); • Conversion kilomètres-miles extern void km_vers_mile(Conversion* conversion); • Conversion Fahrenheit – C extern void F_vers_C(Conversion* conversion); 2) Fichier conversion.c Cahier des charges des fonctions: 1) Initialisation d'une variable de type Conversion: tous les champs sont initialisés à 0. 2) Saisie d'une variable de type Conversion: les champs km et fahrenheit sont saisis par l'utilisateur 3) Affichage d'une variable de type Conversion: les valeurs de tous les champs sont affichés. 4) Conversion kilomètres-miles Le champ mile recoit la valeur de la conversion du champ km (1 mile = 1,609 km) 5) Conversion Fahrenheit – Celsius Le champ celsius recoit la valeur de la conversion du champ fahrenheit, selon la formule: C = 5 / 9 (F - 32) 3) Fichier utilisationConversion.c Ecrire un programme d'utilisation appelant ces 2 fonctions. 4) Définir des fonctions d'initialisation, de saisie et d'affichage pour un tableau de structures de type Conversion. Tester les dans votre programme d'utilisation 5) Dans un tableau de structure Conversion, définir une fonction de recherche, d'une température en Celsius, passée en paramètre. Tester la dans votre programme d'utilisation Exercice 2: Vecteur Appliquer la programmation modulaire avec un makefile. 1) Définir une structure avec comme seul champ un tableau de 6 nombres réels simple précision. 2) Définir le type Vecteur pour cette structure. 3) Initialiser un vecteur avec les 6 valeurs suivantes: 1,34 8,78 10 4 22,12 3,145 4) Définir une fonction d'impression d'un vecteur 5) Définir la fonction Vecteur inverse( Vecteur vecteur), retournant un vecteur dont les éléments du tableau sont les inverses de ceux du vecteur passé en paramètre (attention au diviseur nul). 6) Tester les deux fonctions dans la fonction principale de votre programme.