Académique Documents
Professionnel Documents
Culture Documents
Bistromathique
Consignes
II
Sujet
III
Dtails techniques
IV
Tests Unitaires
Annexes
Chapitre I
Consignes
Le projet est faire en binme (2 et seulement 2).
Vos exercices doivent tre la norme.
Vous ne pouvez utiliser que les lments vus la piscine.
Seul le rendu du chef de groupe sera ramass.
Le rpertoire doit avoir un fichier auteur dans lequel vous devez mettre les deux
logins.
1
2
3
Rendu :
Nom du rpertoire de rendu : Bistromathique
Chapitre II
Sujet
Il sagit dcrire un programme capable dafficher le rsultat de lvaluation dune
expression arithmtique compose dentiers de taille infinie exprims dans une base
quelconque. Ce programme traite les oprateurs suivant : "+-*/%", ainsi que les
parenthses. ( ). Il grera les priorits et les erreurs de syntaxe. Lensemble des
oprations est fait sur des entiers : 3/4*4=0.
usage : ./calc base oprateurs size_read
Exemples :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Programmation lmentaire
20
Bistromathique
(user@host h)
Chapitre III
Dtails techniques
Un main.c et un bistromathique.h sont donns dans la partie annexe. Il vous
reste coder la fonction evalexpr.
En cas derreur de syntaxe, le programme affiche la chane de caractres dfinie
par la macro SYNTAXE_ERROR_MSG.
Vous ne pouvez utiliser que les fonctions : my_putchar, malloc, free.
Vous pouvez poser vos questions dans le forum rubrique B1-C-Prog Elem
Les programmes doivent tre crits en C ( la norme).
Il devra y avoir un Makefile la norme.
Lexcutable doit sappeler : calc et se trouver dans le rpertoire principal.
Chapitre IV
Tests Unitaires
Vous devrez galement raliser des tests unitaires, afin de tester votre projet. Pour
cela vous raliserez un script test que vous mettrez dans le dossier test. Votre script devra
tre executable peut importe le langage utilis (pensez au shebang).
gcov et lcov
Chapitre V
Annexes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include
#include
#include
#include
<stdlib.h>
<unistd.h>
<string.h>
"bistromathique.h"
16
17
18
19
20
21
22
/*
** Remplacer cette ligne par un include de votre my.h
*/
void my_putstr(char *);
int my_strlen(char *);
int my_atoi(char *);
23
24
25
26
27
28
29
30
31
32
33
34
35
36
if (ac != 4)
{
my_putstr("Usage : ");
my_putstr(av[0]);
Programmation lmentaire
37
38
}
check_base(av[1]);
check_ops(av[2]);
size = my_atoi(av[3]));
expr = get_expr(size);
my_putstr(eval_expr(av[1], av[2], expr, size));
return (0);
39
40
41
42
43
44
45
46
Bistromathique
Programmation lmentaire
1
2
3
4
5
6
7
8
Bistromathique
9
10
11
12
13
if (size <= 0)
{
my_putstr("Bad expr len\n");
exit(2);
}
expr = malloc(size+1);
if (expr == 0)
{
my_putstr("could not alloc\n");
exit(3);
}
if (read(0, expr, size) != size)
{
my_putstr("could not read\n");
exit(4);
}
expr[size] = 0;
return (expr);
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(user@host h)
(user@host h)cat bistromathique.h
45
46
47
48
49
50
/*
** bistromathique.h for bistromathique in .
**
** Made by Charlie Root
** Login
Programmation lmentaire
51
52
53
54
Bistromathique
**
** Started on Tue Oct 23 11:48:35 2001 Charlie Root
** Last update Tue Oct 23 11:52:38 2001 Charlie Root
*/
55
56
57
58
59
/*
** should be remove if you include stdlib.h (malloc.h does it)
*/
void *malloc(unsigned int);
60
61
62
63
64
65
66
67
68
#define
#define
#define
#define
#define
#define
#define
#define
OP_OPEN_PARENT_IDX 0
OP_CLOSE_PARENT_IDX 1
OP_PLUS_IDX 2
OP_SUB_IDX 3
OP_NEG_IDX 3
OP_MULT_IDX 4
OP_DIV_IDX 5
OP_MOD_IDX 6
69
70
71
72
10