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.