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 :
