diff --git a/exam/string example/Makefile b/exam/chained_split_string_test/Makefile
similarity index 100%
rename from exam/string example/Makefile
rename to exam/chained_split_string_test/Makefile
diff --git a/exam/chained_split_string_test/main.c b/exam/chained_split_string_test/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..6486d2e2e3edb637253784ac2371d317ff6fc381
--- /dev/null
+++ b/exam/chained_split_string_test/main.c
@@ -0,0 +1,83 @@
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct _element {
+  char c;
+  struct _element *next;
+} element;
+
+void push(element **chain, char data) {
+
+  element *tmp = malloc(sizeof(element));
+  tmp->c = data;
+  tmp->next = *chain;
+  *chain = tmp;
+}
+
+void fill_chain(element **chain, char *str, int len) {
+  for (int i = len; i >= 0; i--) {
+    push(chain, str[i]);
+  }
+}
+
+void chain_split(element **chain1, element **chain2, int len) {
+  int len1 = len / 2;
+  int len2 = len - len1;
+  element *current = *chain1;
+  for (int i = 0; i < len1-1; i++) {
+    current = current->next;
+  }
+  chain2=&current;
+  current=NULL;
+  printf("\n\n\n\n %c \n\n\n\n ",current->c);
+}
+
+void chain_delete(element **ch) {
+
+  element *delete;
+
+  while ((*ch)->next != NULL) {
+    delete = *ch;
+    *ch = (*ch)->next;
+    free(delete);
+  }
+  // free(*ch);
+}
+
+void print_chain(element *ch) {
+
+  while (ch != NULL) {
+    printf("%c\n", ch->c);
+    ch = ch->next;
+  }
+  printf("\n");
+}
+
+int main() {
+
+  char str[16];
+  scanf("%s", str);
+  int len = strlen(str);
+
+  element *chain1;
+  element *chain2;
+  fill_chain(&chain1, str, len);
+  chain_split(&chain1, &chain2, len);
+  // print_chain(chain);
+  // chain_delete(&chain);
+
+  //   for (int i = 0; i < 2; i++) {
+  //     char str[16];
+  //     scanf("%s", str);
+  //     int len = strlen(str);
+
+  //     element* chain;
+  //     fill_chain(&chain, str, len);
+  //     print_chain(chain);
+  //   }
+  return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/exam/ex1/main.c b/exam/ex1/main.c
index 620b64ced901924e7dafafa55784ff1c5b8ff2a5..aff730e20c24acd33463b3fead0bcb48248ac21c 100644
--- a/exam/ex1/main.c
+++ b/exam/ex1/main.c
@@ -2,16 +2,55 @@
 #include <stdlib.h>
 #include <string.h>
 
-int main(){
-    
-    int size=3;
-    int arr[size];
-    for(int i=0;i<size;i++){
-        scanf("%d",&arr[i]);
-    }
-    for(int i=0;i<size;i++){
-        printf("%d\n",arr[i]);
-    }
-
-    return EXIT_SUCCESS;
+typedef struct {
+  float r;
+  float d;
+} dual;
+
+dual dual_init(float r, float d) {
+  dual new;
+  new.r = r;
+  new.d = d;
+  return new;
+}
+
+dual dual_add(dual a, dual b) {
+  dual res;
+  res.r = a.r + b.r;
+  res.d = b.d + b.d;
+  return res;
+}
+
+dual dual_mult(dual a, dual b) {
+  dual res;
+  res.r = a.r * b.r;
+  res.d = a.r * b.d + a.d * b.r;
+  return res;
+}
+
+void dual_print(dual a) { printf("%.3f %.3f\n", a.r, a.d); }
+
+dual dual_cube(dual a) {
+  dual res;
+  res.r = a.r * a.r * a.r;
+  res.d = 3 * a.d * a.r * a.r;
+  return res;
+}
+
+int main() {
+
+  int size = 2;
+  dual arr[size];
+  for (int i = 0; i < size; i++) {
+    float r;
+    float d;
+    scanf("%f %f", &r, &d);
+    arr[i] = dual_init(r, d);
+  }
+  printf("\n");
+  dual_print(dual_add(arr[0], arr[1]));
+  dual_print(dual_mult(arr[0], arr[1]));
+  dual_print(dual_cube(arr[0]));
+
+  return EXIT_SUCCESS;
 }
\ No newline at end of file
diff --git a/exam/ex2/main.c b/exam/ex2/main.c
index 620b64ced901924e7dafafa55784ff1c5b8ff2a5..67c240300aaf29d862e574bde3852e7bfd095673 100644
--- a/exam/ex2/main.c
+++ b/exam/ex2/main.c
@@ -2,16 +2,37 @@
 #include <stdlib.h>
 #include <string.h>
 
-int main(){
-    
-    int size=3;
-    int arr[size];
-    for(int i=0;i<size;i++){
-        scanf("%d",&arr[i]);
+void split(char* str,char *str1,char *str2){
+    int len=strlen(str);
+    int len1=len/2;
+    int len2=len-len1;
+
+    for(int i=0;i<len1;i++){
+        str1[i]=str[i];
     }
-    for(int i=0;i<size;i++){
-        printf("%d\n",arr[i]);
+    str1[len1]='\0';
+
+    for(int i=0;i<len2;i++){
+        str2[i]=str[i+len1];
     }
+    str2[len2]='\0';
+}
+
+//j'ai fini par faire avec des tableaux
+int main(){
 
+    char str1[2][80];
+    char str2[2][80];
+
+    for(int i=0;i<2;i++){
+        char str[81];
+        scanf("%s",str);
+        split(str,str1[i],str2[i]);
+
+    }
+    printf("\n");
+    for(int i=0;i<2;i++){
+        printf("1: %s 2: %s\n",str1[i],str2[i]);
+    }
     return EXIT_SUCCESS;
 }
\ No newline at end of file
diff --git a/exam/ex3/main.c b/exam/ex3/main.c
index 620b64ced901924e7dafafa55784ff1c5b8ff2a5..ad9f4e2d0c3757a00feb14f2af37c1d58abfc04c 100644
--- a/exam/ex3/main.c
+++ b/exam/ex3/main.c
@@ -2,16 +2,46 @@
 #include <stdlib.h>
 #include <string.h>
 
-int main(){
-    
-    int size=3;
-    int arr[size];
-    for(int i=0;i<size;i++){
-        scanf("%d",&arr[i]);
+void swap(float *a, float *b) {
+  float tmp = *a;
+  *a = *b;
+  *b = tmp;
+}
+
+void sort(float *arr, int nitems) {
+
+  for (int j = nitems - 1; j > 1; j--) {
+
+    for (int i = 0; i < j; i++) {
+      if (arr[i] > arr[i + 1]) {
+        swap(&arr[i], &arr[i + 1]);
+      }
     }
-    for(int i=0;i<size;i++){
-        printf("%d\n",arr[i]);
+  }
+}
+
+int main() {
+  float money;
+  float bill = 0;
+  int size = 10;
+  float list[size];
+  char dummy[80];
+
+  scanf("%f", &money);
+
+  for (int i = 0; i < size; i++) {
+    scanf("%s %f", dummy, &list[i]);
+  }
+
+  sort(list, size);
+
+  for (int i = 0; i < size; i++) {
+    if (list[i] < money) {
+      bill += list[i];
+      money -= list[i];
     }
+  }
+  printf("\n%.1f\n", bill);
 
-    return EXIT_SUCCESS;
+  return EXIT_SUCCESS;
 }
\ No newline at end of file
diff --git a/exam/ex4/main.c b/exam/ex4/main.c
index 620b64ced901924e7dafafa55784ff1c5b8ff2a5..27364ce489468c5d623d5540cc803bfb004c9747 100644
--- a/exam/ex4/main.c
+++ b/exam/ex4/main.c
@@ -2,16 +2,36 @@
 #include <stdlib.h>
 #include <string.h>
 
-int main(){
-    
-    int size=3;
-    int arr[size];
-    for(int i=0;i<size;i++){
-        scanf("%d",&arr[i]);
-    }
-    for(int i=0;i<size;i++){
-        printf("%d\n",arr[i]);
+typedef struct _stalag {
+  int n; // longueur
+  int *body;
+} stalag;
+
+void stalag_init(int crt, stalag *s) {
+  if (crt < s->n) {
+    if (s->n < 3) {
+      s->body[crt] = 1;
+    } else {
+      s->body[crt] = s->body[crt - 1] + s->body[crt - 2] + s->body[crt - 3];
     }
+    stalag_init(crt + 1, s);
+  }
+}
+
+int main() {
+
+  int size = 10;
+  int input[size];
+  stalag st[size];
+
+  for (int i = 0; i < size; i++) {
+
+    scanf("%d", &input[i]);
+    st[i].body = malloc(input[i] * sizeof(int*));
+    st[i].n=input[i];
+    stalag_init(0, &st[i]);
+    //print, pas le temps de deboguer...
+  }
 
-    return EXIT_SUCCESS;
-}
\ No newline at end of file
+  return EXIT_SUCCESS;
+}
diff --git a/exam/ex5/main.c b/exam/ex5/main.c
index 620b64ced901924e7dafafa55784ff1c5b8ff2a5..c98434e6ec696f5a1523fd2b8d03a43ad6632601 100644
--- a/exam/ex5/main.c
+++ b/exam/ex5/main.c
@@ -2,16 +2,32 @@
 #include <stdlib.h>
 #include <string.h>
 
+
+int count_longest_down(int size, float arr[size]){
+    int max=0;
+    int current=0;
+    for(int i=0;i<size-1;i++){
+        if(arr[i]>arr[i+1]){
+            current++;
+        }else{
+            if(current>max){
+                max=current;
+            }
+            current=0;
+        }
+    }
+    return max;
+}
+
 int main(){
     
-    int size=3;
-    int arr[size];
-    for(int i=0;i<size;i++){
-        scanf("%d",&arr[i]);
-    }
+
+    int size=15;
+    float arr[size];
     for(int i=0;i<size;i++){
-        printf("%d\n",arr[i]);
+        scanf("%f",&arr[i]);
     }
+    printf("\nnombre: %d\n",count_longest_down(size, arr));
 
     return EXIT_SUCCESS;
 }
\ No newline at end of file
diff --git a/exam/ex6/Makefile b/exam/ex6/Makefile
deleted file mode 100644
index 7307845ff0674c2615c59d2cef338053fa90e273..0000000000000000000000000000000000000000
--- a/exam/ex6/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-main.x: main.o
-	gcc -o $@ $< -fsanitize=address -fsanitize=leak
-
-main.o: main.c 
-	gcc -c -Wall -Wextra -pedantic -fsanitize=address -fsanitize=leak $<
-
-clean:
-	rm -f *.o *.x
-
-rebuild: clean main
\ No newline at end of file
diff --git a/exam/ex6/main.c b/exam/ex6/main.c
deleted file mode 100644
index 620b64ced901924e7dafafa55784ff1c5b8ff2a5..0000000000000000000000000000000000000000
--- a/exam/ex6/main.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-int main(){
-    
-    int size=3;
-    int arr[size];
-    for(int i=0;i<size;i++){
-        scanf("%d",&arr[i]);
-    }
-    for(int i=0;i<size;i++){
-        printf("%d\n",arr[i]);
-    }
-
-    return EXIT_SUCCESS;
-}
\ No newline at end of file
diff --git a/exam/string example/main.c b/exam/string example/main.c
deleted file mode 100644
index 263c622f29fb16864350a97076a5f59401a6fed2..0000000000000000000000000000000000000000
--- a/exam/string example/main.c	
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-// Ce programme prend en argument 2 chaînes de caractères sur des lignes
-// séparées (longueur max de 80), les sépare au milieu et retourne les 4
-// chaînes chacune sur une nouvelle ligne (si la longueur N est paire on
-// sépare en 2 chaînes de longueur N/2, sinon la première aura une longueur
-// de N/2 et la seconde N/2+1).
-
-// abcdefgh
-// asdfghjkl
-// abcd
-// efgh
-// asdf
-// ghjkl
-
-void split(char* str,char *str1,char *str2){
-    int len=strlen(str);
-    int len1=len/2;
-    int len2=len-len1;
-
-    for(int i=0;i<len1;i++){
-        str1[i]=str[i];
-    }
-    str1[len1]='\0';
-
-    for(int i=0;i<len2;i++){
-        str2[i]=str[i+len1];
-    }
-    str2[len2]='\0';
-}
-
-int main(){
-
-    char str1[2][80];
-    char str2[2][80];
-
-    for(int i=0;i<2;i++){
-        char str[81];
-        scanf("%s",str);
-        split(str,str1[i],str2[i]);
-
-     
-    }
-    printf("\n");
-    for(int i=0;i<2;i++){
-        printf("%s\n%s\n",str1[i],str2[i]);
-    }
-    return EXIT_SUCCESS;
-}
\ No newline at end of file