From b0a519004be5aaa761ef38bbcc0950b9e547512f Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Mon, 25 Oct 2021 17:15:37 +0200 Subject: [PATCH] added all makefiles and .gitignores --- source_codes/Makefile | 9 + source_codes/loops_tests/.gitignore | 5 + source_codes/loops_tests/Makefile | 18 ++ source_codes/pointeurs/.gitignore | 1 + source_codes/pointeurs/Makefile | 18 ++ .../pointeurs/string_deep_shallow_copy.c | 90 +++---- source_codes/recursivity/rec_fibonacci.c | 34 ++- .../refactor_with_functions/.gitignore | 13 + source_codes/refactor_with_functions/Makefile | 18 ++ .../chess_queen_refactored_part.c | 111 ++++---- source_codes/sorting/.gitignore | 6 + source_codes/sorting/Makefile | 36 +++ source_codes/structures/.gitignore | 2 + source_codes/structures/Makefile | 18 ++ source_codes/structures/fractions.c | 254 +++++++++-------- source_codes/structures/fractions_part.c | 255 +++++++++--------- source_codes/tableaux_1d/.gitignore | 6 + source_codes/tableaux_1d/Makefile | 18 ++ source_codes/tableaux_1d/tri_select_ebauche.c | 74 ++--- source_codes/tableaux_2d/.gitignore | 4 + source_codes/tableaux_2d/Makefile | 27 ++ source_codes/tableaux_2d/chess_queen.c | 118 ++++---- source_codes/tableaux_2d/chess_queen_part.c | 111 ++++---- 23 files changed, 755 insertions(+), 491 deletions(-) create mode 100644 source_codes/Makefile create mode 100644 source_codes/loops_tests/.gitignore create mode 100644 source_codes/loops_tests/Makefile create mode 100644 source_codes/pointeurs/.gitignore create mode 100644 source_codes/pointeurs/Makefile create mode 100644 source_codes/refactor_with_functions/.gitignore create mode 100644 source_codes/refactor_with_functions/Makefile create mode 100644 source_codes/sorting/.gitignore create mode 100644 source_codes/sorting/Makefile create mode 100644 source_codes/structures/.gitignore create mode 100644 source_codes/structures/Makefile create mode 100644 source_codes/tableaux_1d/.gitignore create mode 100644 source_codes/tableaux_1d/Makefile create mode 100644 source_codes/tableaux_2d/.gitignore create mode 100644 source_codes/tableaux_2d/Makefile diff --git a/source_codes/Makefile b/source_codes/Makefile new file mode 100644 index 0000000..0ff2c06 --- /dev/null +++ b/source_codes/Makefile @@ -0,0 +1,9 @@ +TOPTARGETS := all clean + +SUBDIRS := $(wildcard */.) + +$(TOPTARGETS): $(SUBDIRS) +$(SUBDIRS): + $(MAKE) -C $@ $(MAKECMDGOALS) + +.PHONY: $(TOPTARGETS) $(SUBDIRS) diff --git a/source_codes/loops_tests/.gitignore b/source_codes/loops_tests/.gitignore new file mode 100644 index 0000000..0a63c70 --- /dev/null +++ b/source_codes/loops_tests/.gitignore @@ -0,0 +1,5 @@ +factorielle +ppcm_bis +nb1er +pgcd +ppcm diff --git a/source_codes/loops_tests/Makefile b/source_codes/loops_tests/Makefile new file mode 100644 index 0000000..75f84c9 --- /dev/null +++ b/source_codes/loops_tests/Makefile @@ -0,0 +1,18 @@ +CC:=gcc +SAN:=-fsanitize=address +CFLAGS:=-Wall -Wextra -pedantic -g $(SAN) +LDFLAGS:=-lm $(SAN) + +EXECS := $(shell find . -type f -iname '*.c' | sed 's/\.c//g') + +all: $(EXECS) + +$(EXECS): %: %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +.PHONY: clean all + +clean: + rm -f *.o $(EXECS) .gitignore + diff --git a/source_codes/pointeurs/.gitignore b/source_codes/pointeurs/.gitignore new file mode 100644 index 0000000..7bf15f4 --- /dev/null +++ b/source_codes/pointeurs/.gitignore @@ -0,0 +1 @@ +string_deep_shallow_copy diff --git a/source_codes/pointeurs/Makefile b/source_codes/pointeurs/Makefile new file mode 100644 index 0000000..75f84c9 --- /dev/null +++ b/source_codes/pointeurs/Makefile @@ -0,0 +1,18 @@ +CC:=gcc +SAN:=-fsanitize=address +CFLAGS:=-Wall -Wextra -pedantic -g $(SAN) +LDFLAGS:=-lm $(SAN) + +EXECS := $(shell find . -type f -iname '*.c' | sed 's/\.c//g') + +all: $(EXECS) + +$(EXECS): %: %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +.PHONY: clean all + +clean: + rm -f *.o $(EXECS) .gitignore + diff --git a/source_codes/pointeurs/string_deep_shallow_copy.c b/source_codes/pointeurs/string_deep_shallow_copy.c index 588cb71..280969f 100644 --- a/source_codes/pointeurs/string_deep_shallow_copy.c +++ b/source_codes/pointeurs/string_deep_shallow_copy.c @@ -2,71 +2,65 @@ #include <stdlib.h> typedef struct _chaine { - char* str; - int len; + char *str; + int len; } chaine; -int length(char* phrase) { - if (NULL == phrase) return -1;; - int len = 0; - while (0 != phrase[len]) { - len++; - } - return len; +int length(char *phrase) { + if (NULL == phrase) { + return -1; + } + int len = 0; + while (0 != phrase[len]) { + len++; + } + return len; } -chaine chaine_build(char* phrase) { - chaine ch; - ch.len = length(phrase); - ch.str = malloc((ch.len+1)*sizeof(char)); - for (int i=0;i<ch.len;i++) { - ch.str[i] = phrase[i]; - } - return ch; +chaine chaine_build(char *phrase) { + chaine ch; + ch.len = length(phrase); + ch.str = malloc((ch.len + 1) * sizeof(char)); + for (int i = 0; i < ch.len; i++) { + ch.str[i] = phrase[i]; + } + return ch; } chaine deep_copy(chaine ch) { - return chaine_build(ch.str); + return chaine_build(ch.str); } // Dangereux, car plusieurs pointeurs sur le même tableau de caractères !!! // A éviter !!! chaine shallow_copy(chaine ch) { - chaine cpy; - cpy.len = ch.len; - cpy.str = ch.str; - return cpy; + chaine cpy; + cpy.len = ch.len; + cpy.str = ch.str; + return cpy; } -// S'il y a plusieurs pointeurs sur le même tableau de caractères, +// S'il y a plusieurs pointeurs sur le même tableau de caractères, // les autres pointeurs ne seront pas mis à NULL -void chaine_free(chaine* ch) { - if (NULL != ch->str) - free(ch->str); - ch->str = NULL; - } - ch->len = -1; +void chaine_free(chaine *ch) { + if (NULL != ch->str) { + free(ch->str); + ch->str = NULL; + } + ch->len = -1; } void main() { - char* tutu = malloc(10*sizeof(char)); - for (int i=0;i<6;i++) tutu[i] = 'b'; - tutu[6] = 0; - chaine ch = chaine_build(tutu); - chaine tmp = deep_copy(ch); - ch.str[0] = 'a'; - printf("%d\n",ch.len); - printf("%s\n",ch.str); - printf("%d\n",tmp.len); - printf("%s\n",tmp.str); + char *tutu = malloc(10 * sizeof(char)); + for (int i = 0; i < 6; i++) + tutu[i] = 'b'; + tutu[6] = 0; + chaine ch = chaine_build(tutu); + chaine tmp = deep_copy(ch); + ch.str[0] = 'a'; + printf("%d\n", ch.len); + printf("%s\n", ch.str); + printf("%d\n", tmp.len); + printf("%s\n", tmp.str); } - - - - - - - - - diff --git a/source_codes/recursivity/rec_fibonacci.c b/source_codes/recursivity/rec_fibonacci.c index 0c8a487..eb134a8 100644 --- a/source_codes/recursivity/rec_fibonacci.c +++ b/source_codes/recursivity/rec_fibonacci.c @@ -3,20 +3,36 @@ // Suite de Fibonacci: a_n = a_{n-1} + a_{n-2}, a_0 = 0, a_1 = 1 int fib(int n); +int fib_imp(int n); int main() { - int n; - printf("n="); - scanf("%d",&n); - printf("%d\n",fib(n)); + int n; + printf("n="); + scanf("%d", &n); + printf("%d\n", fib(n)); + printf("%d\n", fib_imp(n)); } // Suite de Fibonacci: a_n = a_{n-1} + a_{n-2}, a_0 = 0, a_1 = 1 int fib(int n) { - switch(n) { - case 0: return 0; - case 1: return 1; - default: return fib(n-1)+fib(n-2); - } + switch (n) { + case 0: + return 0; + case 1: + return 1; + default: + return fib(n - 1) + fib(n - 2); + } } +int fib_imp(int n) { + int fib0 = 1; + int fib1 = 1; + int fib = n == 0 ? 0 : fib1; + for (int i = 2; i < n; ++i) { + fib = fib0 + fib1; + fib0 = fib1; + fib1 = fib; + } + return fib; +} diff --git a/source_codes/refactor_with_functions/.gitignore b/source_codes/refactor_with_functions/.gitignore new file mode 100644 index 0000000..c5ed953 --- /dev/null +++ b/source_codes/refactor_with_functions/.gitignore @@ -0,0 +1,13 @@ +factorielle_refactored +tri_select_refactored_part +chess_queen_refactored +nb1er_refactored +tri_select_to_refactor +eratosthene_refactored +anagramme_refactored +palindrome_refactored +array_1D_init_find_min_refactored +tri_select_refactored +pgcd_refactored +chess_queen_refactored_part +ppcm_refactored diff --git a/source_codes/refactor_with_functions/Makefile b/source_codes/refactor_with_functions/Makefile new file mode 100644 index 0000000..75f84c9 --- /dev/null +++ b/source_codes/refactor_with_functions/Makefile @@ -0,0 +1,18 @@ +CC:=gcc +SAN:=-fsanitize=address +CFLAGS:=-Wall -Wextra -pedantic -g $(SAN) +LDFLAGS:=-lm $(SAN) + +EXECS := $(shell find . -type f -iname '*.c' | sed 's/\.c//g') + +all: $(EXECS) + +$(EXECS): %: %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +.PHONY: clean all + +clean: + rm -f *.o $(EXECS) .gitignore + diff --git a/source_codes/refactor_with_functions/chess_queen_refactored_part.c b/source_codes/refactor_with_functions/chess_queen_refactored_part.c index d3d3a91..c8f9976 100644 --- a/source_codes/refactor_with_functions/chess_queen_refactored_part.c +++ b/source_codes/refactor_with_functions/chess_queen_refactored_part.c @@ -1,67 +1,72 @@ #include <stdio.h> #include <stdlib.h> -typedef enum _piece {SAFE, VULN, QUEEN} piece; +typedef enum _piece { SAFE, VULN, QUEEN } piece; -void print(int n,int m,cell tab[n][m]); -void init_board(int n,int m,cell tab[n][m]); -void couverture(int n,int m,cell tab[n][m],int r_x,int r_y); +void print(int n, int m, piece tab[n][m]); +void init_board(int n, int m, piece tab[n][m]); +void couverture(int n, int m, piece tab[n][m], int r_x, int r_y); void main() { - int n=8; - piece board[n][n]; - init(n,n,board,SAFE); - - print(n,n,board); - printf("Entrez la colonne de la reine (1..%d): ",n); - int r_j; - scanf("%d",&r_j); - r_j--; - printf("Entrez la ligne de la reine ('a'..'%c'): ",n-1+'a'); - char ch[1]; - scanf("%s",ch); - couverture(n,n,board,ch[0]-'a',r_j); - print(n,n,board); + int n = 8; + piece board[n][n]; + init(n, n, board, SAFE); + + print(n, n, board); + printf("Entrez la colonne de la reine (1..%d): ", n); + int r_j; + scanf("%d", &r_j); + r_j--; + printf("Entrez la ligne de la reine ('a'..'%c'): ", n - 1 + 'a'); + char ch[1]; + scanf("%s", ch); + couverture(n, n, board, ch[0] - 'a', r_j); + print(n, n, board); } -void print(int n,int m,piece board[n][m]) { - for (int i=n-1;i>=0;i--) { - printf("%c ",'a'+i); - for (int j=0;j<m;j++) { - switch(board[i][j]) { - case VULN: printf(" *"); break; - case SAFE : printf(" o"); break; - case QUEEN: printf(" R"); - } - } - printf("\n"); - } - printf("\n "); - for (int j=0;j<m;j++) { - printf(" %d",j+1); - } - printf("\n"); +void print(int n, int m, piece board[n][m]) { + for (int i = n - 1; i >= 0; i--) { + printf("%c ", 'a' + i); + for (int j = 0; j < m; j++) { + switch (board[i][j]) { + case VULN: + printf(" *"); + break; + case SAFE: + printf(" o"); + break; + case QUEEN: + printf(" R"); + } + } + printf("\n"); + } + printf("\n "); + for (int j = 0; j < m; j++) { + printf(" %d", j + 1); + } + printf("\n"); } -void couverture(int n,int m,piece board[n][m],int r_i,int r_j) { - //colonne de la reine - for (int k=0;k<n;k++) { - board[k][r_j] = VULN; - } - //ligne de la reine - for (int k=0;k<m;k++) { - board[r_i][k] = VULN; - } - //diagonale montante - for (int k=0;r_i+k<n && r_j+k<m;k++) { - board[r_i+k][r_j+k] = VULN; - } - //compléter les autres diagonales - - board[r_i][r_j] = QUEEN; +void couverture(int n, int m, piece board[n][m], int r_i, int r_j) { + // colonne de la reine + for (int k = 0; k < n; k++) { + board[k][r_j] = VULN; + } + // ligne de la reine + for (int k = 0; k < m; k++) { + board[r_i][k] = VULN; + } + // diagonale montante + for (int k = 0; r_i + k < n && r_j + k < m; k++) { + board[r_i + k][r_j + k] = VULN; + } + // compléter les autres diagonales + + board[r_i][r_j] = QUEEN; } -void init(int n,int m,piece tab[n][m],piece pce) { - // à compléter +void init(int n, int m, piece tab[n][m], piece pce) { + // à compléter } diff --git a/source_codes/sorting/.gitignore b/source_codes/sorting/.gitignore new file mode 100644 index 0000000..0b58fcd --- /dev/null +++ b/source_codes/sorting/.gitignore @@ -0,0 +1,6 @@ +tris_base_part +tris_base +quicksort +heapsort_main +heapsort.o +quicksort_part diff --git a/source_codes/sorting/Makefile b/source_codes/sorting/Makefile new file mode 100644 index 0000000..97109d9 --- /dev/null +++ b/source_codes/sorting/Makefile @@ -0,0 +1,36 @@ +CC:=gcc +SAN:=-fsanitize=address +CFLAGS:=-Wall -Wextra -pedantic -g $(SAN) +LDFLAGS:=-lm $(SAN) + +all: tris_base_part tris_base quicksort heapsort_main quicksort_part + +tris_base_part: tris_base_part.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +tris_base: tris_base.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +quicksort: quicksort.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +quicksort_part: quicksort_part.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +heapsort_main: heapsort_main.c heapsort.o + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + @echo $@ >> .gitignore + @echo *.o >> .gitignore + + +heapsort.o: heapsort.h + +.PHONY: clean all + +clean: + rm -f *.o tris_base tris_base_part quicksort_part quicksort heapsort_main .gitignore + diff --git a/source_codes/structures/.gitignore b/source_codes/structures/.gitignore new file mode 100644 index 0000000..3b0be08 --- /dev/null +++ b/source_codes/structures/.gitignore @@ -0,0 +1,2 @@ +fractions_part +fractions diff --git a/source_codes/structures/Makefile b/source_codes/structures/Makefile new file mode 100644 index 0000000..75f84c9 --- /dev/null +++ b/source_codes/structures/Makefile @@ -0,0 +1,18 @@ +CC:=gcc +SAN:=-fsanitize=address +CFLAGS:=-Wall -Wextra -pedantic -g $(SAN) +LDFLAGS:=-lm $(SAN) + +EXECS := $(shell find . -type f -iname '*.c' | sed 's/\.c//g') + +all: $(EXECS) + +$(EXECS): %: %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +.PHONY: clean all + +clean: + rm -f *.o $(EXECS) .gitignore + diff --git a/source_codes/structures/fractions.c b/source_codes/structures/fractions.c index 75f36a5..8ff0dfb 100644 --- a/source_codes/structures/fractions.c +++ b/source_codes/structures/fractions.c @@ -1,166 +1,192 @@ +#include <assert.h> #include <stdio.h> #include <stdlib.h> -#include <assert.h> typedef struct _fraction { - int num; - int den; + int num; + int den; } fraction; void print(fraction frac) { - printf(" %d/%d ",frac.num,frac.den); + printf(" %d/%d ", frac.num, frac.den); +} + +int pgcd(int n, int m) { + assert(n > 0 && m > 0); + int tmp_n = n, tmp_m = m; + while (tmp_n % tmp_m > 0) { + int tmp = tmp_n; + tmp_n = tmp_m; + tmp_m = tmp % tmp_m; + } + return tmp_m; +} + +void reduire(fraction *frac) { + if (0 == frac->num) { + frac->den = 1; + } else { + int gcd = pgcd(abs(frac->num), frac->den); + frac->num /= gcd; + frac->den /= gcd; + } } -int pgcd(int n,int m) { - assert(n > 0 && m > 0); - int tmp_n = n,tmp_m = m; - while (tmp_n%tmp_m > 0) { - int tmp = tmp_n; - tmp_n = tmp_m; - tmp_m = tmp%tmp_m; - } - return tmp_m; +fraction fraction_build(int num, int den) { + assert(den != 0); + int sign = den / abs(den); + fraction res = {sign * num, sign * den}; + reduire(&res); + return res; } -void reduire(fraction* frac) { - if (0 == frac->num) { - frac->den = 1; - } else { - int gcd = pgcd(abs(frac->num),frac->den); - frac->num /= gcd; - frac->den /= gcd; - } +fraction add(fraction frac1, fraction frac2) { + return fraction_build( + frac1.num * frac2.den + frac1.den * frac2.num, frac1.den * frac2.den); } -fraction fraction_build(int num,int den) { - assert(den != 0); - int sign = den/abs(den); - fraction res = {sign*num,sign*den}; - reduire(&res); - return res; +fraction add1(int n, fraction frac) { + return add(fraction_build(n, 1), frac); } -fraction add(fraction frac1,fraction frac2) { - return fraction_build(frac1.num*frac2.den+frac1.den*frac2.num,frac1.den*frac2.den); +fraction add2(fraction frac, int n) { + return add1(n, frac); } -fraction add1(int n,fraction frac) { - return add(fraction_build(n,1),frac); +void add_inplace(fraction *frac1, fraction frac2) { + *frac1 = add(*frac1, frac2); } -fraction add2(fraction frac,int n,) { - return add1(n,frac); +void neg_inplace(fraction *frac1) { + frac1->num = -frac1->num; } -void add_inplace(fraction* frac1,fraction frac2) { - *frac1 = add(*frac1,frac2); +fraction neg(fraction frac) { + fraction f = frac; + neg_inplace(&f); + return f; } -fraction sub(fraction frac1,fraction frac2) { - return add(frac1,fraction_build(-frac2.num,frac2.den)); +fraction sub(fraction frac1, fraction frac2) { + return add(frac1, fraction_build(-frac2.num, frac2.den)); } -fraction sub1(int n,fraction frac) { - return sub(fraction_build(n,1),frac); +fraction sub1(int n, fraction frac) { + return sub(fraction_build(n, 1), frac); } -fraction sub2(fraction frac,int n,) { - return add(frac,-n); +fraction sub2(fraction frac, int n) { + return add2(frac, -n); } -void sub_inplace(fraction* frac1,fraction frac2) { - *frac1 = sub(*frac1,frac2); +void sub_inplace(fraction *frac1, fraction frac2) { + *frac1 = sub(*frac1, frac2); } -fraction mult(fraction frac1,fraction frac2) { - return fraction_build(frac1.num*frac2.num,frac1.den*frac2.den);; +fraction mult(fraction frac1, fraction frac2) { + return fraction_build(frac1.num * frac2.num, frac1.den * frac2.den); + ; } -fraction mult1(int n,fraction frac) { - return mult(frac,fraction_build(n,1)); +fraction mult1(int n, fraction frac) { + return mult(frac, fraction_build(n, 1)); } -fraction mult2(fraction frac,int n) { - return mult1(n,frac); +fraction mult2(fraction frac, int n) { + return mult1(n, frac); } -void mult_inplace(fraction* frac1,fraction frac2) { - *frac1 = mult(*frac1,frac2); +void mult_inplace(fraction *frac1, fraction frac2) { + *frac1 = mult(*frac1, frac2); } -fraction divide(fraction frac1,fraction frac2) { - assert(frac2.num != 0); - int sign = frac2.num/abs(frac2.num); - return mult(frac1,fraction_build(sign*frac2.den,abs(frac2.num))); +fraction divide(fraction frac1, fraction frac2) { + assert(frac2.num != 0); + int sign = frac2.num / abs(frac2.num); + return mult(frac1, fraction_build(sign * frac2.den, abs(frac2.num))); } -fraction div1(int n,fraction frac) { - return divide(fraction_build(n,1),frac); +fraction div1(int n, fraction frac) { + return divide(fraction_build(n, 1), frac); } -fraction div2(fraction frac,int n) { - return divide(frac,fraction_build(n,1)); +fraction div2(fraction frac, int n) { + return divide(frac, fraction_build(n, 1)); } -void divide_inplace(fraction* frac1,fraction frac2) { - *frac1 = divide(*frac1,frac2); +void divide_inplace(fraction *frac1, fraction frac2) { + *frac1 = divide(*frac1, frac2); } -fraction puiss(fraction frac,int n) { - fraction prod = fraction_build(1,1); - for (int i=1;i<=abs(n);i++) { - prod = mult(prod,frac); - } - if (n < 0) { - prod = div1(1,prod); - } - return prod; +fraction puiss(fraction frac, int n) { + fraction prod = fraction_build(1, 1); + for (int i = 1; i <= abs(n); i++) { + prod = mult(prod, frac); + } + if (n < 0) { + prod = div1(1, prod); + } + return prod; } float reel(fraction frac) { - return (float)frac.num/(float)frac.den; -} - -fraction compute(fraction f1,fraction f2,char op) { - fraction res; - switch(op) { - case 'x': res = mult(f1,f2); break; - case '+': res = add(f1,f2); break; - case '/': res = divide(f1,f2); break; - case '-': res = sub(f1,f2); break; - case 'p': res = puiss(f1,f2.num); break; - default : printf("Pas implémenté\n"); - } - return res; -} - -void main(int argc,char** argv) { - fraction f1,f2; - switch(argc) { - case 3: - printf("%d\n",pgcd(atoi(argv[1]),atoi(argv[2]))); - break; - case 5: - // teste si le 2ème argument est un dénominateur (donc > 0) - if ('1' <= argv[2][0] && argv[2][0] <= '9') { - f1 = fraction_build(atoi(argv[1]),atoi(argv[2])); - f2 = fraction_build(atoi(argv[4]),1); - print(compute(f1,f2,argv[3][0])); - } else { - f1 = fraction_build(atoi(argv[1]),1); - f2 = fraction_build(atoi(argv[3]),atoi(argv[4])); - print(compute(f1,f2,argv[2][0])); - } - break; - case 6: - f1 = fraction_build(atoi(argv[1]),atoi(argv[2])); - print(f1); printf("\n"); - f2 = fraction_build(atoi(argv[4]),atoi(argv[5])); - print(f2); printf("\n"); - print(compute(f1,f2,argv[3][0])); - break; - default: printf("Pas implémenté\n"); - } - printf("\n"); + return (float)frac.num / (float)frac.den; +} + +fraction compute(fraction f1, fraction f2, char op) { + fraction res; + switch (op) { + case 'x': + res = mult(f1, f2); + break; + case '+': + res = add(f1, f2); + break; + case '/': + res = divide(f1, f2); + break; + case '-': + res = sub(f1, f2); + break; + case 'p': + res = puiss(f1, f2.num); + break; + default: + printf("Pas implémenté\n"); + } + return res; +} + +void main(int argc, char **argv) { + fraction f1, f2; + switch (argc) { + case 3: + printf("%d\n", pgcd(atoi(argv[1]), atoi(argv[2]))); + break; + case 5: + // teste si le 2ème argument est un dénominateur (donc > 0) + if ('1' <= argv[2][0] && argv[2][0] <= '9') { + f1 = fraction_build(atoi(argv[1]), atoi(argv[2])); + f2 = fraction_build(atoi(argv[4]), 1); + print(compute(f1, f2, argv[3][0])); + } else { + f1 = fraction_build(atoi(argv[1]), 1); + f2 = fraction_build(atoi(argv[3]), atoi(argv[4])); + print(compute(f1, f2, argv[2][0])); + } + break; + case 6: + f1 = fraction_build(atoi(argv[1]), atoi(argv[2])); + print(f1); + printf("\n"); + f2 = fraction_build(atoi(argv[4]), atoi(argv[5])); + print(f2); + printf("\n"); + print(compute(f1, f2, argv[3][0])); + break; + default: + printf("Pas implémenté\n"); + } + printf("\n"); } diff --git a/source_codes/structures/fractions_part.c b/source_codes/structures/fractions_part.c index 8c0095a..2a0b105 100644 --- a/source_codes/structures/fractions_part.c +++ b/source_codes/structures/fractions_part.c @@ -1,172 +1,187 @@ +#include <assert.h> #include <stdio.h> #include <stdlib.h> -#include <assert.h> typedef struct _fraction { - int num; - int den; + int num; + int den; } fraction; void print(fraction frac) { - printf(" %d/%d ",frac.num,frac.den); + printf(" %d/%d ", frac.num, frac.den); } -int pgcd(int n,int m) { - assert(n > 0 && m > 0); - int tmp_n = n,tmp_m = m; - while (tmp_n%tmp_m > 0) { - int tmp = tmp_n; - tmp_n = tmp_m; - tmp_m = tmp%tmp_m; - } - return tmp_m; +int pgcd(int n, int m) { + assert(n > 0 && m > 0); + int tmp_n = n, tmp_m = m; + while (tmp_n % tmp_m > 0) { + int tmp = tmp_n; + tmp_n = tmp_m; + tmp_m = tmp % tmp_m; + } + return tmp_m; } -void reduire(fraction* frac) { - if (0 == frac->num) { - frac->den = 1; - } else { - int gcd = pgcd(abs(frac->num),frac->den); - frac->num /= gcd; - frac->den /= gcd; - } +void reduire(fraction *frac) { + if (0 == frac->num) { + frac->den = 1; + } else { + int gcd = pgcd(abs(frac->num), frac->den); + frac->num /= gcd; + frac->den /= gcd; + } } -fraction fraction_build(int num,int den) { - assert(den != 0); - int sign = den/abs(den); - fraction res = {sign*num,sign*den}; - reduire(&res); - return res; +fraction fraction_build(int num, int den) { + assert(den != 0); + int sign = den / abs(den); + fraction res = {sign * num, sign * den}; + reduire(&res); + return res; } -fraction add(fraction frac1,fraction frac2) { - return fraction_build(frac1.num*frac2.den+frac1.den*frac2.num,frac1.den*frac2.den); +fraction add(fraction frac1, fraction frac2) { + return fraction_build( + frac1.num * frac2.den + frac1.den * frac2.num, frac1.den * frac2.den); } -fraction add1(int n,fraction frac) { - return add(fraction_build(n,1),frac); +fraction add1(int n, fraction frac) { + return add(fraction_build(n, 1), frac); } -fraction add2(fraction frac,int n,) { - return add1(n,frac); +fraction add2(fraction frac, int n) { + return add1(n, frac); } -void add_inplace(fraction* frac1,fraction frac2) { - *frac1 = add(*frac1,frac2); +void add_inplace(fraction *frac1, fraction frac2) { + *frac1 = add(*frac1, frac2); } -fraction sub(fraction frac1,fraction frac2) { - return add(frac1,fraction_build(-frac2.num,frac2.den)); +fraction sub(fraction frac1, fraction frac2) { + return add(frac1, fraction_build(-frac2.num, frac2.den)); } -fraction sub1(int n,fraction frac) { - //à compléter - return fraction_build(0,1); +fraction sub1(int n, fraction frac) { + //à compléter + return fraction_build(0, 1); } -fraction sub2(fraction frac,int n,) { - //à compléter - return fraction_build(0,1); +fraction sub2(fraction frac, int n) { + //à compléter + return fraction_build(0, 1); } -void sub_inplace(fraction* frac1,fraction frac2) { - //à compléter +void sub_inplace(fraction *frac1, fraction frac2) { + //à compléter } -fraction mult(fraction frac1,fraction frac2) { - return fraction_build(frac1.num*frac2.num,frac1.den*frac2.den); +fraction mult(fraction frac1, fraction frac2) { + return fraction_build(frac1.num * frac2.num, frac1.den * frac2.den); } -fraction mult1(int n,fraction frac) { - //à compléter - return fraction_build(0,1); +fraction mult1(int n, fraction frac) { + //à compléter + return fraction_build(0, 1); } -fraction mult2(fraction frac,int n) { - //à compléter - return fraction_build(0,1); +fraction mult2(fraction frac, int n) { + //à compléter + return fraction_build(0, 1); } -void mult_inplace(fraction* frac1,fraction frac2) { - //à compléter +void mult_inplace(fraction *frac1, fraction frac2) { + //à compléter } -fraction divide(fraction frac1,fraction frac2) { - assert(frac2.num != 0); - int sign = frac2.num/abs(frac2.num); - return mult(frac1,fraction_build(sign*frac2.den,abs(frac2.num))); +fraction divide(fraction frac1, fraction frac2) { + assert(frac2.num != 0); + int sign = frac2.num / abs(frac2.num); + return mult(frac1, fraction_build(sign * frac2.den, abs(frac2.num))); } -fraction div1(int n,fraction frac) { - //à compléter - return fraction_build(0,1); +fraction div1(int n, fraction frac) { + //à compléter + return fraction_build(0, 1); } -fraction div2(fraction frac,int n) { - //à compléter - return fraction_build(0,1); +fraction div2(fraction frac, int n) { + //à compléter + return fraction_build(0, 1); } -void divide_inplace(fraction* frac1,fraction frac2) { - //à compléter +void divide_inplace(fraction *frac1, fraction frac2) { + //à compléter } -fraction puiss(fraction frac,int n) { - fraction prod = fraction_build(1,1); - for (int i=1;i<=abs(n);i++) { - prod = mult(prod,frac); - } - if (n < 0) { - prod = div1(1,prod); - } - return prod; +fraction puiss(fraction frac, int n) { + fraction prod = fraction_build(1, 1); + for (int i = 1; i <= abs(n); i++) { + prod = mult(prod, frac); + } + if (n < 0) { + prod = div1(1, prod); + } + return prod; } float reel(fraction frac) { - return (float)frac.num/(float)frac.den; -} - -fraction compute(fraction f1,fraction f2,char op) { - fraction res; - switch(op) { - case 'x': res = mult(f1,f2); break; - case '+': res = add(f1,f2); break; - case '/': res = divide(f1,f2); break; - case '-': res = sub(f1,f2); break; - case 'p': res = puiss(f1,f2.num); break; - default : printf("Pas implémenté\n"); - } - return res; -} - -void main(int argc,char** argv) { - fraction f1,f2; - switch(argc) { - case 3: - printf("%d\n",pgcd(atoi(argv[1]),atoi(argv[2]))); - break; - case 5: - // teste si le 2ème argument est un dénominateur (donc > 0) - if ('1' <= argv[2][0] && argv[2][0] <= '9') { - f1 = fraction_build(atoi(argv[1]),atoi(argv[2])); - f2 = fraction_build(atoi(argv[4]),1); - print(compute(f1,f2,argv[3][0])); - } else { - f1 = fraction_build(atoi(argv[1]),1); - f2 = fraction_build(atoi(argv[3]),atoi(argv[4])); - print(compute(f1,f2,argv[2][0])); - } - break; - case 6: - f1 = fraction_build(atoi(argv[1]),atoi(argv[2])); - print(f1); printf("\n"); - f2 = fraction_build(atoi(argv[4]),atoi(argv[5])); - print(f2); printf("\n"); - print(compute(f1,f2,argv[3][0])); - break; - default: printf("Pas implémenté\n"); - } - printf("\n"); + return (float)frac.num / (float)frac.den; +} + +fraction compute(fraction f1, fraction f2, char op) { + fraction res; + switch (op) { + case 'x': + res = mult(f1, f2); + break; + case '+': + res = add(f1, f2); + break; + case '/': + res = divide(f1, f2); + break; + case '-': + res = sub(f1, f2); + break; + case 'p': + res = puiss(f1, f2.num); + break; + default: + printf("Pas implémenté\n"); + } + return res; +} + +void main(int argc, char **argv) { + fraction f1, f2; + switch (argc) { + case 3: + printf("%d\n", pgcd(atoi(argv[1]), atoi(argv[2]))); + break; + case 5: + // teste si le 2ème argument est un dénominateur (donc > 0) + if ('1' <= argv[2][0] && argv[2][0] <= '9') { + f1 = fraction_build(atoi(argv[1]), atoi(argv[2])); + f2 = fraction_build(atoi(argv[4]), 1); + print(compute(f1, f2, argv[3][0])); + } else { + f1 = fraction_build(atoi(argv[1]), 1); + f2 = fraction_build(atoi(argv[3]), atoi(argv[4])); + print(compute(f1, f2, argv[2][0])); + } + break; + case 6: + f1 = fraction_build(atoi(argv[1]), atoi(argv[2])); + print(f1); + printf("\n"); + f2 = fraction_build(atoi(argv[4]), atoi(argv[5])); + print(f2); + printf("\n"); + print(compute(f1, f2, argv[3][0])); + break; + default: + printf("Pas implémenté\n"); + } + printf("\n"); } diff --git a/source_codes/tableaux_1d/.gitignore b/source_codes/tableaux_1d/.gitignore new file mode 100644 index 0000000..a131353 --- /dev/null +++ b/source_codes/tableaux_1d/.gitignore @@ -0,0 +1,6 @@ +array_1D_init_find_min +palindrome +eratosthene +tri_select +anagramme +tri_select_ebauche diff --git a/source_codes/tableaux_1d/Makefile b/source_codes/tableaux_1d/Makefile new file mode 100644 index 0000000..75f84c9 --- /dev/null +++ b/source_codes/tableaux_1d/Makefile @@ -0,0 +1,18 @@ +CC:=gcc +SAN:=-fsanitize=address +CFLAGS:=-Wall -Wextra -pedantic -g $(SAN) +LDFLAGS:=-lm $(SAN) + +EXECS := $(shell find . -type f -iname '*.c' | sed 's/\.c//g') + +all: $(EXECS) + +$(EXECS): %: %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +.PHONY: clean all + +clean: + rm -f *.o $(EXECS) .gitignore + diff --git a/source_codes/tableaux_1d/tri_select_ebauche.c b/source_codes/tableaux_1d/tri_select_ebauche.c index 2ada6c5..2ad897b 100644 --- a/source_codes/tableaux_1d/tri_select_ebauche.c +++ b/source_codes/tableaux_1d/tri_select_ebauche.c @@ -5,43 +5,43 @@ const int SIZE = 13; // Tri par sélection void main() { - //déclaration et intialisation du tableau - srand(time(NULL)); - double tab[SIZE]; - for (int i=0;i<SIZE;i++) { - tab[i] = 100.0*(rand()/(double)RAND_MAX); - } - - //impression du tableau - for (int i=0;i<SIZE;i++) { - printf("%.2lf ",tab[i]); - } - printf("\n"); - //à compléter - int debut = 0; - for (....) { //à compléter - // recherche du plus petit élément du sous-tableau de début à SIZE - int ind_min = 0; // à remplacer 0 par debut - double val_min = tab[0]; // à remplacer 0 par debut - for (int i = 1; i < SIZE; ++i) { //à remplacer 1 par debut+1 - if (val_min > tab[i]) { - val_min = tab[i]; - ind_min = i; - } - } - printf("val. min. = %.2lf / index min. = %d\n ",val_min,ind_min); - // permuter le plus petit élément avec le premier élément du tableau - double tmp = tab[0]; // à remplacer 0 par debut - tab[0] = tab[ind_min]; // à remplacer 0 par debut - tab[ind_min] = tmp; - } + // déclaration et intialisation du tableau + srand(time(NULL)); + double tab[SIZE]; + for (int i = 0; i < SIZE; i++) { + tab[i] = 100.0 * (rand() / (double)RAND_MAX); + } - //impression du tableau - for (int i=0;i<SIZE;i++) { - printf("%.2lf ",tab[i]); - } - printf("\n"); + // impression du tableau + for (int i = 0; i < SIZE; i++) { + printf("%.2lf ", tab[i]); + } + printf("\n"); + //à compléter + int debut = 0; + for (int k = 0; k < -1; ++k) { //à compléter, ce code est FAUX + // recherche du plus petit élément du sous-tableau de début à SIZE + int ind_min = 0; // à remplacer 0 par debut + double val_min = tab[0]; // à remplacer 0 par debut + for (int i = 1; i < SIZE; ++i) { //à remplacer 1 par debut+1 + if (val_min > tab[i]) { + val_min = tab[i]; + ind_min = i; + } + } + printf("val. min. = %.2lf / index min. = %d\n ", val_min, ind_min); + // permuter le plus petit élément avec le premier élément du tableau + double tmp = tab[0]; // à remplacer 0 par debut + tab[0] = tab[ind_min]; // à remplacer 0 par debut + tab[ind_min] = tmp; + } - //validation que le tableau est trié - //à compléter + // impression du tableau + for (int i = 0; i < SIZE; i++) { + printf("%.2lf ", tab[i]); + } + printf("\n"); + + // validation que le tableau est trié + //à compléter } diff --git a/source_codes/tableaux_2d/.gitignore b/source_codes/tableaux_2d/.gitignore new file mode 100644 index 0000000..041e808 --- /dev/null +++ b/source_codes/tableaux_2d/.gitignore @@ -0,0 +1,4 @@ +chess_queen_part +chess_queen +calcul_matrix +matrix.o diff --git a/source_codes/tableaux_2d/Makefile b/source_codes/tableaux_2d/Makefile new file mode 100644 index 0000000..9a1970e --- /dev/null +++ b/source_codes/tableaux_2d/Makefile @@ -0,0 +1,27 @@ +CC:=gcc +SAN:=-fsanitize=address +CFLAGS:=-Wall -Wextra -pedantic -g $(SAN) +LDFLAGS:=-lm $(SAN) + +all: chess_queen_part chess_queen calcul_matrix + +chess_queen_part: chess_queen_part.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +chess_queen: chess_queen.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + @echo $@ >> .gitignore + +calcul_matrix: calcul_matrix.c matrix.o + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + @echo $@ >> .gitignore + @echo *.o >> .gitignore + +matrix.o: matrix.h + +.PHONY: clean all + +clean: + rm -f *.o chess_queen_part chess_queen calcul_matrix .gitignore + diff --git a/source_codes/tableaux_2d/chess_queen.c b/source_codes/tableaux_2d/chess_queen.c index 60a7cb5..79b62d6 100644 --- a/source_codes/tableaux_2d/chess_queen.c +++ b/source_codes/tableaux_2d/chess_queen.c @@ -1,71 +1,75 @@ #include <stdio.h> #include <stdlib.h> -typedef enum _piece {SAFE, VULN, QUEEN} piece; - -void print(int n,int m,cell tab[n][m]); -void init_board(int n,int m,cell tab[n][m]); -void couverture(int n,int m,cell tab[n][m],int r_x,int r_y); +typedef enum _piece { SAFE, VULN, QUEEN } piece; +void print(int n, int m, piece tab[n][m]); +void init_board(int n, int m, piece tab[n][m]); +void couverture(int n, int m, piece tab[n][m], int r_x, int r_y); void main() { - int n=8; - piece board[n][n]; - init(n,n,board,SAFE); - - print(n,n,board); - printf("Entrez la colonne de la reine (1..%d): ",n); - int r_j; - scanf("%d",&r_j); - r_j--; - printf("Entrez la ligne de la reine ('a'..'%c'): ",n-1+'a'); - char ch[1]; - scanf("%s",ch); - couverture(n,n,board,ch[0]-'a',r_j); - print(n,n,board); + int n = 8; + piece board[n][n]; + init(n, n, board, SAFE); + + print(n, n, board); + printf("Entrez la colonne de la reine (1..%d): ", n); + int r_j; + scanf("%d", &r_j); + r_j--; + printf("Entrez la ligne de la reine ('a'..'%c'): ", n - 1 + 'a'); + char ch[1]; + scanf("%s", ch); + couverture(n, n, board, ch[0] - 'a', r_j); + print(n, n, board); } -void print(int n,int m,piece board[n][m]) { - for (int i=n-1;i>=0;i--) { - printf("%c ",'a'+i); - for (int j=0;j<m;j++) { - switch(board[i][j]) { - case VULN: printf(" *"); break; - case SAFE : printf(" o"); break; - case QUEEN: printf(" R"); - } - } - printf("\n"); - } - printf("\n "); - for (int j=0;j<m;j++) { - printf(" %d",j+1); - } - printf("\n"); +void print(int n, int m, piece board[n][m]) { + for (int i = n - 1; i >= 0; i--) { + printf("%c ", 'a' + i); + for (int j = 0; j < m; j++) { + switch (board[i][j]) { + case VULN: + printf(" *"); + break; + case SAFE: + printf(" o"); + break; + case QUEEN: + printf(" R"); + } + } + printf("\n"); + } + printf("\n "); + for (int j = 0; j < m; j++) { + printf(" %d", j + 1); + } + printf("\n"); } -void couverture(int n,int m,piece board[n][m],int r_i,int r_j) { - for (int k=0;k<n;k++) { - board[k][r_j] = VULN; //colonne de la reine - } - for (int k=0;k<m;k++) { - board[r_i][k] = VULN; //ligne de la reine - int tmp = r_j-k; - if (0 <= r_i+tmp && r_i+tmp < n) { //diagonale montante - board[r_i+tmp][k] = VULN; - } - if (0 <= r_i-tmp && r_i-tmp < n) { //diagonale descendante - board[r_i-tmp][k] = VULN; - } - } - board[r_i][r_j] = QUEEN; +void couverture(int n, int m, piece board[n][m], int r_i, int r_j) { + for (int k = 0; k < n; k++) { + board[k][r_j] = VULN; // colonne de la reine + } + for (int k = 0; k < m; k++) { + board[r_i][k] = VULN; // ligne de la reine + int tmp = r_j - k; + if (0 <= r_i + tmp && r_i + tmp < n) { // diagonale montante + board[r_i + tmp][k] = VULN; + } + if (0 <= r_i - tmp && r_i - tmp < n) { // diagonale descendante + board[r_i - tmp][k] = VULN; + } + } + board[r_i][r_j] = QUEEN; } -void init(int n,int m,piece tab[n][m],piece pce) { - for (int i=0;i<n;i++) { - for (int j=0;j<m;j++) { - tab[i][j] = pce; - } - } +void init(int n, int m, piece tab[n][m], piece pce) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + tab[i][j] = pce; + } + } } diff --git a/source_codes/tableaux_2d/chess_queen_part.c b/source_codes/tableaux_2d/chess_queen_part.c index d3d3a91..c8f9976 100644 --- a/source_codes/tableaux_2d/chess_queen_part.c +++ b/source_codes/tableaux_2d/chess_queen_part.c @@ -1,67 +1,72 @@ #include <stdio.h> #include <stdlib.h> -typedef enum _piece {SAFE, VULN, QUEEN} piece; +typedef enum _piece { SAFE, VULN, QUEEN } piece; -void print(int n,int m,cell tab[n][m]); -void init_board(int n,int m,cell tab[n][m]); -void couverture(int n,int m,cell tab[n][m],int r_x,int r_y); +void print(int n, int m, piece tab[n][m]); +void init_board(int n, int m, piece tab[n][m]); +void couverture(int n, int m, piece tab[n][m], int r_x, int r_y); void main() { - int n=8; - piece board[n][n]; - init(n,n,board,SAFE); - - print(n,n,board); - printf("Entrez la colonne de la reine (1..%d): ",n); - int r_j; - scanf("%d",&r_j); - r_j--; - printf("Entrez la ligne de la reine ('a'..'%c'): ",n-1+'a'); - char ch[1]; - scanf("%s",ch); - couverture(n,n,board,ch[0]-'a',r_j); - print(n,n,board); + int n = 8; + piece board[n][n]; + init(n, n, board, SAFE); + + print(n, n, board); + printf("Entrez la colonne de la reine (1..%d): ", n); + int r_j; + scanf("%d", &r_j); + r_j--; + printf("Entrez la ligne de la reine ('a'..'%c'): ", n - 1 + 'a'); + char ch[1]; + scanf("%s", ch); + couverture(n, n, board, ch[0] - 'a', r_j); + print(n, n, board); } -void print(int n,int m,piece board[n][m]) { - for (int i=n-1;i>=0;i--) { - printf("%c ",'a'+i); - for (int j=0;j<m;j++) { - switch(board[i][j]) { - case VULN: printf(" *"); break; - case SAFE : printf(" o"); break; - case QUEEN: printf(" R"); - } - } - printf("\n"); - } - printf("\n "); - for (int j=0;j<m;j++) { - printf(" %d",j+1); - } - printf("\n"); +void print(int n, int m, piece board[n][m]) { + for (int i = n - 1; i >= 0; i--) { + printf("%c ", 'a' + i); + for (int j = 0; j < m; j++) { + switch (board[i][j]) { + case VULN: + printf(" *"); + break; + case SAFE: + printf(" o"); + break; + case QUEEN: + printf(" R"); + } + } + printf("\n"); + } + printf("\n "); + for (int j = 0; j < m; j++) { + printf(" %d", j + 1); + } + printf("\n"); } -void couverture(int n,int m,piece board[n][m],int r_i,int r_j) { - //colonne de la reine - for (int k=0;k<n;k++) { - board[k][r_j] = VULN; - } - //ligne de la reine - for (int k=0;k<m;k++) { - board[r_i][k] = VULN; - } - //diagonale montante - for (int k=0;r_i+k<n && r_j+k<m;k++) { - board[r_i+k][r_j+k] = VULN; - } - //compléter les autres diagonales - - board[r_i][r_j] = QUEEN; +void couverture(int n, int m, piece board[n][m], int r_i, int r_j) { + // colonne de la reine + for (int k = 0; k < n; k++) { + board[k][r_j] = VULN; + } + // ligne de la reine + for (int k = 0; k < m; k++) { + board[r_i][k] = VULN; + } + // diagonale montante + for (int k = 0; r_i + k < n && r_j + k < m; k++) { + board[r_i + k][r_j + k] = VULN; + } + // compléter les autres diagonales + + board[r_i][r_j] = QUEEN; } -void init(int n,int m,piece tab[n][m],piece pce) { - // à compléter +void init(int n, int m, piece tab[n][m], piece pce) { + // à compléter } -- GitLab