général
curriculum vitae
contact

CARDIWEB
2007
2006
2005

Etudes
les projets
les sites web
les exposés

liens
OTB World
EPITA
PCN
CARDIWEB

 
                      

                          PROJET BISTROMATHIQUE


--------------
 Introduction
--------------

The Bistromatic Drive  is  a  wonderful  new  method  of  crossing  vast
interstellar distances without all that  dangerous  mucking  about  with
Improbability Factors.

Bistromathics itself is simply a revolutionary new way of  understanding
the behaviour of numbers. Just as Einstein observed that time was not an
absolute but depended on the observer's  movement  in  space,  and  that
space was not an absolute, but depended on the  observer's  movement  in
time, so it is now realized that numbers are not absolute, but depend on
the observer's movement in restaurants.

The first non-absolute number is the number of people for whom the table
is reserved. This will  vary  during  the  course  of  the  first  three
telephone calls to the restaurant, and then bear no apparent relation to
the number of people who actually turn up, or to the  number  of  people
who subsequently join them after the  show/match/party/gig,  or  to  the
number of people who leave when they see who else has turned up.

The second non-absolute number is the given time of  arrival,  which  is
now known to be one of those most bizarre of  mathematical  concepts,  a
recipriversexcluson, a number whose existence can  only  be  defined  as
being anything other than itself. In other  words,  the  given  time  of
arrival is the one moment of time at which it  is  impossible  that  any
member of the party will arrive. Recipriversexclusons now play  a  vital
part in many branches of maths, including statistics and accountancy and
also form the basic equations  used  to  engineer  the  Somebody  Else's
Problem field.

The third and most mysterious piece of non-absoluteness of all  lies  in
the relationship between the number of items on the bill,  the  cost  of
each item, the number of people at the table, and  what  they  are  each
prepared to pay for. (The number of people who have actually brought any
money is only a sub-phenomenon in this field.)


-----------------------
 Principe fondamental
-----------------------

  Il  s'agit  de  réaliser  une  machine  qui  évalue  une  expression
  arithmétique où interviennent des  ``grands'' nombres, dans une base
  quelconque.

--------------
 Restrictions
--------------

  Les sources de  votre projet doivent être  conformes au CSS, tant au
  niveau de la mise   en forme que de   la structure du  répertoire de
  rendu (Makefile, AUTHORS, etc...)

  Vous n'avez droit qu'aux fonctions suivantes :

malloc(3) realloc(3) free(3) read(2) write(2) exit(3) assert(3)

  Votre programme devra  compiler  _et_ fonctionner  sur _toutes_  les
  architectures de l'école.

  Vous  ne devez rien  afficher de  plus ou  de moins  que ce qui  est
  demandé dans  le sujet. Vous serez corrigés  par une machine, qui ne
  tolèrera aucun écart.

-----------
 Modalités 
-----------

  Ce projet est à réaliser en binôme.  Ces binômes doivent être formés
  au plus tard une semaine après l'annonce du sujet.

  Vous   devez    stocker    vos    sources    dans le      répertoire
  ~/c/rendu/proj/bistromathique, en  les protégeant contre l'accès par
  d'autres utilisateurs (droits 600 et 700).

  Votre Makefile doit générer un exécutable nommé ``bistromathique''.

  Vous  devez rendre votre  projet sous forme d'archive cryptée, comme
  l'indique la  page correspondante sur  le  site des  ACUs, avant  le
  vendredi 8 novembre à 23:42.

-----------------------
 Critères d'évaluation
-----------------------

  Ceci est un sujet  à deux étages.  La gestion  du premier  doit être
  parfaite pour que le second soit pris en compte.

  La base de notation d'une bistromathique  de niveau 1 est 10 points.
  Celle d'une bistromathique de niveau 2 est 20 points.

  Les performances de la  bistromathique relativement à la machine  de
  référence déterminent la note finale  (il est donc possible pour une
  bistromathique de niveau 1 de dépasser 10  points, et au niveau 2 de
  dépasser 20 points).
  
  Les détails de l'évaluation sont donnés en fin de sujet.

------------------------------
 Documentation complémentaire
------------------------------

  Vous disposez d'un newsgroup dedié au projet :
	epita.cours.c-unix.bistromatique 

  (oui il y a une faute dans le nom du newsgroup, mais il est comme ca
  sur le serveur  de news, on ne peut rien y  changer, désolés pour la
  confusion éventuelle...)

  Une FAQ sera peut-etre mise  en place, nous vous indiquerons dans le
  newsgroup ad-hoc sa création et son emplacement.


===========================
 Expressions arithmétiques
===========================

  Les expressions que votre bistromathique  doit évaluer peuvent  être
  données sous  deux formes.  La gestion de  la  deuxième forme est un
  ``plus'' par rapport  à la première,  qui  permet de gagner plus  de
  points, mais  ne sera considérée  que si la  gestion de  la première
  forme est parfaite.
  
  Forme 1: R.P.N.
  ---------------

  Les  expressions  sont données  dans  la  notation dite  ``polonaise
  inversée'',  où  les  opérations  que  subissent  les  nombres  sont
  indiquées _après_ leurs opérandes.

* Exemple d'expression :

  234233 2324244432 234243243 234234243 23423423 +/+*

* Il   existe  7 types   d'opérateurs   qui peuvent figurer  dans  une
expression arithmétique en notation RPN :

  - l'opérateur d'empilage
  - l'opérateur d'échange d'ordre (swap)
  - l'opérateur d'addition
  - l'opérateur de négation
  - l'opérateur de soustraction
  - l'opérateur de multiplication
  - l'opérateur de division
  - l'opérateur ``modulo''

  Forme 2: notation infixe
  ------------------------

  Les  expressions sont données   dans  la forme connue  à  opérateurs
  infixe, dont les priorités sont celles du C.

* Par exemple, l'expression précédente  est équivalente à l'expression
infixe suivante :

  234233*(2324244432+234243243/(234234243+23423423))


* Il  existe  5 opérateurs   qui peuvent figurer  dans  une expression
arithmétique en notation infixe :

  - l'opérateur d'addition
  - l'opérateur de négation et de soustraction
  - l'opérateur de multiplication
  - l'opérateur de division
  - l'opérateur ``modulo''

* Par ailleurs,  les  expressions  peuvent  être groupées    par  deux
opérateurs consacrés :

  - l'opérateur de début de groupement
  - l'opérateur de fin de groupement


  Fonctionnement général
  ----------------------

  Votre  bistromathique reçoit ses  paramètres sur  l'entrée standard,
  dans un format détaillé plus loin.

  Elle effectue tous les calculs  sous forme FRACTIONNELLE (et non pas
  entière).

  Le résultat doit être affiché sur la sortie standard, dans un format
  détaillé lui aussi plus loin.

  Si une erreur survient, votre bistromathique doit le signaler.

=====================
 Gestion des erreurs
=====================

    Bien évidement, la machine est capable est gérer les erreurs comme
    toute calculatrice de notre époque qui se respecte.

* Exemples de conditions d'erreur en RPN :

  - Dans la base `artye', `rya a /' provoque une erreur arithmétique
    (car `a'  est l'élement neutre de l'addition dans la base) ;

  - Dans la même base, `a a + +' provoque une erreur de pile ;

  - De même pour l'expression isolée `a a a +'.

* Exemples de conditions d'erreur en infixe :

  - Dans la base `artye', `rya/a' provoque une erreur arithmétique
    (car `a'  est l'élement neutre de l'addition dans la base) ;

  - L'expression `a*/b' provoque une erreur de syntaxe.

  - Si l'entrée  est en notation  infixe et  que la bistromathique  ne
    gère pas cette notation, l'erreur de gestion doit être signalée.


* Il existe quatre messages d'erreur :

  - l'erreur de pile ou de gestion ;
  - l'erreur de division ou de modulo par zéro ;
  - l'erreur de syntaxe dans une expression ;
  - l'erreur  relative  à   un  problème  système (allocation mémoire,
    entrées-sorties ...) ;

    Quand  une  erreur    survient,   le message  correspondant   doit
    s'afficher sur la sortie standard en lieu et place du résultat, et
    le programme doit se terminer avec un code d'erreur non nul.

    Le texte de ces messages est donné  en entrée à la bistromathique,
    comme c'est expliqué dans la section suivante.

=================
 Entrées-sorties
=================

    Votre bistromathique doit pouvoir travailler avec n'importe quelle
    expression    arithmétique, dans   n'importe    quelle base,  avec
    n'importe quelle représentation des  opérateurs, et avec n'importe
    quels messages d'erreur.

    Format des données d'entrées
    ----------------------------

    Les  données vous seront    passées sur  l'entrée standard,   dans
    l'ordre et la forme suivants :

  - Les  4 messages d'erreur, sous  la forme de chaînes  de caractères
  nul-terminées, dans l'ordre de présentation ci-dessus ;

  - un  octet qui vaut 51 si  l'entrée est en  notation RPN, ou  69 si
  l'entrée est en notation infixe ;

  - les 8  opérateurs (le dernier doit être  ignoré si on  est en mode
  infixe), un caractère   par opérateur, dans  l'ordre de présentation
  ci-dessus ;

  - la taille de la base sur 8 bits, suivie de la base ;

  - la taille de l'expression sur 32 bits, suivie de l'expression ;

* Notez  bien les points suivants :

  - ces   différents  champs ne   sont  pas séparés par  un délimiteur
    particulier, et le caractère de retour  à la ligne devient donc un
    caractère comme les autres.

  - pour la base et les opérateurs, aucun caractère n'est interdit.

  -     la  taille  de  l'expression   est   donnée  en représentation
    petit-boutiste (little-endian).

    Format de la sortie
    -------------------

    Le résultat  sera affiché sur la  sortie standard, sans ajouter de
    retour à la ligne terminal.


1) Si l'expression d'entrée est sous la forme RPN, le résultat doit se
conformer aux contraintes suivantes :

  * Si le résultat a un dénominateur non unitaire, le nominateur et le
    dénominateur seront  affichés  l'un après l'autre.   Le nominateur
    sera suivi de l'opérateur   d'empilage,   et le dénominateur    de
    l'opérateur de division.

  * Si le dénominateur   du résultat vaut  1,  seul le nominateur sera
    affiché, et ne sera pas suivi de l'opérateur d'empilage.

  * Si le  résultat est négatif,  l'opérateur de négation sera affiché
    en fin de résultat.

2) Si l'expression d'entrée est sous la forme infixe, le résultat doit
se conformer aux contraintes suivantes :

  * Si le résultat a un dénominateur non unitaire, le nominateur et le
    dénominateur  seront affichés  l'un  après l'autre, _séparés_  par
    l'opérateur de division.

  * Si le dénominateur du  résultat  vaut 1,  seul le nominateur  sera
    affiché.

  * Si le résultat est négatif, l'opérateur de négation / soustraction
    sera affiché en tête du résultat.


    Garanties
    ---------

    Un caractère donné ne figurera pas à la fois dans la base et comme
    opérateur.

    Chaque caractère de la base sera unique dans la base.


==========
 Exemples
==========

(Vous trouverez   ultérieurement   des  exemples  précis de    données
d'entrée sur le compte des ACUs.)

    Forme RPN
    ---------

    Voici quelques exemples d'expressions  et leurs résultats, dans la
    base décimale connue, et en utilisant  les opérateurs ' ', '.', +,
    N, -, *, /, %:

E: 10 5+3/
R: 5

E: 10N7+3/
R: 1N

E: 10 7+3/
R: 17 3/

E: 1 0.-
R: 1N

E: 101 69 42%3/20+3*./N
R: 69 101/N

   Forme infixe
   ------------

(pas d'exemple pour l'instant)

=======================
 Critères d'évaluation
=======================

Votre programme sera évalué comme suit :

- À la moindre erreur de conformité de vos sources avec  le CSS ou les
  modalités de rendu, vous vous verrez attribuer la note définitive et
  non contestable de 0.

- Si   votre  programme ne    gère   pas  la notation  infixe,   votre
  bistromathique sera notée sur 10.  Si elle gère cette notation, elle
  sera notée sur 20.

- À la moindre erreur dans  le resultat, vous vous verrez attribuer la
  note définitive et non contestable de 0.

- Si  tout  fonctionne  bien,  plus  votre  programme  effectuera  les
  opérations rapidement, meilleure sera votre note.


- Si vous ne rendez rien, ou s'il y a des erreurs de compilation, vous
  vous verrez  attribuer la note définitive et  non contestable de -5,
  pour ``fainéantise''.

- Si vous  essayez de détourner le  sujet, ou de  produire un résultat
  sans  que votre  code  C  n'en soit  responsable,  vous vous  verrez
  attribuer la note de -21, pour ``foutage de gueule''.

- La tricherie est  sanctionnée de la note -42  et d'un entretien avec
  les responsables pédagogiques.


42.


 

 
 
     

| Copyright 2002 © OTB World Conception |
.:: version du site : v2.0 ::.