From 19a80513a28952f27dcb90d3d68014bc69cb1c51 Mon Sep 17 00:00:00 2001 From: Arkitu Date: Tue, 21 Oct 2025 16:34:47 +0200 Subject: [PATCH] dm3 exo1-6 --- dm2/dm2.c | 3 +- dm2/test_dm1.h | 175 +++++++++++++++++++++++++++++++++++++++++++++++++ dm3/dm3.c | 76 +++++++++++++++++++++ 3 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 dm2/test_dm1.h create mode 100644 dm3/dm3.c diff --git a/dm2/dm2.c b/dm2/dm2.c index c8b7c23..addaef3 100644 --- a/dm2/dm2.c +++ b/dm2/dm2.c @@ -1,3 +1,4 @@ +#include "test_dm1.h" #include #include #include @@ -182,4 +183,4 @@ int main() { "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " "est %d\n", sommeentiers("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); -} \ No newline at end of file +} diff --git a/dm2/test_dm1.h b/dm2/test_dm1.h new file mode 100644 index 0000000..015e219 --- /dev/null +++ b/dm2/test_dm1.h @@ -0,0 +1,175 @@ +#ifndef TEST_DM1 +#define TEST_DM1 + +#include +#include + +double fraction (int a, int b); +bool bissextile (int a); +double evalue (double* arr, int size, double x); +int ecartmin (int* arr, int size); +int extraire (char* str); +double sommemajo (double* arr, int size); +int nbdiff (char* str); +bool palindromeint(int a); +bool palindrome2 (char* str); +int sommeentiers(char* str); + +#define FLOAT_PRECISION 0.001 +inline static bool f_cmp(double f1, double f2){ + return (f1-f2 < FLOAT_PRECISION && f1-f2 > -FLOAT_PRECISION); +} + +#define COLOR_RED "\033[0;31m" +#define COLOR_BLUE "\033[0;36m" +#define COLOR_YELLOW "\033[0;33m" +#define COLOR_RESET "\033[0m" + +#define MSG_TEST(EX) printf("Lancement des tests sur l'exercice %d ...\n", EX); +#define MSG_RES(a, b) \ + if (a!=b) printf(COLOR_YELLOW);\ + else printf(COLOR_BLUE);\ + printf("Résultats: %d/%d" COLOR_RESET, a, b); + + +// Pour les tests: si A n'est pas égal à B alors affiche A (format: %d le plus souvent) et la valeur supposée +#define TEST(A, B, format) \ + j+=1;\ + if (A!=B) \ + printf(COLOR_RED "\tEchec du test: "#A" à retourné "#format" au lieu de "#B".\n" COLOR_RESET, A);\ + else i+=1; + +// Pour les tests sur des flotants +#define TEST_F(A, B) \ + j+=1;\ + if (!f_cmp((A), (B))) {\ + printf(COLOR_RED "\tEchec du test: "#A" à retourné %f au lieu de "#B" .\n" COLOR_RESET, A);\ + } else i+=1; + +#define NEW_TEST(F,N, CORPS)\ + static void F(){\ + MSG_TEST((int) N);\ + int i=0; int j=0;\ + {CORPS} \ + MSG_RES(i, j);\ + printf("\n");\ + } + +NEW_TEST(TEST_EX1, 1, + + TEST_F(fraction(2, 1), 2.0); + TEST_F(fraction(5, 2), 2.5); + TEST_F(fraction(5, -2), -2.5); + TEST_F(fraction(-5, -2), 2.5); + TEST_F(fraction(75, 25), 3.0); + TEST_F(fraction(-1, 3), -0.33333); + +) + +NEW_TEST( TEST_EX2, 2, + + TEST(bissextile(2200), false, %d); + TEST(bissextile(2001), false, %d); + TEST(bissextile(2016), true, %d); + TEST(bissextile(2052), true, %d); + +) + +NEW_TEST( TEST_EX3, 3, + + TEST_F(evalue((double[]){3.5, 6.2, -9, 1}, 4, 1), 1.7); + TEST_F(evalue((double[]){3.5, 6.2, -9, 1}, 4, -5), -377.5); + TEST_F(evalue((double[]){3.5, 6.2, -9, 1}, 4, 3), -31.9); + TEST_F(evalue((double[]){-1}, 1, 30), -1.0); + TEST_F(evalue((double[]){0, 0, 1}, 3, 4), 16); + TEST_F(evalue((double[]){0, 0, 1}, 3, -4), 16); + +) + +NEW_TEST( TEST_EX4, 4, + + TEST(ecartmin((int[]){-5, -7, 7}, 3), 2, %d); + TEST(ecartmin((int[]){0, -7, 5}, 3), 7, %d); + TEST(ecartmin((int[]){-2, 7, 20}, 3), 9, %d); + TEST(ecartmin((int[]){0, 1}, 2), 1, %d); + TEST(ecartmin((int[]){-1, 1}, 2), 2, %d); + +) + +NEW_TEST( TEST_EX5, 5, + + TEST(extraire("1"), 1, %d); + TEST(extraire("-1"), -1, %d); + TEST(extraire("jaoefjsaeijfoi-4t5f ej"), -4, %d); + TEST(extraire("f ejosijf - feauhf --5"), -5, %d); + TEST(extraire("f e- 5"), 5, %d); + TEST(extraire("120000"), 120000, %d); + TEST(extraire("-09"), -9,%d); + +) + +NEW_TEST( TEST_EX6, 6, + + TEST_F(sommemajo((double[]){-5, 2, -1, 5}, 4), 0); + TEST_F(sommemajo((double[]){}, 0), 0); + TEST_F(sommemajo((double[]){-5, 2, -1}, 3), -6); + TEST_F(sommemajo((double[]){-5, 0, 4}, 3), 0); + TEST_F(sommemajo((double[]){5, 0, 4}, 3), 9); + +) + +NEW_TEST( TEST_EX7, 7, + + TEST(nbdiff(""), 0, %d); + TEST(nbdiff("Aa"), 2, %d); + TEST(nbdiff("ab!de\tghijklmnopqrstuvwxyz123"), 29, %d); + TEST(nbdiff("aaaaaaabeabbaa"), 3, %d); + TEST(nbdiff("123 abcABC"), 10, %d); + +) + +NEW_TEST( TEST_EX8, 8, + + TEST(palindromeint(1), true, %d); + TEST(palindromeint(12), false, %d); + TEST(palindromeint(111), true, %d); + TEST(palindromeint(0), true, %d); + TEST(palindromeint(101), true, %d); + TEST(palindromeint(110), false, %d); + TEST(palindromeint(53735), true, %d); + TEST(palindromeint(120944212), false, %d); + +) + +NEW_TEST( TEST_EX9, 9, + + TEST(palindrome2(""), true, %d); + TEST(palindrome2("a"), true, %d); + TEST(palindrome2("1"), true, %d); + TEST(palindrome2("aba"), true, %d); + TEST(palindrome2("aaa"), true, %d); + TEST(palindrome2("aa"), true, %d); + TEST(palindrome2("a1"), false, %d); + TEST(palindrome2("a|aj"), false, %d); + TEST(palindrome2("a|a"), true, %d); + TEST(palindrome2("aajj"), false, %d); + TEST(palindrome2("agoijseioj"), false, %d); + +) + +NEW_TEST(TEST_EX10, 10, + + TEST(sommeentiers("5-8"), -3,%d); + TEST(sommeentiers("5-8+4"), 1,%d); + TEST(sommeentiers("-5 faoeih 6 87.2 -280"), -190,%d); + TEST(sommeentiers("-09 + ++-+ 0.3"), -6,%d); + +) + +void RUN_TESTS(){ + TEST_EX1(); TEST_EX2(); TEST_EX3(); TEST_EX4(); TEST_EX5(); + TEST_EX6(); TEST_EX7(); TEST_EX8(); TEST_EX9(); TEST_EX10(); + return; +} + +#endif // TEST_DM1 diff --git a/dm3/dm3.c b/dm3/dm3.c new file mode 100644 index 0000000..c73edd1 --- /dev/null +++ b/dm3/dm3.c @@ -0,0 +1,76 @@ +#include +#include +#include +#include + +int spitze(const bool t[], int size) { + for (int i = 0; i < size; i += 1) { + if (t[0] ^ t[i]) { + return i + 1; + } + } + return size; +} + +bool nul(const bool t[], int size) { + while (size > 0 && !t[size - 1]) { + size -= 1; + } + int count = 0; + for (int i = 0; i < size; i += 1) { + count += t[i]; + if (count <= i / 2) { + return false; + } + } + return true; +} + +double modfloat(double a, double b) { + int q = (int)(a / b); + return a - (double)(b * q); +} + +void minmax(const int t[], int size, int *min, int *max) { + if (size) { + *min = t[0]; + *max = t[0]; + } + for (int i = 1; i < size; i += 1) { + if (t[i] < *min) { + *min = t[i]; + } else if (t[i] > *max) { + *max = t[i]; + } + } +} + +int medianemax(const int t[], int size) { + if (!size) { + return 0; + } + bool forward = true; + int min = 0; + int max = size - 1; + while (min < max) { + if (forward) { + min += 1; + if (t[min] >= t[max]) { + forward = false; + } + } else { + max -= 1; + if (t[max] >= t[min]) { + forward = true; + } + } + } + return min; +} + +void derive(double t[], int size) { + for (int i = 1; i < size; i += 1) { + t[i - 1] = i * t[i]; + } + t[size - 1] = 0; +}