Compare commits

...

2 commits

Author SHA1 Message Date
Geoffrey Frogeye 178291f9f0 DS1 2016-03-16 09:51:20 +01:00
Geoffrey Frogeye 230f4f417c DS2-2015 Démarrage
Entrainement au DS1 de demain
2016-03-15 22:14:21 +01:00
11 changed files with 481 additions and 0 deletions

23
DS1/E1-1.c Normal file
View file

@ -0,0 +1,23 @@
/* Nombre triangulaire */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
int n, i, j, T = 0;
printf("Saisissez n : ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
printf("*");
T += 1;
}
printf("\n");
}
// printf("T_%d = %d\n", n, n*(n+1)/2);
printf("T_%d = %d\n", n, T);
return 0;
}

29
DS1/E1-2.c Normal file
View file

@ -0,0 +1,29 @@
/* Triangle de Floyd */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
int n, i, j, t = 1, S, Sa;
printf("Saisissez n : ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
S = 0;
for (j = 1; j <= i; j++) {
printf("%11d ", t);
S += t;
t++;
}
printf("\n");
Sa = i*(pow(i, 2) + 1)/2;
if (S != Sa) {
printf("Somme incorrecte, %d attendu, %d obtenu.\n", Sa, S);
exit(EXIT_FAILURE);
}
}
return 0;
}

29
DS1/E1-3.c Normal file
View file

@ -0,0 +1,29 @@
/* Séquence de Caterer */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
int n, C, i;
printf("Saisissez n : ");
scanf("%d", &n);
// Réccurence
C = 1;
printf("Par réccurence :\n");
printf("C_0 = 1\n");
for (i = 1; i <= n; i++) {
C = i + C;
printf("C_%d = %d\n", i, C);
}
// Formule
printf("Par formule :\n");
for (i = 0; i <= n; i++) {
C = (pow(i, 2) + i + 2)/2;
printf("C_%d = %d\n", i, C);
}
return 0;
}

73
DS1/E2.c Normal file
View file

@ -0,0 +1,73 @@
/* Capitalisation */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
// 1)
// Saisie
double C_0, C, tTot = 0, tMoy;
int m, k, i, nTot = 0;
printf("Saisissez C_0 le capital placé : ");
scanf("%lf", &C_0);
printf("Saisissez m le nombre d'années de placement : ");
scanf("%d", &m);
printf("Saisissez k le nombre de changements de taux : ");
scanf("%d", &k);
int n[k];
double t[k];
for (i = 1; i <= k; i++) {
printf("Saisissez n_%d le nombre d'années que dure le taux : ", i);
scanf("%d", &n[i-1]);
printf("Saisissez t_%d le taux : ", i);
scanf("%lf", &t[i-1]);
nTot += n[i-1];
tTot += t[i-1] * n[i-1];
}
if (nTot != m) {
printf("Somme des années de changements de captaux incorrecte, %d attendu, %d obtenu.\n", m, nTot);
exit(EXIT_FAILURE);
}
tMoy = tTot / nTot;
printf("Taux moyen = %f\n", tMoy);
// Calcul
printf("Par réccurence : \n");
C = C_0;
for (i = 1; i <= k; i++) {
C *= pow(1 + t[i-1], n[i-1]);
}
printf("C = %f\n", C);
// 3)
printf("Avec le taux moyen : \n");
C = C_0*pow(1 + tMoy, nTot);
printf("C = %f\n", C);
// On constate que le C calculé est proche, mais des erreurs liées à la précision
// des nombres en virgule flottantes ont eu lieu
return 0;
}
// 2)
//
// Saisissez C_0 le capital placé : 10000
// Saisissez m le nombre d'années de placement : 7
// Saisissez k le nombre de changements de taux : 4
// Saisissez n_1 le nombre d'années que dure le taux : 2
// Saisissez t_1 le taux : 0.0225
// Saisissez n_2 le nombre d'années que dure le taux : 3
// Saisissez t_2 le taux : 0.015
// Saisissez n_3 le nombre d'années que dure le taux : 1
// Saisissez t_3 le taux : 0.0175
// Saisissez n_4 le nombre d'années que dure le taux : 1
// Saisissez t_4 le taux : 0.02
// C = 11346.432916

11
DS1/E2.in Normal file
View file

@ -0,0 +1,11 @@
10000
7
4
2
0.0225
3
0.015
1
0.0175
1
0.02

110
DS1/E3.c Normal file
View file

@ -0,0 +1,110 @@
/* Stockage de matrice symétrique */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
// 1)
// Saisie de la matrice
int n, i, j;
printf("Saisissez n : ");
scanf("%d", &n);
double A[n][n];
for (j = 1; j <= n; j++) {
for (i = 1; i <= n; i++) {
printf("Saisissez l'élément aux coordonnées (%d ; %d) : ", i, j);
scanf("%lf", &A[i-1][j-1]);
}
}
// Affichage de la matrice
for (j = 1; j <= n; j++) {
for (i = 1; i <= n; i++) {
printf("%11f ", A[i-1][j-1]);
}
printf("\n");
}
// Verification de la symétrie
for (j = 1; j <= n; j++) {
for (i = j+1; i <= n; i++) {
if (A[i-1][j-1] != A[j-1][i-1]) {
printf("La matrice n'est pas symétrique.\n");
exit(EXIT_FAILURE);
}
}
}
// Création du vecteur U
int k, m, M, K = n*(n+1)/2;
double U[K];
for (i = 1; i <= n; i++) {
for (j = i; j <= n; j++) {
M = 0;
for (m = 1; m <= i - 2; m++) {
M += m;
}
k = (i - 1) * (n - 1) + j - M;
U[k-1] = A[i-1][j-1];
}
}
// Affichage du vecteur U
printf("U = {");
for (k = 1; k <= K; k++) {
printf("%f ", U[k-1]);
}
printf("}\n");
return 0;
}
// 2)
//
// Saisissez n : 6
// Saisissez l'élément aux coordonnées (1 ; 1) : -2
// Saisissez l'élément aux coordonnées (2 ; 1) : 1
// Saisissez l'élément aux coordonnées (3 ; 1) : 3
// Saisissez l'élément aux coordonnées (4 ; 1) : -1
// Saisissez l'élément aux coordonnées (5 ; 1) : 4
// Saisissez l'élément aux coordonnées (6 ; 1) : 1
// Saisissez l'élément aux coordonnées (1 ; 2) : 1
// Saisissez l'élément aux coordonnées (2 ; 2) : -1
// Saisissez l'élément aux coordonnées (3 ; 2) : 5
// Saisissez l'élément aux coordonnées (4 ; 2) : 2
// Saisissez l'élément aux coordonnées (5 ; 2) : 0
// Saisissez l'élément aux coordonnées (6 ; 2) : 7
// Saisissez l'élément aux coordonnées (1 ; 3) : 3
// Saisissez l'élément aux coordonnées (2 ; 3) : 5
// Saisissez l'élément aux coordonnées (3 ; 3) : -3
// Saisissez l'élément aux coordonnées (4 ; 3) : 6
// Saisissez l'élément aux coordonnées (5 ; 3) : -2
// Saisissez l'élément aux coordonnées (6 ; 3) : 8
// Saisissez l'élément aux coordonnées (1 ; 4) : -1
// Saisissez l'élément aux coordonnées (2 ; 4) : 2
// Saisissez l'élément aux coordonnées (3 ; 4) : 6
// Saisissez l'élément aux coordonnées (4 ; 4) : -4
// Saisissez l'élément aux coordonnées (5 ; 4) : 8
// Saisissez l'élément aux coordonnées (6 ; 4) : -2
// Saisissez l'élément aux coordonnées (1 ; 5) : 4
// Saisissez l'élément aux coordonnées (2 ; 5) : 0
// Saisissez l'élément aux coordonnées (3 ; 5) : -2
// Saisissez l'élément aux coordonnées (4 ; 5) : 8
// Saisissez l'élément aux coordonnées (5 ; 5) : 1
// Saisissez l'élément aux coordonnées (6 ; 5) : -5
// Saisissez l'élément aux coordonnées (1 ; 6) : 1
// Saisissez l'élément aux coordonnées (2 ; 6) : 7
// Saisissez l'élément aux coordonnées (3 ; 6) : 9
// Saisissez l'élément aux coordonnées (4 ; 6) : -2
// Saisissez l'élément aux coordonnées (5 ; 6) : -5
// Saisissez l'élément aux coordonnées (6 ; 6) : -6
// -2.000000 1.000000 3.000000 -1.000000 4.000000 1.000000
// 1.000000 -1.000000 5.000000 2.000000 0.000000 7.000000
// 3.000000 5.000000 -3.000000 6.000000 -2.000000 9.000000
// -1.000000 2.000000 6.000000 -4.000000 8.000000 -2.000000
// 4.000000 0.000000 -2.000000 8.000000 1.000000 -5.000000
// 1.000000 7.000000 9.000000 -2.000000 -5.000000 -6.000000
// U = {-2.000000 1.000000 3.000000 -1.000000 4.000000 1.000000 -1.000000 5.000000 2.000000 0.000000 7.000000 -3.000000 6.000000 -2.000000 9.000000 -4.000000 8.000000 -2.000000 1.000000 -5.000000 -6.000000 }

37
DS1/E3.in Normal file
View file

@ -0,0 +1,37 @@
6
-2
1
3
-1
4
1
1
-1
5
2
0
7
3
5
-3
6
-2
9
-1
2
6
-4
8
-2
4
0
-2
8
1
-5
1
7
9
-2
-5
-6

9
DS1/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

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