DS2-2015 Démarrage

Entrainement au DS1 de demain
This commit is contained in:
Geoffrey Frogeye 2016-03-15 22:14:21 +01:00
parent edee5fda32
commit 230f4f417c
3 changed files with 160 additions and 0 deletions

45
DS2-2015/E1.c Normal file
View file

@ -0,0 +1,45 @@
/* Inverse de la matrice de Hilbert */
#include <stdio.h>
#include <math.h>
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

106
DS2-2015/E2.c Normal file
View file

@ -0,0 +1,106 @@
/* Dates */
#include <stdio.h>
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;
}

9
DS2-2015/Makefile Normal file
View file

@ -0,0 +1,9 @@
all: $(patsubst %.c,%.exe,$(shell ls *.c))
%.exe: %.c
gcc $< -g -o $@ -lm
.PHONY: all clean
clean:
rm *.exe