From 9cb070097ebf4692ae2bcb23e854a3e4ffdccd53 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Fri, 26 Sep 2025 12:24:19 +0200 Subject: Cours du 22 au 26 septembre --- .../structures des donn\303\251es/td/td2/exo3.c" | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "semestre 3/structures des donn\303\251es/td/td2/exo3.c" (limited to 'semestre 3/structures des données/td/td2/exo3.c') diff --git "a/semestre 3/structures des donn\303\251es/td/td2/exo3.c" "b/semestre 3/structures des donn\303\251es/td/td2/exo3.c" new file mode 100644 index 0000000..55b9242 --- /dev/null +++ "b/semestre 3/structures des donn\303\251es/td/td2/exo3.c" @@ -0,0 +1,56 @@ +#include +#include +#include "LDC.h" + +int strToInt(char** s){ + int n = -1; + while (*s && **s != '\0' && **s - '0' < 10 && **s - '0' >= 0){ + if (n == -1) n = 0; + n *= 10; + n += **s - '0'; + (*s)++; + } + // avoid skipping the char is it was not converted + if (n >= 0) (*s)--; + return n; +} + +int algo(char* expr){ + char* c = expr; + ChainedList* stack = creerListe(); + while (c && *c != '\0'){ + if (*c == ')'){ + int o2 = stack->last->val; + supprimerFin(stack); + char op = (char) stack->last->val; + supprimerFin(stack); + int o1 = stack->last->val; + supprimerFin(stack); + + int res = 0; + if (op == '+'){ + res += o1 + o2; + } else if (op == '-'){ + res += o1 - o2; + } else if (op == '*'){ + res += o1 * o2; + } else if (op == '/'){ + res += o1 / o2; + } + insererEnFin(stack, res); + } else if (*c != '(' && *c != ')'){ + int n = strToInt(&c); + insererEnFin(stack, n >= 0 ? n : (int) *c); + } + c++; + } + int res = stack->first->val; + desalloueListe(stack); + return res; +} + +void main(){ + char* s = "(((4+2)-5)*4)"; + int res = algo(s); + printf("%s = %d\n", s, res); +} -- cgit v1.2.3