/// EXERCICE 1
/// 1) Fonction FACTORIEL
#include
#include
long Fact()
{
int nbre, i;
long f=1;
printf("Entrer un nombre positif, je determine son factoriel");
/// boucle pour s'assurer que le nombre est positif
do
{
scanf("%d", &nbre);
} while (nbre < 0);
if (nbre == 0 || nbre == 1)
{
printf("Le factoriel de %d est :\n", nbre);
return 1;
}
else
{
for (i = 2; i <= nbre; i++)
{
f = f * i;
}
printf("Le factoriel de %d est :\n", nbre);
return f;
}
}
/// 2) Fonction Exponentiel
long expo()
{
int x, n, i;
long r=1;
printf("Entrer l'element dont on veut la puissance\n");
do
{
scanf("%d", &x);
} while (x < 0);
printf("Entrer l'exposant :\n");
do
{
scanf("%d", &n);
} while (n < 0);
if (n == 0)
{
printf("%d exposant %d vaut ", x, n);
return 1;
}
else if (n == 1)
{
printf("%d exposant %d vaut ", x, n);
return x;
}
else
{
for (i = 1; i <= n; i++)
{
r = r * x;
}
printf("%d exposant %d vaut ", x, n);
return r;
}
}
/// 3) Procedure SaisieMatrice
void SaisieMatrice(int n, int m, int M[][m])
{
int i, j;
printf("Entrer les elements de votre matrice\n");
for (i = 0; i < n; ++i)
{
for (j = 0; j < m; ++j)
{
scanf("%d", &M[i][j]);
}
}
return;
}
/// 4) Programme ProduitMatrice
void AfficheMatrice(int n, int m, int M[][m]);
void SaisieMatrice(int n, int m, int M[][m]);
int main()
{
int n1, m1, n2, m2;
/// recuperation du nombre de lignes et colonnes des matrices
printf("Entrer le nombre de lignes et de colonnes de la premiere matrice");
do
{
scanf("%d%d", &n1, &m1);
} while (n1 < 0 && m1 < 0);
printf("Entrer le nombre de lignes et de colonnes de la deuxieme matrice");
do
{
scanf("%d%d", &n2, &m2);
} while (n2 < 0 && m2 < 0);
/// verifions que le nombre de lignes de la deuxieme matrice est egal au nombre de colonnes de la premiere matrice
if (m1 != n2)
{
printf("Produit Matriciel impossible\n"
"car le nombre de ligne de M2 est"
"different du nombre de colonnes de M1");
}
else
{
int i, j, k, M1[n1][m1], M2[n1][m1], M3[n1][m1];
SaisieMatrice(n1, m1, M1);
SaisieMatrice(n2, m2, M2);
/// boucle pour obtenir le produit matriciel
for (i = 0; i < n2; ++i)
{
for (j = 0; j < m1; ++j)
{
M3[i][j] = 0;
for (k = 0; k < m1; ++k)
{
M3[i][j] = M3[i][j] + (M1[i][k] * M2[k][j]);
}
}
}
AfficheMatrice(n2, m1, M3);
}
return 0;
}
void AfficheMatrice(int n, int m, int M[][m])
{
int i, j;
printf("Entrer les elements de votre matrice\n");
for (i = 0; i < n; ++i)
{
for (j = 0; j < m; ++j)
{
printf("%d ", M[i][j]);
}
printf("\n");
}
return;
}
/// 5) Calculer la racine carree d'un nombre
/// a) Fonction qui calcule la racine carree
double Ua(int n, double a)
{
if (n == 0)
{
return 1;
}
else
{
return ((0.5) * (Ua(n - 1, a) + (a / Ua(n - 1, a))));
}
}
/// b) Programme pour obtenir N
int main()
{
int N = 0;
double a, U;
do
{
printf("Entrer le nombre dont on veut calculer ca racine carree\n");
scanf("%lf", &a);
} while (a < 0);
do
{
N++;
U = Ua(N, a);
} while ((Ua(N, a) - (Ua(N - 1, a))) > (1 / 10000));
printf("La valeur de N pour la quelle (Ua(N,a)-Ua(N-1,a))<(1/10000) est %d \n", N);
return 0;
}
/// c) Que represente Ua(N,a) et 1/10000 pour le nombre a
/// Reponse
/// - Ua(N,a); est le terme de la suite au rang N.
/// - 1/10000 est une sorte de precision ou valeur d'arret.
/// EXERCICE 2
/// 6) Structure pour representer un étudiant
/// pour réaliser cela, nous aurons besoin d'une structure date
/// structure d'une date
typedef struct Tdate
{
int jour;
int mois;
int annee;
} Tdate;
/// structure d'un etudiant
typedef struct TEtud
{
char mat[20];
char sexe;
Tdate date;
float moy;
} TEtud;
/// structure pour representer une matiere
typedef struct Tmat
{
char code[5];
char titre[30];
int Ncredit;
float note;
} Tmat;
/// structure pour representer l'ensemble des étudiants
#define N 30000
TEtud TListeEtud[N];
/// structure pour representer un étudiant et ces matieres
#define M 30
typedef struct TEtudMat
{
TEtud Etud;
Tmat matiere[M];
} TEtudMat;
/// 7) Fonction pour retourner les informations sur un étudiant
/// Pour realiser cette fonction nous aurons besoin d'une fonction
/// qui nous permettra de lire une date et s'assurer de sa validite
/// Fonction pour lire une date et la retourner si elle est valide
Tdate LireDate()
{
Tdate date;
printf("Entrer votre date de naissance dans le format (jj/mm/aaaa)\n");
scanf("%d/%d/%d", &date.jour, &date.mois, &date.annee);
/// verification de la validite de la date
if ((date.jour >= 1 && date.jour <= 31) && (date.mois == 1 || date.mois == 3 || date.mois == 5 || date.mois == 7 || date.mois == 8 || date.mois == 10 || date.mois == 12))
return date;
else if ((date.jour >= 1 && date.jour <= 30) && (date.mois == 4 || date.mois == 6 || date.mois == 9 || date.mois == 11))
return date;
else if ((date.jour >= 1 && date.jour <= 29) && (date.mois == 2) && ((date.annee % 400 == 0 || date.annee % 4 == 0) && (date.annee % 100 != 0)))
return date;
else
{
printf("Votre date est invalide. Veuillez entrer une nouvelle date.\n");
return LireDate(); // Appel recursif pour obtenir une date valide
}
}
/// Fonction pour retourner les informations sur un etudiant
TEtud SaisieEtud(TEtud Etud)
{
printf("Entrer les informations sur votre etudiant :\n");
printf("Entrer le matricule :\n");
scanf("%s", Etud.mat);
fflush(stdin);
/// boucle pour s'assurer que le caractere saisi est vraiment "F" ou "M"
do
{
printf("Entrer le sexe (F ou M) :\n");
scanf(" %c", &Etud.sexe);
fflush(stdin);
} while (Etud.sexe != 'F' && Etud.sexe != 'M');
/// Appel de la fonction LireDate pour recuperer une date valide
Etud.date = LireDate();
/// boucle pour s'assurer que la moyenne n'est pas inferieure a 0
do
{
printf("Entrer la moyenne :\n");
scanf("%f", &Etud.moy);
} while (Etud.moy < 0);
return Etud;
}
/// 8) Fonction pour enregistrer les informations sur les matieres d'un etudiant
void SaisieMatEtud(Tmat e[], int taille)
{
int i;
printf("Entrer les informations sur les matieres :\n");
for (i = 0; i < taille; ++i)
{
printf("Entrer les informations sur la matiere %d :\n", (i + 1));
printf("Entrer le code :\n");
scanf("%s", e[i].code);
printf("Entrer le titre :\n");
scanf("%s", e[i].titre);
do
{
printf("Entrer le nombre de credits :\n");
scanf("%d", &e[i].Ncredit);
} while (e[i].Ncredit <= 0);
do
{
printf("Entrer la note :\n");
scanf("%f", &e[i].note);
} while (e[i].note <= 0);
}
return;
}
/// 9) Programme pour enregistrer les informations sur tous les etudiants et leurs matieres
void SaisieTout()
{
TEtudMat TListeEtud[N];
int i;
for (i = 0; i < N; i++)
{
TListeEtud[i].Etud = SaisieEtud(TListeEtud[i].Etud);
SaisieMatEtud(TListeEtud[i].matiere, M);
}
return;
}
/// 10) Fonction pour calculer la moyenne d'un Etudiant
void Moyenetud(TEtudMat TListeEtud[], int taille)
{
float sum = 0;
int i, j;
for (i = 0; i < taille; ++i)
{
for (j = 0; j < M; ++j)
{
sum = sum + TListeEtud[i].matiere[j].note;
}
TListeEtud[i].Etud.moy = (sum / M);
}
return;
}