3 void displayMenuEntry(int num
, const char* option
) {
4 printf("%d - %s\n", num
, option
);
8 displayMenuEntry(1, "Addition");
9 displayMenuEntry(2, "Soustraction");
10 displayMenuEntry(3, "Multiplication");
11 displayMenuEntry(4, "Division");
12 displayMenuEntry(5, "Puissance");
13 displayMenuEntry(6, "Quitter");
16 int prompt(const char* msg
) {
23 int promptUserChoice() {
26 return choice
= prompt("Veuillez saisir un choix d'operation ?");
29 int doAddition(int val1
, int val2
) {
33 int doSubstraction(int val1
, int val2
) {
37 int doMultiplication(int val1
, int val2
) {
41 int doDivision(int val1
, int val2
) {
43 printf("Division par zero !\n");
44 //FIXME: I'm not very fond of this convention ...
51 int doPuissance(int base
, int expo
) {
53 for (int iter
= 0; iter
< expo
; iter
++) {
59 int doPuissanceSmart(int base
, int expo
) {
63 } else if (expo
% 2 == 0) {
64 power
= doPuissanceSmart(base
*base
, expo
/2);
66 power
= base
*doPuissanceSmart(base
*base
,(expo
-1)/2);
71 int doPuissanceSmartIter(int base
, int expo
) {
78 expo
= (expo
- 1) / 2;
85 int doOperation(int selection
, int val1
, int val2
) {
89 op_result
= doAddition(val1
, val2
);
92 op_result
= doSubstraction(val1
, val2
);
95 op_result
= doMultiplication(val1
, val2
);
98 op_result
= doDivision(val1
, val2
);
101 op_result
= doPuissanceSmartIter(val1
, val2
);
106 puts("Faire un choix entre 1 et 6");
111 /* int promptValue(const char* invite) {
113 return input = prompt(invite);
116 void promptValue(const char* invite
, int* value
) {
121 void promptBothValues(int* val1
, int* val2
) {
122 promptValue("Veuillez saisir la premiere valeur", val1
);
123 promptValue("Veuillez saisir la deuxieme valeur", val2
);
127 int choiceresult
, value1
, value2
, result
;
129 choiceresult
= promptUserChoice();
130 if (choiceresult
== 6) break;
131 promptBothValues(&value1
, &value2
);
132 result
= doOperation(choiceresult
, value1
, value2
);
133 printf("Le resultat est %d\n", result
);