Vous êtes sur la page 1sur 11

REPUBLIQUE DU CAMEROUN REPUBLIC OF CAMEROON

Paix – Travail – Patrie Peace – Work – Fatherland


--------------- ---------------
UNIVERSITE DE YAOUNDE 1 UNIVERSITY OF YAOUNDE 1
Sapientia – Collativa – Cognitio Sapientia – Collativa – Cognitio
--------------- ---------------
FACULTE DES SCIENCES FACULTY OF SCIENCE
B.P. 812 Yaoundé B.P. 812 Yaounde
Tél/Fax : (237) 22.23.44.96 Tél/Fax : (237) 22.23.44.96

INF325 : INFORMATIQUE POUR LES MATHEMATIQUES III

REALISATION D’UNE CALCULATRICE


ELECTRONIQUE

Noms Matricules

1. KUO FONGUELE Franklin Brice 14C2967


2. KANTCHOUET TCHINDA Armel 14F2268
3. FOKA TAKAMGNO Carlin 14L2485

4. DOYOU NANA DELABOU Bracon Rogerson 15A2021


5. TELLA NGOUDJI Wilrich Harold 15I2278

Coordinateur : M. MOTO MPONG Serge Année académique : 2018/2019


Rapport de Projet

Sommaire
INTRODUCTION 3

I. Rapport technique 3

1. Cahier des charges 3

2. Spécifications fonctionnelles et détaillées 4

3. Tests et validation 7

4. Recette 7

5. Performances 8

6. Difficultés techniques et solutions apportées 8

7. Conclusion et Perspectives 8

II. Rapport de gestion du projet 9

1. Découpage en tâches 9

2. Organisation de l'équipe 9

3. Difficultés rencontrées dans la gestion du projet et solutions apportées 9

III. Apports du projet 9

1. Apports scientifiques et techniques 10

2. Apport sur la formation pédagogique 10

3. Apport personnel 10

Conclusion 10

Bibliographie 11

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 2


Rapport de Projet

Introduction
Ce document a pour but de présenter et de décrire le déroulement de notre projet
d’informatique de l’unité d’enseignement INF325, portant sur la réalisation d’une
calculatrice électronique.
Ce rapport contient l’ensemble des éléments du projet. D’un point de vue technique
tout d’abord, nous présenterons le cahier des charges tel que nous l’avons imaginé, puis
les spécifications plus détaillées qui en découlent. Nous décrirons le fonctionnement de
notre projet dans son ensemble ainsi que les éléments qui prouvent le bon
fonctionnement de celui-ci ainsi que le cycle de développement choisi pour sa réalisation.
Pour terminer la partie technique, nous présenterons nos impressions sur le projet
concernant les difficultés techniques rencontrées et les perspectives ouvertes.
La deuxième partie de ce rapport a pour objectif de présenter la manière dont nous
avons géré le projet. Nous présenterons dans un premier temps comment le projet a été
découpé en tâches afin de mieux se répartir le travail, puis comment s’est organisé celui-ci
au sein de l’équipe. Nous présenterons ensuite le diagramme de Gantt tel qu’il a été établi
au début du projet, puis ferons le point sur les difficultés rencontrées, avant de présenter
le diagramme de Gantt qui a été effectivement réalisé.
La troisième partie a pour objectif de présenter l’ensemble des apports du projet :
d’un point de vue technique, gestion de projet, pédagogique, puis personnel.
Nous espérons que vous prendrez autant de plaisir à lire ce rapport que nous en
avons pris durant tout le déroulement de ce projet.

I- Rapport technique
1. Cahier de charges
Il nous a été fourni au début du projet un ensemble de taches précises à effectuer.

a- Fonctionnalités
L’ensemble des fonctionnalités aux quelles l’utilisateur doit avoir accès sont :
1.1 Effectuer des calculs arithmétiques obtenus à dans une chaine de
caractères entrée dans le programme ;
1.2 Ajouter des constantes au programme qu’il pourra utiliser dans la suite ;
1.3 Effectuer un rappel mémoire des 3 dernières opérations effectuées ;
1.4 Pouvoir à tout moment réinitialiser sa calculatrice ;

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 3


Rapport de Projet

b- Schéma global de fonctionnement

Sortie du programme
Choix
Réalisation d’un
Utilisateur de calcul : Entrée
l’action d’une chaine

Ajout de Réinitialiser la Analyse de la


constantes calculatrice formule (chaine)

Rappel Accès aux Renvoie d’un


mémoire derniers calculs résultat ou
en mémoire d’une erreur de
syntaxe

L’utilisateur dès l’entrée dans le programme se retrouve confronté à un choix. Celui


ci le menant à l’une des actions suivantes :
 Réalisation d’un calcul : le menant à entrer une expression qui sera analysée par le
groupe de fonctions d’analyse de chaine renvoyant ainsi un résultat si tout se passe
bien (celui si sera mis en mémoire) ou un message d’erreur en cas d’échec
d’analyse.
 Ajout de constantes : permettant à l’utilisateur d’entrer des constantes qu’il
utilisera dans la suite.
 Rappel mémoire : donnant à l’utilisateur la possibilité de voir les 3 dernières
opérations que l’utilisateur a entré.
 Réinitialiser la calculatrice :
 Sortie du programme : Toutes les actions précédentes ramenant à la demande d’un
choix, il est utilisé pour faire cesser l’exécution du programme.
Nous allons présenter dans la partie suivante le choix des technologies utilisées ainsi
que la solution que nous avons proposé pour répondre au besoin.

2. Spécifications fonctionnelles et détaillées


a- Dépendance entre fonctions

Le schéma suivant présente les relations de dépendance entre les différentes


fonctions. Nous avons tenu compte en partie de ce schéma afin de ne pas perdre de
temps.

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 4


Rapport de Projet

Ajout de Analyse de la Réinitialiser la


constantes chaine pour calcul calculatrice

Ecriture sur fichiers en Lecture sur fichiers Mémoire du calcul Rappel memoire
mémoire en mémoire

A appel B

b- Analyse d’une expression


La fonction analyse de la chaine a été obtenu à l’aide du l’analyse en structure
d’arbre suivante :
On lit la chaîne de gauche à droite en se référant à la grammaire des expressions
mathématiques et à chaque étape, on lit le caractère suivant (éventuellement un groupe
de caractères) pour connaître la prochaine opération à effectuer. Cette action à réaliser
est conservée dans la variable Action. On dispose d’autant de sous-programmes que de
règles dans la grammaire. Pour des raisons de facilité, ces sous-programmes s’appellent
Expression, Terme, Facteur, Atome. Si on se rappelle les règles de la grammaire, on voit
que le sous-programme Expression doit faire appel au sous-programme Terme mais
également à lui-même. De la même manière, Terme fait appel à Facteur et à lui-même. On
remarque que Atome peut faire appel à Expression et à lui-même.
Notre analyseur doit être capable de lire des blocs simples comme un nombre, un
opérateur, une fonction, ... Il faut donc en plus de faire une lecture caractère par
caractère, être capable de donner un sens à une suite cohérente de lettres comme sin ou
de chiffres comme 154.5. Cette distinction des éléments fondamentaux est souvent
appelée « tokenisation ». Cette tâche est réalisée par les sous-programmes LireReel et
LireSymbole. Voyons comment procéder. Si on fait appel à la procédure LireSymbole,
celle-ci lit le contenu de formule à la position Pos. Si le contenu est un opérateur comme +,
la valeur de Action passe à la valeur correspondant à l’opérateur, ici plus. Si le contenu est
une lettre, il faut continuer à lire les lettres suivantes jusqu’à obtenir autre chose qu’une
lettre. On doit concaténer les différentes lettres lues pour obtenir un mot. On regarde
alors le mot obtenu et on agit en conséquence en modifiant la valeur de Action. Si le
contenu est à présent un chiffre, on fait alors appel à la procédure LireReel. On procède à
peu près de la même manière qu’avec des lettres, on lit les chiffres un à un et on calcule la
valeur du nombre obtenu. Rappelons que placer un chiffre c à la droite d’un nombre x ne
contenant pas de partie décimale revient à multiplier ce nombre par 10 et à ajouter c. On
aura d`es lors une affectation de la forme x=10 ∗ x + c. Si le nombre contient une partie
décimale, ajouter un chiffre c à droite revient à ajouter c/10n pour un n convenable
dépendant de la position, donc de la partie déjà lue. La lecture d’un nombre doit modifier

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 5


Rapport de Projet

la valeur de Action pour spécifier qu’un nombre vient d’être lu et ce nombre est stocké
dans la variable Valeur.
Au lancement de notre programme, formule doit contenir la chaîne de caractères à
traiter et Pos doit pointer sur le premier caractère de la formule. On fait alors appel une
première fois au sous programme LireSymbole. De cette manière Action a pour contenu le
type du premier bloc élémentaire lu. On fait à présent appel à Expression pour
l’évaluation. Ce sous-programme fait appel à Terme qui lui-même fait directement appel à
Facteur, ce dernier faisant appel à Atome (nous rappelons que ce découpage est
nécessaire pour respecter l’ordre de priorité des différentes opérations). Dans le sous
programme Atome, on agit suivant la valeur de Action. Si l’action décrite par cette variable
tombe dans la catégorie définie par la grammaire, on agit en conséquence et dans ce cas,
on appelle directement LireSymbole pour aller lire le symbole suivant (dès lors, Action
aura été réactualisée pour la prochaine action à effectuer). Si l’action décrite par Action
n’est pas dans cette catégorie, on ne fait rien et on quitte ce sous-programme (c’est que
l’opération à effectuer est d’un niveau de priorité plus faible). Cette manière de procéder
est utilisée à tous les niveaux. Par exemple, si on examine la procédure Terme, on retrouve
la même philosophie : quand la variable Action a pour valeur fois ou divi, on appelle la
procédure LireSymbole et on agit en conséquence en effectuant une multiplication ou une
division (ce qui nécessite un nouvel appel à Terme). Sinon on quitte le sous-programme et
on retourne un niveau hiérarchique moins élevé. Car si on se trouve dans la procédure
Terme, c’est que l’on a quitté les procédures Atome et Facteur donc Action ne peut plus
contenir que plus, moins ou éventuellement prendre la valeur fin pour spécifier que toute
la formule a été lue et qu’il n’y a donc plus rien à faire.
c- Matériel et choix de technologie
Ayant été spécifié dans le cahier de charge le langage de programmation c’est-à-dire
le C. Dans cette partie nous nous attarderons plus sur les librairies, les programmes, et
outils utilisés pour la réalisation du projet.
En effet le projet portant sur la réalisation d’une calculatrice en C grâce à l’étude
d’une chaine de caractères, nous avons fait intervenir dans sa réalisation :
 Des PC sous Windows 10 ;
 IDE Code∷Blocks : de par sa présence sur tous les différents types de systèmes
d’exploitation permettant ainsi de coder quelque soit l’ordinateur sur le quel on
travaille mais aussi du fait que ce fut le programme principal de notre
apprentissage ;
 Les librairies sous Code∷Blocks :
 Stdio.h et stdlib.h : gérant les principales fonctions d’écriture et de lecture en
mémoire et sur fichiers ;
 Math.h : Incontournable car donne accès aux différentes fonctions
mathématiques indispensables pour la réalisation de notre calculatrice
électronique ;

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 6


Rapport de Projet

 String.h : Permettant d’effectuer avec plus d’aisance les différentes


manipulations sur la chaine de caractères.
 Un maximum d’effort a été fait pour réduire au maximum les problèmes de
compatibilité avec les autres systèmes vu que le programme a été codé sous
Windows.
3. Test et validation
Avant de tester l’ensemble de l’application, nous avons dans un premier temps codé
et testé chaque fonction pour savoir si elles fonctionnaient séparément. Nous les avons
ensuite réunies en les assemblant étapes par étapes pour construire l’application finale.
La réalisation des fonctions a tout d’abord portée sur celles de l’analyse de la chaine
de caractères car c’est l’élément central sur le quel se reposent les autres ou encore
trouvent leur utilité. Avant de nous intéressé de façon successive à celles sur les fichiers
(lecture et écriture), puis sur celles sur la mise des précédents calculs en mémoire et enfin
sur la réinitialisation de la calculatrice. Puis nous les avons unis sous une fonction de choix
de l’action à faire afin de restreinte la liberté des « testeurs d’appli » vu que le programme
est réalisé sur console.
Un test de compatibilité avec les autres systèmes d’exploitation (Linux, MAC) n’a pas
pu être effectué du fait de l’absence de temps et de moyens. Mais un maximum de rigueur
a été pris de par l’étude du comportement de notre IDE sur le Linux pour assurer au
maximum sa compatibilité avec celui-ci le cas échéant.
4. Recette
Afin de prouver le fonctionnement de notre application nous allons faire une
simulation d’un utilisateur et la réaction des fonctions face à ses choix sous forme de
tableau.
Fonctions Etat Commentaire

Choix de l’action

Analyse de la chaine
Séparément ne présentais aucun problème mais
Lecture dans un fichier
plante parfois dans le programme principal.
Mise en mémoire de calcul

Ajout de constante

Ecriture dans un fichier

Rappel mémoire

Lecture de la mémoire de calcul

Réinitialiser la calculatrice

Mise en mémoire de calcul

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 7


Rapport de Projet

Ecriture dans un fichier

Sortie du programme

*Légende de la colonne des fonctions : principale appelle secondaire qui appelle tertiaire
Principale Secondaire Tertiaire

Au final, nous estimons que 90% des fonctionnalités de bases ont été implémentés.
Certaines améliorations ont étés faites comme par exemple la conservation du résultat de
précédent calcul pour une utilisation future sous le mot clé « Ans ».
5. Performances
Le programme ayant été vu et revue pour être le plus court possible, il peut tourner
sur des appareils de capacités faibles.
6. Difficultés techniques rencontrées et solutions apportés
La réalisation de ce programme ne fut pas de tout repos. En effet nombre
d’éléments ont été complexes à résoudre.
6.1 Analyse de la chaine de caractères :
Pouvant être présenté comme étant la bête noire du défi à relever il a fallu pour
analyser une chaine, à l’aide des différentes notions de programmation en C et de
recherches poussées, créer des fonctions a même de la transformer en arbre d’analyse
respectant les règles de calcul.
Deux formats ont été retenu : l’une faisant une recherche sur le nombres
d’opérations et fonctions trouvées pour réduire la chaine et l’autre faisant une lecture
séquentielle de la chaine pour effectuer les calculs en prenant toujours en compte les
règles de calcul. Et c’est la deuxième qui fut retenu de par sa rapidité et sa longueur.
6.2 La réunion des fonctions du programme :
Chacune des fonctions ayant été tout d’abord élaborées séparément, leur réunion
sous le même code fut à l’origine de certaines collisions et manquements ayant causés des
bugs majoritairement résolus.
7. Conclusion et perspectives
De tout ce qui précède on constate que l’application est fonctionnelle mais possède
encore des possibilités d’améliorations comme :
 L’ajout d’une interface : Elément indispensable pour une possible commercialisation
et pour bloquer toute erreur liée à une manipulation hasardeuse du programme ;
 L’ajout de « mode » à la calculatrice comme « statique » qui simplifirait l’usage de la
calculatrice pour le calcul de moyenne mathématique et autre lors d’une étude
statistique soutenu par calculatrice.

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 8


Rapport de Projet

II- Rapport de gestion du projet


La gestion de projet est une partie indispensable au bon déroulement de celui-ci. Les
compétences techniques de chacun sont à prendre en compte mais une gestion de projet
correcte est aussi capitale pour mener le projet à bien le plus efficacement possible.
1. Découpage des taches
Afin de mener à bien notre projet, il nous a fallu déterminer les différentes tâches,
les
découper et les répartir équitablement entre nous et en fonction des capacités de chaque
membre.
Notre projet est composé de 4 tâches principales :
 Analyse de la chaine de caractères
 L’ajout et la suppression d’éléments dans un fichier
 La recherche dans un fichier
 La création du rapport de projet

2. Organisation de l’équipe
Au tout début, l’organisation fut un véritable défi, car les possibilités de
rencontres entre membres étaient limitées. Créant ainsi une avancée individuelle de
chaque membre sur le projet.
Néanmoins, avec le temps des rencontres de groupes ont été effectués pour évaluer
l’avancement de chacun dans son travail, surtout sur les points essentiels comme l’analyse
de la chaine de caractères, et l’élaboration du rapport où l’idée jugée la plus efficace par
les membres du groupe était conservée et dès lors développer en groupe.
3. Difficultés rencontrées dans la gestion du projet et solutions apportées
Malgré cette organisation, il y a eu quelques petits soucis pour déterminer la durée
de certaines tâches. En effet, comme nous n'avions jamais travaillé sur ce type de projet
auparavant, il nous a paru difficile d’évaluer le temps nécessaire pour chaque tâche.
Certaines fonctions sont fortement reliées entre elles mais elles sont effectuées
séparément par chacun de nous. Il fallait alors mettre en commun ce qui a causé quelques
problèmes. Néanmoins, en travaillant ensemble, nous avons pu trouver une méthode de
travail efficace et résoudre les problèmes.
Nous n’avons pas eu de problèmes d’entente.

III- Apports du projet


Ce projet long de plusieurs semaines était une bonne expérience. Il nous a apporté
beaucoup tant sur le plan technique, qu’en terme de gestion de projet.

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 9


Rapport de Projet

1. Apports scientifiques et techniques


Ce projet nous a permit de découvrir réellement le monde de la programmation en
C, un monde complexe mais passionnant de par les débouchés. De plus nous avons réussi
à programmer une calculatrice ayant une large gamme de fonctionnalités permettant de
résoudre certains problèmes de l’utilisateur, et d’en envisager d’autres ; ce qui fut très
gratifiant.
2. Apport pédagogique
Ce projet nous a permis de consolider nos connaissances sur le langage C et d’en
apprendre plus. Effectivement, grâce à celui- ci nous avons appris à manipuler des notions
sur les fonctions (création de header, l’impact des variables globales et locales), les fichiers
(le déplacement dans un fichier, la création et la lecture), les chaines de caractères
(analyse, extraction de certains types d’éléments, écriture dans une chaine et autres) et
des fonctions telles que « goto », mais aussi un autre type de variable propre : « les
énumérations ». Eléments qui sont tous a retrouver dans notre programme.
3. Apport personnel
Nous avons appris à développer l’esprit de travail en équipe en ce sens que nous
avons appris à mieux communiquer ce qui a eu pour conséquence d’améliorer la
compréhension du dit projet.

Conclusion
C’est la première fois que nous travaillons en groupe sur un projet avec un but bien
défini. De l’avis général, nous avons consolidé nos connaissances générales et appris à
faire des applications plus attrayantes et plus orientées pour le monde du travail. Nous
sommes globalement satisfaits de ce que nous avons réalisé.
Au niveau de la gestion du projet en équipe, nous avons réussi à bien nous répartir les
tâches afin de réaliser nos objectifs dans les temps et l'ambiance générale du groupe était
très bonne.
Une bonne expérience à renouveler !

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 10


Rapport de Projet

Bibliographie :
 Cours d’INF325 de Monsieur MOTO MPONG Serge
 Openclassroom.com
 Fr.wikipedia.org
 Implémentation d’un interpréteur élémentaire de fonctions : Théorie et pratique
Michel Rigo - Version provisoire (1999-2000)

INF325: INFORMATIC FOR MATHEMATICS SCIENCES III Page 11