X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TP_7%2Fexo2%2Fexo2.c;fp=TP_7%2Fexo2%2Fexo2.c;h=7a97f697739e0374806020338a116915f0bb9aa1;hb=b10f2dc98106b52e190abb4041be21880b2a391c;hp=0000000000000000000000000000000000000000;hpb=5c1bf74dec4517e08461e2c44ad74d8e37dd471b;p=TD_C.git diff --git a/TP_7/exo2/exo2.c b/TP_7/exo2/exo2.c new file mode 100644 index 0000000..7a97f69 --- /dev/null +++ b/TP_7/exo2/exo2.c @@ -0,0 +1,114 @@ +#include +#include + +//FIXME: Comment the code !!! + +void displayMenuEntry(int num, const char* option) { + printf("%d - %s\n", num, option); +} + +void displayMenu() { + displayMenuEntry(1, "Addition"); + displayMenuEntry(2, "Soustraction"); + displayMenuEntry(3, "Multiplication"); + displayMenuEntry(4, "Division"); + displayMenuEntry(5, "Puissance"); + displayMenuEntry(6, "Quitter"); +} + +int promptValue(const char* invite) { + int value = 0; + puts(invite); + scanf("%d", &value); + return value; +} + +int promptOperation() { + displayMenu(); + return promptValue("Veuillez choisir une operation ?"); +} + +int doAddition(int val1, int val2) { + return val1 + val2; +} + +int doSubstraction(int val1, int val2) { + return val1 - val2; +} + +int doMultiplication(int val1, int val2) { + return val1 * val2; +} + +int doDivision(int val1, int val2) { + //FIXME: Useless code path given the exit main loop condition + if (val2 == 0) { + printf("Division par zero !\n"); + // FIXME: I'm not very fond of this convention ... + return 0; + } else { + return val1 / val2; + } +} + +int doPuissance(int base, int expo) { + int power; + if ( expo == 1) { + power = base; + } else if ( expo % 2 == 0 ) { + power = doPuissance(base*base, expo/2); + } else { + power = base*doPuissance(base*base,(expo-1)/2); + } + return power; +} + +int doOperation(int selection, int val1, int val2) { + int op_result; + switch (selection) { + case 1: + op_result = doAddition(val1, val2); + break; + case 2: + op_result = doSubstraction(val1, val2); + break; + case 3: + op_result = doMultiplication(val1, val2); + break; + case 4: + op_result = doDivision(val1, val2); + break; + case 5: + op_result = doPuissance(val1, val2); + break; + case 6: + break; + default: + puts("Faire un choix compris entre 1 et 6"); + } + return op_result; +} + +int main() { + int choice = promptOperation(); + int value1 = promptValue("Veuillez saisir une valeur entiere initiale ?"); + int value2 = 0, result = 0; + bool first_loop = true; + + for (;;) { + if (choice == 6) break; + if (first_loop) { + value2 = promptValue("Veuillez saisir une valeur entiere avec laquelle l'operation sera effectuee ?"); + if (value2 == 0) break; + result = doOperation(choice, value1, value2); + first_loop = false; + } else { + value2 = promptValue("Veuillez saisir la prochaine valeur entiere avec laquelle l'operation sera effectuee sur l'ancien resultat ?"); + if (value2 == 0) break; + result = doOperation(choice, result, value2); + } + printf("Le resultat de l'operation choisie est %d\n\n", result); + } + + return 0; +}