dm3 exo1-6

This commit is contained in:
Arkitu 2025-10-21 16:34:47 +02:00
parent c4ce3e0d68
commit 19a80513a2
3 changed files with 253 additions and 1 deletions

View File

@ -1,3 +1,4 @@
#include "test_dm1.h"
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
@ -182,4 +183,4 @@ int main() {
"\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" "
"est %d\n", "est %d\n",
sommeentiers("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); sommeentiers("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ"));
} }

175
dm2/test_dm1.h Normal file
View File

@ -0,0 +1,175 @@
#ifndef TEST_DM1
#define TEST_DM1
#include <stdbool.h>
#include <stdio.h>
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

76
dm3/dm3.c Normal file
View File

@ -0,0 +1,76 @@
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
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;
}