EVALUATION EN LANGAGE C TEST  2020

Examen Langage C

Dans ce document la correction du CC de programmation a été entièrement rédigé par le groupe Genius. Le but réel et de pouvoir écrire un programme qui puise réaliser la racine carrée, le produit matriciel, la gestion d’étudiants et bien d’autres. Dans une correction détaillée pas à pas, vous aller découvrir ce qu’il y avait lieu de faire dans cette épreuve

Contrôle continu de programmation IN1

Exercice 1 :10 pts
1)Ecrire une fonction fact qui lit un nombre entier naturel positif n au clavier et affiche le factoriel de n.                                        1pt
2)Ecrire une fonction exp qui lit in nombre x et un nombre en entier naturel n au clavier et affiche    xn                                         1pt
3)Ecrire une procédure SaisieMatrice qui initialise une matrice M(n,m) de nombre réels.                                                1pt
Ecrire un programme ProduitMatrice qui utiliser la procédure SaisieMatrice pour lire deux matrices M1(n1, m2) et M2(n2, m2) et afficher le produit de M1 par M2 (M1xM2).

NB attention aux valeurs n1 et m2                            2pts
4) Pour calculer la racine carrée d’un nombre positif on utilise la suite numérique de terme général    
   Un+1=     ½(Un+a/Un)    Avec a ≥ 0
                    1 pour n=0
Ecrire la fonction Ua (int n, double a) qui calcul et retourne un pour a et n donné par l’utilisateur au clavier.                                2pts
Ecrire un programme qui lit un nombre a au clavier et affiche la valeur de N pour laquelle Ua (N,a)-Ua(N-1,a)<1/10000                            2pts
Que représente Ua (N,a) et 1/10000  pour le nombre a ?                1pt

Exercice 2 : 10 pts
On suppose qu’un étudiant est représenté par : un matricule sur 20 caractères ; un sexe sur 1 caractère (M ou F) ; une date de naissance (Jour entier, mois entier, année entier) et la moyenne des notes. On suppose également qu’un étudiant compose sur 30 matières. Une matière est composé d’un code de 5 caractères ; d’un titre de 30 caractères d’un nombre de crédits et d‘une note.
On dispose de 30 000 étudiants.

  1. Proposer une structure en C, TEtud pour représenter un étudiant, TMat  pour représenter une matière, TEtudMat pour représenter un étudiant et toutes ses matières, TListeEtud pour représenter tous les 30 000 étudiants            2pts
  2. Ecrire une fonction SaisieEtud qui retourne les informations saisies au clavier sur un étudiant.                                2pts
  3. Ecrire une procédure SaisieMatEtud qui enregistre les informations saisies au clavier sur les matières d’un étudiant e.                            2pts
  4. Ecrire un programme qui enregistre les informations sur tous les étudiants et leurs matières.                                2pts
  5. Ecrire une fonction MoyenEtud qui calcule la moyenne des notes de chaque étudiant et met le résultat dans la moyenne étudiant                         2pts 

 

 

Correction :

Exercice 1:

1)

#include <stdio.h>

int fact(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

int main() {
    int n;
    printf("Entrez un nombre entier naturel positif n: ");
    scanf("%d", &n);
    printf("Le factoriel de %d est %d\n", n, fact(n));
    return 0;
}

2)

#include <stdio.h>

double exp(double x, int n) {
    int i;
    double result = 1;
    for (i = 0; i < n; i++) {
        result *= x;
    }
    return result;
}

int main() {
    double x;
    int n;
    printf("Entrez un nombre x : ");
    scanf("%lf", &x);
    printf("Entrez un nombre entier naturel n : ");
    scanf("%d", &n);
    printf("Le résultat est : %lf", exp(x, n));
    return 0;
}

3)

#include <stdio.h>

void SaisieMatrice(int n, int m, double matrice[n][m]) {
  int i, j;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      printf("Entrez la valeur de M[%d][%d]: ", i, j);
      scanf("%lf", &matrice[i][j]);
    }
  }
}

void ProduitMatrice(int n1, int m1, int n2, int m2, double matrice1[n1][m1], double matrice2[n2][m2]) {
  int i, j, k;
  double resultat;

  if (m1 != n2) {
    printf("Impossible de faire la multiplication des matrices car le nombre de colonnes de la première matrice n'est pas égal au nombre de lignes de la seconde matrice.");
    return;
  }

  for (i = 0; i < n1; i++) {
    for (j = 0; j < m2; j++) {
      resultat = 0;
      for (k = 0; k < m1; k++) {
        resultat += matrice1[i][k] * matrice2[k][j];
      }
      printf("%.2lf ", resultat);
    }
    printf("\n");
  }
}

int main(void) {
  int n1, m1, n2, m2;
  printf("Entrez les dimensions de la première matrice (nombre de lignes puis nombre de colonnes): ");
  scanf("%d%d", &n1, &m1);
  double matrice1[n1][m1];
  SaisieMatrice(n1, m1, matrice1);
 
  printf("Entrez les dimensions de la seconde matrice (nombre de lignes puis nombre de colonnes): ");
  scanf("%d%d", &n2, &m2);
  double matrice2[n2][m2];
  SaisieMatrice(n2, m2, matrice2);

  printf("\nRésultat du produit des matrices:\n");
  ProduitMatrice(n1, m1, n2, m2, matrice1, matrice2);
 
  return 0;
}

4)

#include <stdio.h>

double Ua(int n, double a)
{
    double U = 1;
    int i;
    for (i = 0; i < n; i++)
        U = 0.5 * (U + a / U);
    return U;
}

programme qui lit un nombre "a" au clavier et affiche la valeur de "N" pour laquelle Ua (N,a) - Ua(N-1,a) < 1/10000:

#include <stdio.h>

double Ua(int n, double a)
{
    double U = 1;
    int i;
    for (i = 0; i < n; i++)
        U = 0.5 * (U + a / U);
    return U;
}

int main(void)
{
    int N = 0;
    double a, diff;

    printf("Entrez le nombre a : ");
    scanf("%lf", &a);

    diff = Ua(N, a) - Ua(N - 1, a);
    while (diff >= 1.0 / 10000)
    {
        N++;
        diff = Ua(N, a) - Ua(N - 1, a);
    }

    printf("La valeur de N est : %d\n", N);

    return 0;
}

Conclusion : "Ua(N,a)" représente l'itération "N" de la suite numérique qui calcule la racine carrée d'un nombre "a". "1/10000" représente la précision souhaitée pour le résultat, c'est-à-dire l'erreur maximale tolérée entre deux itérations consécutives de la suite.

 

Probleme :

#include<stdio.h>
#include<string.h>

typedef struct {
    char code[5];
    char titre[30];
    int credits;
    float note;
} TMat;

typedef struct {
    char matricule[20];
    char sexe;
    int jour;
    int mois;
    int annee;
    TMat matieres[30];
} TEtudMat;

typedef struct {
    TEtudMat etudiants[30000];
}TListeEtud;

void SaisieEtud(TEtudMat *e) {
    printf("Saisir le matricule : ");
    scanf("%s", e->matricule);
    printf("Saisir le sexe (M/F) : ");
    scanf(" %c", &e->sexe);
    printf("Saisir la date de naissance (JJ/MM/AAAA) : ");
    scanf("%d/%d/%d", &e->jour, &e->mois, &e->annee);
}

void SaisieMatEtud(TEtudMat *e) {
    int i;
    for (i = 0; i < 30; i++) {
        printf("Saisir les informations sur la matière %d\n", i+1);
        printf("Code : ");
        scanf("%s", e->matieres[i].code);
        printf("Titre : ");
        scanf("%s", e->matieres[i].titre);
        printf("Crédits : ");
        scanf("%d", &e->matieres[i].credits);
        printf("Note : ");
        scanf("%f", &e->matieres[i].note);
    }
}

float MoyenEtud(TEtudMat e) {
    int i;
    float somme = 0;
    for (i = 0; i < 30; i++) {
        somme += e.matieres[i].note * e.matieres[i].credits;
    }
    return somme / 30;
}

int main() {
    int i;
    TListeEtud liste;
    for (i = 0; i < 30000; i++) {
        printf("Saisir les informations sur l'étudiant %d\n", i+1);
        SaisieEtud(&liste.etudiants[i]);
        SaisieMatEtud(&liste.etudiants[i]);
        liste.etudiants[i].moyenne = MoyenEtud(liste.etudiants[i]);
    }
    return 0;
}

Corrections

Pandacodeur langage c 01

Pandacodeur langage c 02

Pandacodeur langage c 03

Pandacodeur langage c 04

Pandacodeur langage c 05

Pandacodeur langage c 06

Pandacodeur langage c 07

Pandacodeur langage c 08

Pandacodeur langage c 09

Pandacodeur langage c 10

Pandacodeur langage c 11

  • 3 votes. Moyenne 4.4 sur 5.

Commentaires

  • Akim

    1 Akim Le 29/01/2021

    Merci de nous faire profiter de vos connaissances

Ajouter un commentaire

Anti-spam