diff --git a/DS2-2015/E1.c b/DS2-2015/E1.c new file mode 100644 index 0000000..6565725 --- /dev/null +++ b/DS2-2015/E1.c @@ -0,0 +1,45 @@ +/* Inverse de la matrice de Hilbert */ + +#include +#include + +int facto(int n); + +int facto(int n) { + // Correct pour n ≤ 12 + if (n <= 1) { + return 1; + } else { + return n*facto(n-1); + } +} + +int main() { + int n; + printf("Saisissez n : "); + scanf("%d", &n); + int i, j; + for (i = 1; i <= n; i++) { + for (j = 1; j <= n; j++) { + printf("%11d ", (pow(-1, i+j)*facto(n+i-1)*facto(n+j-1))/((i+j-1)*pow(facto(i-1)*facto(j-1), 2)*facto(n-i)*facto(n-j))); + } + printf("\n"); + } + + return 0; +} + +// 3) +// +// Saisissez n : 4 +// 1072693248 1072693248 1073741824 1075314688 +// 1072693248 1072693248 1073741824 1075314688 +// 1073741824 1073741824 1074790400 1076363264 +// 1075314688 1075314688 1076363264 1078067200 +// +// Saisissez n : 5 +// 1072693248 1072693248 1073741824 1075314688 1077411840 +// 1072693248 1072693248 1073741824 1075314688 1077411840 +// 1073741824 1073741824 1074790400 1076363264 1078460416 +// 1075314688 1075314688 1076363264 1078067200 1080164352 +// 1077411840 1077411840 1078460416 1080164352 1082261504 diff --git a/DS2-2015/E2.c b/DS2-2015/E2.c new file mode 100644 index 0000000..651980d --- /dev/null +++ b/DS2-2015/E2.c @@ -0,0 +1,106 @@ +/* Dates */ + +#include + +int horos(int J, int M, int A); +int bissextile(int A); +int zeller(int J, int M, int A); + +int horos(int J, int M, int A) { + switch (M) { + case 1: + return J < 20 ? 9 : 10; + case 2: + return J < 19 ? 10 : 11; + case 3: + return J < 21 ? 11 : 0; + case 4: + return J < 20 ? 0 : 1; + case 5: + return J < 21 ? 1 : 2; + case 6: + return J < 21 ? 2 : 3; + case 7: + return J < 22 ? 3 : 4; + case 8: + return J < 23 ? 4 : 5; + case 9: + return J < 23 ? 5 : 6; + case 10: + return J < 23 ? 6 : 7; + case 11: + return J < 22 ? 7 : 8; + case 12: + return J < 22 ? 8 : 9; + default: + return -1; + } +} + +int bissextile(int A) { + if (A % 4) { // Pas divisible + return 0; + } else { // Divisible + if (A % 100) { + return 1; + } else { + if (A % 400) { + return 0; + } else { + return 1; + } + } + } +} + +int zeller(int J, int M, int A) { + double X, Y, Z, B; + if (M <= 2) { + X = M + 10; + B = A - 1; + } else { + X = M - 2; + B = A; + } + Z = (int) (B / 100); + Y = B - 100 * Z; + + return (int) (J + (int) (2.6 * X - 0.2) + Y + (int) (Y / 4) + (int) (Z / 4) + 5 * Z) % 7; +} + +int main() { + int J, M, A; + + printf("Saisissez l'année : "); + scanf("%d", &A); + if (A <= 1582) { + printf("À cette date là, le calendrier grégorien n'était pas encore établi, les résultats suivants ne sont donc peut-être pas exacts.\n"); + } + + printf("Saisissez le mois : "); + scanf("%d", &M); + if (M < 1 || M > 12) { + printf("Les mois vont de 1 à 12 !\n"); + return 2; + } + + printf("Saisissez le jour : "); + scanf("%d", &J); + if (J < 1 || M > 31) { + printf("Les jours vont de 0 à 31 (et encore) !\n"); + return 2; + } + if (M == 2) { + if (J > 29) { + printf("Les mois de février ont au maximum 29 jours !\n"); + return 2; + } else if (J == 29 && !bissextile(A)) { + printf("Cette année n'est pas bissextile, le mois de février n'a donc que 28 jours !\n"); + return 2; + } + } + + // TODO + + return 0; +} diff --git a/DS2-2015/Makefile b/DS2-2015/Makefile new file mode 100644 index 0000000..a4ebb49 --- /dev/null +++ b/DS2-2015/Makefile @@ -0,0 +1,9 @@ +all: $(patsubst %.c,%.exe,$(shell ls *.c)) + +%.exe: %.c + gcc $< -g -o $@ -lm + +.PHONY: all clean + +clean: + rm *.exe