From ac8499addb72883d78fdd3a3f47feab99a03ffcb Mon Sep 17 00:00:00 2001 From: Arkitu <85173315+Arkitu@users.noreply.github.com> Date: Mon, 6 Oct 2025 17:53:18 +0200 Subject: [PATCH] make borring version of dm2 to comply with school + make test only version to share with people --- dm2/dm2.c | 33 +++++--- dm2/dm2_borring.c | 191 ++++++++++++++++++++++++++++++++++++++++++++ dm2/dm2_test_only.c | 43 ++++++++++ 3 files changed, 256 insertions(+), 11 deletions(-) create mode 100644 dm2/dm2_borring.c create mode 100644 dm2/dm2_test_only.c diff --git a/dm2/dm2.c b/dm2/dm2.c index 6559b86..2f2bbe8 100644 --- a/dm2/dm2.c +++ b/dm2/dm2.c @@ -141,24 +141,32 @@ int sommeentiers(char str[]) { } int main() { - printf("-2/3 = %f\n\n", fraction(-2, 3)); + printf("-21/50 = %f\n\n", fraction(-21, 50)); printf("2004 %s bissextile\n", bissextile(2004) ? "est" : "n'est pas"); - printf("2100 %s bissextile\n\n", bissextile(2100) ? "est" : "n'est pas"); + printf("2042 %s bissextile\n", bissextile(2042) ? "est" : "n'est pas"); + printf("2077 %s bissextile\n", bissextile(2077) ? "est" : "n'est pas"); + printf("2100 %s bissextile\n", bissextile(2100) ? "est" : "n'est pas"); + printf("2400 %s bissextile\n\n", bissextile(2400) ? "est" : "n'est pas"); printf("Avec x=-3.716309026, 2.5x² - 2x + 0.04=%f\n\n", evalue((double[3]){0.04, -2., 2.5}, 3, -3.716309026)); - printf("min([2, 5, 89, 3]) = %d\n\n", ecartmin((int[4]){2, 5, 89, 3}, 4)); + printf("equartmin([324, 47, 89, 9]) = %d\n\n", + ecartmin((int[4]){324, 47, 89, 9}, 4)); - printf("Le premier nombre dans \"eia42snt-134eius34)\" est %d\n\n", - extraire("eia42snt-134eius34)")); + printf("Le premier nombre dans " + "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " + "est %d\n\n", + extraire("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); - printf("sommemajo([80, -2, -1])=%f\n\n", - sommemajo((double[3]){80., -2., -1.}, 3)); + printf("sommemajo([30.5, -2, -1, 10.5, 0, 1])=%f\n\n", + sommemajo((double[6]){30.5, -2., -1., 10.5, 0., 1.}, 6)); - printf("\"eia42snt-134eius34)\" a %d caractères différents\n\n", - nbdiff("eia42snt-134eius34)")); + printf("\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" a %d " + "caractères " + "différents\n\n", + nbdiff("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); printf("42 %s un palindrome\n", palindromeint(42) ? "est" : "n'est pas"); printf("123454321 %s un palindrome\n\n", @@ -169,6 +177,9 @@ int main() { printf("\"Kayak\" %s un palindrome\n\n", palindrome2("Kayak") ? "est" : "n'est pas"); - printf("La somme des entiers dans \"eia42snt-134eius34)\" est %d\n", - sommeentiers("eia42snt-134eius34)")); + printf( + "La somme des entiers dans " + "\"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/dm2_borring.c b/dm2/dm2_borring.c new file mode 100644 index 0000000..9f4d2a6 --- /dev/null +++ b/dm2/dm2_borring.c @@ -0,0 +1,191 @@ +// This is a modified version of the dm that sticks with what +// we are allowed to do (no fancy pointer arithmetic) +#include +#include +#include +#include +#include + +double fraction(int a, int b) { return (double)a / (double)b; } + +bool bissextile(int year) { + return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +double evalue(double coef[], int size, double x) { + double res = 0; + while (size > 0) { + size -= 1; + res *= x; + res += coef[size]; + } + return res; +} + +int ecartmin(int t[], int size) { + int min = abs(t[size - 1] - t[size - 2]); + while (size > 2) { + size -= 1; + int ecart = abs(t[size - 1] - t[size - 2]); + if (ecart < min) { + min = ecart; + } + } + return min; +} + +// Returns 0 if no integer has been detected +int extraire(char str[]) { + int i = 0; + while ((str[i] != '-' || (str[i + 1] <= '0' || str[i + 1] >= '9')) && + (str[i] <= '0' || str[i] >= '9')) { + if (str[i] == 0) { + return 0; + } + i += 1; + } + + int signe = 1 - (2 * (str[i] == '-')); + i += str[i] == '-'; + + int res = 0; + while (str[i] >= '0' && str[i] <= '9') { + res *= 10; + res += str[i] - '0'; + i += 1; + } + return res * signe; +} + +double sommemajo(double t[], int size) { + int signe = 0; + double pos = 0.; + double neg = 0.; + while (size > 0) { + size -= 1; + double x = t[size]; + if (x > 0) { + signe += 1; + pos += x; + } else if (x < 0) { + signe -= 1; + neg += x; + } + } + return (pos * (signe > 0)) + (neg * (signe < 0)); +} + +// Only works with ASCII +int nbdiff(char str[]) { + bool chars[126] = {false}; + int i = 0; + while (str[i]) { + chars[str[i] - 1] = true; + i += 1; + } + int count = 0; + char c = 1; + while (c < 126) { + count += chars[c]; + c += 1; + } + return count; +} + +bool palindromeint(int a) { + int temp = a; + int rev = 0; + while (temp) { + rev *= 10; + rev += temp % 10; + temp /= 10; + } + return a == rev; +} + +// Only works with alphabetical strings +bool palindrome2(char str[]) { + int size = strlen(str); + int i = 0; + while (size > 1) { + char c1 = str[i]; + c1 += ('a' - 'A') * (c1 <= 'Z'); + char c2 = str[i + size - 1]; + c2 += ('a' - 'A') * (c2 <= 'Z'); + if (c1 != c2) { + return false; + } + i += 1; + size -= 2; + } + return true; +} + +int sommeentiers(char str[]) { + int count = 0; + int i = 0; + while (true) { + while ((str[i] != '-' || (str[i + 1] <= '0' || str[i + 1] >= '9')) && + (str[i] <= '0' || str[i] >= '9')) { + if (str[i] == 0) { + return count; + } + i += 1; + } + + int signe = 1 - (2 * (str[i] == '-')); + i += str[i] == '-'; + + int res = 0; + while (str[i] >= '0' && str[i] <= '9') { + res *= 10; + res += str[i] - '0'; + i += 1; + } + count += signe * res; + } +} + +int main() { + printf("-21/50 = %f\n\n", fraction(-21, 50)); + + printf("2004 %s bissextile\n", bissextile(2004) ? "est" : "n'est pas"); + printf("2042 %s bissextile\n", bissextile(2042) ? "est" : "n'est pas"); + printf("2077 %s bissextile\n", bissextile(2077) ? "est" : "n'est pas"); + printf("2100 %s bissextile\n", bissextile(2100) ? "est" : "n'est pas"); + printf("2400 %s bissextile\n\n", bissextile(2400) ? "est" : "n'est pas"); + + printf("Avec x=-3.716309026, 2.5x² - 2x + 0.04=%f\n\n", + evalue((double[3]){0.04, -2., 2.5}, 3, -3.716309026)); + + printf("equartmin([324, 47, 89, 9]) = %d\n\n", + ecartmin((int[4]){324, 47, 89, 9}, 4)); + + printf("Le premier nombre dans " + "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " + "est %d\n\n", + extraire("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); + + printf("sommemajo([30.5, -2, -1, 10.5, 0, 1])=%f\n\n", + sommemajo((double[6]){30.5, -2., -1., 10.5, 0., 1.}, 6)); + + printf("\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" a %d " + "caractères " + "différents\n\n", + nbdiff("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); + + printf("42 %s un palindrome\n", palindromeint(42) ? "est" : "n'est pas"); + printf("123454321 %s un palindrome\n\n", + palindromeint(123454321) ? "est" : "n'est pas"); + + printf("\"eiasnteius\" %s un palindrome\n", + palindrome2("eiasnteius") ? "est" : "n'est pas"); + printf("\"Kayak\" %s un palindrome\n\n", + palindrome2("Kayak") ? "est" : "n'est pas"); + + printf( + "La somme des entiers dans " + "\"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/dm2_test_only.c b/dm2/dm2_test_only.c new file mode 100644 index 0000000..23bfe97 --- /dev/null +++ b/dm2/dm2_test_only.c @@ -0,0 +1,43 @@ +int main() { + printf("-21/50 = %f\n\n", fraction(-21, 50)); + + printf("2004 %s bissextile\n", bissextile(2004) ? "est" : "n'est pas"); + printf("2042 %s bissextile\n", bissextile(2042) ? "est" : "n'est pas"); + printf("2077 %s bissextile\n", bissextile(2077) ? "est" : "n'est pas"); + printf("2100 %s bissextile\n", bissextile(2100) ? "est" : "n'est pas"); + printf("2400 %s bissextile\n\n", bissextile(2400) ? "est" : "n'est pas"); + + printf("Avec x=-3.716309026, 2.5x² - 2x + 0.04=%f\n\n", + evalue((double[3]){0.04, -2., 2.5}, 3, -3.716309026)); + + printf("equartmin([324, 47, 89, 9]) = %d\n\n", + ecartmin((int[4]){324, 47, 89, 9}, 4)); + + printf("Le premier nombre dans " + "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " + "est %d\n\n", + extraire("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); + + printf("sommemajo([30.5, -2, -1, 10.5, 0, 1])=%f\n\n", + sommemajo((double[6]){30.5, -2., -1., 10.5, 0., 1.}, 6)); + + printf("\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" a %d " + "caractères " + "différents\n\n", + nbdiff("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); + + printf("42 %s un palindrome\n", palindromeint(42) ? "est" : "n'est pas"); + printf("123454321 %s un palindrome\n\n", + palindromeint(123454321) ? "est" : "n'est pas"); + + printf("\"eiasnteius\" %s un palindrome\n", + palindrome2("eiasnteius") ? "est" : "n'est pas"); + printf("\"Kayak\" %s un palindrome\n\n", + palindrome2("Kayak") ? "est" : "n'est pas"); + + printf( + "La somme des entiers dans " + "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " + "est %d\n", + sommeentiers("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); +} \ No newline at end of file