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=¤t; + 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