diff --git a/Ex3/Exercice3.pdf b/Ex3/Exercice3.pdf new file mode 100644 index 0000000..f1d25ac Binary files /dev/null and b/Ex3/Exercice3.pdf differ diff --git a/Ex4/EX4.pdf b/Ex4/EX4.pdf new file mode 100644 index 0000000..226439f Binary files /dev/null and b/Ex4/EX4.pdf differ diff --git a/Ex4/Exercice4.c b/Ex4/Exercice4.c new file mode 100644 index 0000000..bf8543f --- /dev/null +++ b/Ex4/Exercice4.c @@ -0,0 +1,89 @@ +#include +#include + +// Fonction pour trier un tableau 1D +void sort_1d(int* array, int length) { + for (int i = 0; i < length - 1; i++) { + for (int j = 0; j < length - i - 1; j++) { + if (array[j] > array[j + 1]) { + int temp = array[j]; + array[j] = array[j + 1]; + array[j + 1] = temp; + } + } + } +} + +// Fonction pour calculer la somme d'un tableau 1D +int sum_1d(int* array, int length) { + int sum = 0; + for (int i = 0; i < length; i++) { + sum += array[i]; + } + return sum; +} + +// Fonction pour trier un tableau 2D basé sur la somme des lignes +void sort_2d(int** array, int rows, int cols) { + // Trier chaque ligne individuellement + for (int i = 0; i < rows; i++) { + sort_1d(array[i], cols); + } + + // Trier les lignes selon leur somme + for (int i = 0; i < rows - 1; i++) { + for (int j = 0; j < rows - i - 1; j++) { + if (sum_1d(array[j], cols) > sum_1d(array[j + 1], cols)) { + int* temp = array[j]; + array[j] = array[j + 1]; + array[j + 1] = temp; + } + } + } +} + +// Fonction pour afficher un tableau 2D +void print_2d(int** array, int rows, int cols) { + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + printf("%d ", array[i][j]); + } + printf("\n"); + } +} + +int main() { + // Exemple : Tableau 2D + int rows = 3, cols = 3; + int** array = (int**)malloc(rows * sizeof(int*)); + for (int i = 0; i < rows; i++) { + array[i] = (int*)malloc(cols * sizeof(int)); + } + + // Initialiser le tableau (exemple donné) + int data[3][3] = {{0, 3, 2}, {9, 4, 5}, {4, 1, 3}}; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + array[i][j] = data[i][j]; + } + } + + // Affichage du tableau original + printf("Tableau original :\n"); + print_2d(array, rows, cols); + + // Trier le tableau + sort_2d(array, rows, cols); + + // Affichage du tableau trié + printf("\nTableau trié :\n"); + print_2d(array, rows, cols); + + // Libérer la mémoire + for (int i = 0; i < rows; i++) { + free(array[i]); + } + free(array); + + return 0; +} diff --git a/Ex4/Exercice4.py b/Ex4/Exercice4.py new file mode 100644 index 0000000..52c380d --- /dev/null +++ b/Ex4/Exercice4.py @@ -0,0 +1,47 @@ +def bubble_sort(array): + """ + Implémentation du tri à bulles pour un tableau 1D. + """ + n = len(array) + for i in range(n): + for j in range(0, n - i - 1): + if array[j] > array[j + 1]: + array[j], array[j + 1] = array[j + 1], array[j] + + +def bubble_sort_by_key(array, key_func): + """ + Implémentation du tri à bulles pour un tableau 2D ou supérieur + basé sur une fonction clé. + """ + n = len(array) + for i in range(n): + for j in range(0, n - i - 1): + if key_func(array[j]) > key_func(array[j + 1]): + array[j], array[j + 1] = array[j + 1], array[j] + + +def sort_nd_array(array): + """ + Trie récursivement un tableau multidimensionnel. + """ + if isinstance(array[0], list): + # Trier récursivement chaque sous-dimension + for sub_array in array: + sort_nd_array(sub_array) + # Trier cette dimension en fonction de la somme des sous-tableaux + bubble_sort_by_key(array, key_func=lambda x: sum(sum(y) if isinstance(y, list) else y for y in x)) + else: + # Si c'est un tableau 1D, appliquer le tri à bulles + bubble_sort(array) + + +# Exemple pour un tableau 2D +array_2d = [[0, 3, 2], [9, 4, 5], [4, 1, 3]] +sort_nd_array(array_2d) +print("Tableau trié 2D :", array_2d) # Résultat attendu : [[0, 2, 3], [1, 3, 4], [4, 5, 9]] + +# Exemple pour un tableau 3D +array_3d = [[[3, 2], [1, 4]], [[9, 8], [2, 1]], [[5, 5], [3, 3]]] +sort_nd_array(array_3d) +print("Tableau trié 3D :", array_3d) \ No newline at end of file