EXAMEN LANGAGE C ( PROGRAMMATION C ) TEST  15 /XX annee acaDEMIQUE 2024

EXAMEN + CORRIGE EN LANGAGE C

EXERCICE 1 : 3pts

La récurrence mathématique est donnée par :

\(u_{n+1} = \frac{e^{u_n}}{n+2}\)

avec la condition initiale :

\(u_0 = \frac{1}{2}\)

1. Donner une fonction << puissance (float a, int b) » pour le calcul de ab .Ipt

2. En utilisant de la fonction précédente, une procédure « terme (int n)» perme ant de calculer et afficher les n premiers termes de la suite. 2pts

NB: Déclarer e comme une constante qui vaut 2.

EXERCICE 2 : 5pts

 

1) Ecrire un programme qui lit une chaîne de caractères CH au clavier et qui compte les occurrences des lettres de l'alphabet en ne distinguant pas les majuscules et les minuscules. Utiliser un tableau ABC de dimension 26 pour mémoriser le résultat et un pointeur PCH pour parcourir la chaîne CH et un pointeur PABC pour parcourir ABC. Afficher seulement le nombre des lettres qui apparaissent au mois une fois dans le texte.

Exemple:

Entrez un ligne de texte (max. 100 caractères) :

 Jeanne

 La chaîne "Jeanne" contient :

 1   fois la lettre 'A'

 2   fois la lettre 'E'

 1   fois la lettre 'J'

 3   fois la lettre 'N'

2) Ecrire une fonction void tri() qui saisit tableau d'entiers, d'afichage du tablea et de du tableau, La dimension du tableau peut être fixée dans un premier temps, puis demandé à l'usager lors de l'exécution. fonction de tri demandée est le suivant Mettre le plus petit entier en première position du tableau, On opère pacomparaison deux à deux entre le premier et un élément d'indice i du tableau. On échange les deux élémer ts lorsque ceux-ci ne sont pas dans un ordre correct. Opérer de la même façon avec le deuxième élément du tableau, puis suc essiveiment avec chaque élément du tableau. La dernière comiparaison se fait alors entre I'avant dernitr et le dernier élément du tableau.

.

EXERCICE 3 : 10pts

typedef char *mot; //adresse d'une chaine de caractère de longueur maximale

typedef mot *langage ; //tableau de mots contenant au plus LANGMAX=100 éléments dont le demier a pour valeur NULL.

  1. Ecrire fonction void afficher(langage i) afichant I'écran les mots du language i.
  2. Ecrire une fonction int appartient (mot m, langage l) retournant 1 ou 0 suivant que m est ou non un mot du langage.
  3. Ecrire une fonction int disjoints (langage L1, langage L2) retournant 1 ou 0 suivant que LI ou L2 sont ou non disjoints.
  4. Ecrire une fonction int ajouter(mot m, langage I) qui ajoute le mot m au langage l et retourne son indice dans le tableau (ou -1  si m=NULL),
  5. Ecrire une fonction void enlever(mot m, langage l) qui enlève le mot m au langage l.

 

SOLUTION : CORRECTION

Exercice 01 : 3PTS


#include <stdio.h>
#include <math.h>
#define e 2

// 1)-- Fonction : puissance 1pt
int puissance(int a, int b) {
    if (b == 0)
        return 1;
    else
        return a * puissance(a, b - 1);
}

// 2)-- Fonction : terme 2pts
void terme(int n) {
    float u0 = 0.5, u1 = u0;
    for (int i = 0; i <= n; i++) {
        printf("U(%d) = %f\n", i, u1);
        u1 = puissance(e, floor(u0)) / (i + 2);
        u0 = u1;
    }
}

Exercice 02 : 2+5 PTS

1) Occurrence :


#include <stdio.h>
main()
{
    /* Déclarations */
    char CH[101]; /* chaîne donnée */
    char *PCH;    /* pointeur d'aide dans CH  */
    int ABC[26];  /* compteurs des différents caractères */
    int *PABC;    /* pointeur d'aide dans ABC */

    /* Saisie des données */
    printf("Entrez une ligne de texte (max.100 caractères) :\n");
    gets(CH);
    /* Initialiser le tableau ABC */
    for (PABC=ABC; PABC='A' && *PCH<='Z')
            (*(ABC+(*PCH-'A')))++; /* Attention aux parenthèses! */
        if (*PCH>='a' && *PCH<='z')
            (*(ABC+(*PCH-'a')))++;
    }
    /* Affichage des résultats */ 
    /* (PABC-ABC) est le numéro de la lettre de l'alphabet. */
    printf("La chaîne \"%s\" contient :\n", CH);
    for (PABC=ABC; PABC

2) La fonction de tri implémentée dans cet exercice est un tri par sélection. Voici comment il fonctionne :


#include <stdio.h>
#define N 100

void tri() {
    int taille;

    // Saisie de la dimension du tableau
    printf("Entrez la taille du tableau : ");
    scanf("%d", &taille);

    int tableau[taille];

    // Saisie des éléments du tableau
    for (int i = 0; i < taille; i++) {
        printf("Entrez l'élément %d : ", i + 1);
        scanf("%d", &tableau[i]);
    }

    // Affichage du tableau initial
    printf("Tableau initial : ");
    for (int i = 0; i < taille; i++) {
        printf("%d ", tableau[i]);
    }
    printf("\n");

    // Tri du tableau par sélection
    for (int i = 0; i < taille - 1; i++) {
        int indiceMin = i;

        for (int j = i + 1; j < taille; j++) {
            if (tableau[j] < tableau[indiceMin]) {
                indiceMin = j;
            }
        }

        // Échange des éléments
        int temp = tableau[i];
        tableau[i] = tableau[indiceMin];
        tableau[indiceMin] = temp;
    }

    // Affichage du tableau trié
    printf("Tableau trié : ");
    for (int i = 0; i < taille; i++) {
        printf("%d ", tableau[i]);
    }
    printf("\n");
}

Exercice 03 : Manipulation des Chaînes de Caractères


#include <stdio.h>
#include <string.h>
#define LANGMAX 100

typedef char *mot;
typedef mot *langage;

// 1)-- Fonction pour afficher les mots d'un langage
void afficher(langage i) {
    int j = 0;
    while (i[j] != NULL) {
        printf("%s\n", i[j]);
        j++;
    }
}

// 2)-- Fonction pour verifier si un mot appartient a un langage
int appartient(mot m, langage l) {
    int i = 0;
    while (l[i] != NULL) {
        if (strcmp(m, l[i]) == 0) {
            return 1; // le mot est trouve dans le langage
        }
        i++;
    }
    return 0; // le mot n'est pas trouve dans le langage
}

// 3)-- Fonction pour vérifier si deux langages sont disjoints
int disjoints(langage l1, langage l2) {
    int i = 0;
    while (l1[i] != NULL) {
        if (appartient(l1[i], l2)) {
            return 0; // les langages ne sont pas disjoints
        }
        i++;
    }
    return 1; // les langages sont disjoints
}

// 4)-- Fonction pour ajouter un mot à un langage
int ajouter(mot m, langage l) {
    if (m == NULL) {
        return -1; // ne peut pas ajouter un mot NULL
    }
    int i = 0;
    while (l[i] != NULL && i < LANGMAX) {
        i++;
    }
    if (i < LANGMAX) {
        l[i] = m;
        l[i + 1] = NULL;
        return i; // indice où le mot est ajouté
    }
    return -1; // le langage est plein, impossible d'ajouter plus de mots
}

// 5)-- Fonction pour enlever un mot d'un langage
void enlever(mot m, langage l) {
    int i = 0;
    while (l[i] != NULL) {
        if (strcmp(m, l[i]) == 0) {
            while (l[i] != NULL) {
                l[i] = l[i + 1];
                i++;
            }
            return; // mot enlevé avec succès
        }
        i++;
    }
}

int main() {
    // Création des langages
    mot langage1[LANGMAX + 1]; // +1 pour le terminateur NULL
    mot langage2[LANGMAX + 1];

    // Initialisation des langages
    langage1[0] = "algorithme";
    langage1[1] = "chat";
    langage1[2] = "Programmation C";
    langage1[3] = NULL;

    langage2[0] = "chat";
    langage2[1] = "chien";
    langage2[2] = "lapin";
    langage2[3] = NULL;

    printf("Bienvenue sur mon Application de Test créée par Mr joelYk:\n");
    // Test de la fonction afficher
    printf("Termes en informatique :\n");
    afficher(langage1);

    printf("\nAnimaux domestiques :\n");
    afficher(langage2);

    // Test de la fonction disjoints
    printf("\nLes termes en informatique et les animaux domestiques sont-ils disjoints ? %d\n", disjoints(langage1, langage2));

    // Test de la fonction ajouter
    printf("\nAjout de 'java' aux termes en informatique à l'indice : %d\n", ajouter("java", langage1));
    printf("Ajout de 'chien' aux animaux domestiques à l'indice : %d\n", ajouter("chien", langage2)); // Devrait échouer

    // Test de la fonction enlever
    printf("\nRetrait de 'chat' des termes en informatique\n");
    enlever("programmation", langage1);
    printf("Termes en informatique après le retrait :\n");
    afficher(langage1);

    return 0;
}

Test du Code :

Capture d'écran du test du code

 
  • 2 votes. Moyenne 4.5 sur 5.

Ajouter un commentaire

Anti-spam