chaine de caractere | Langage C

Questions :

  1. Écrire une fonction void afficher(langage i) affichant à l'écran les mots du langage i.
  2. Écrire une fonction int appartient(mot m, langage l) retournant 1 ou 0 suivant que m est ou non un mot du langage.
  3. Écrire une fonction int disjoints(langage L1, langage L2) retournant 1 ou 0 suivant que L1 ou L2 sont ou non disjoints.
  4. Écrire une fonction int ajouter(mot m, langage l) qui ajoute le mot m au langage l et retourne son indice dans le tableau (ou -1 si m=NULL).
  5. Écrire une fonction void enlever(mot m, langage l) qui enlève le mot m au langage l.
  6. Écrire une fonction int compte(mot m, langage l) qui compte les occurrences du mot m au langage l et renvoie le nombre d'occurrences.
  7. Écrire une fonction langage fusion(langage L1, langage L2) qui fusionne deux langages en un seul et retourne le langage résultant.
  8. Écrire une fonction int joints(langage L1, langage L2) retournant 1 ou 0 suivant que L1 ou L2 sont ou non joints (deux versions, une en tenant compte de la fonction disjoint et l'autre non).
  9. Écrire une fonction void modifie(mot m, langage l) qui modifie un mot m du langage l, le nouveau mot est entré par l'utilisateur.

Correction : Programme C sur les chaines de caracteres


#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++;
    }
}


// 6)-- Fonction pour compter les occurrences d'un mot dans un langage
int compte(mot m, langage l) {
    int compteur = 0;
    int i = 0;
    while (l[i] != NULL) {
        if (strcmp(m, l[i]) == 0) {
            compteur++;
        }
        i++;
    }
    return compteur;
}

// 7)-- Fonction pour fusionner deux langages en un seul
langage fusion(langage L1, langage L2) {
    langage resultat = L1;
    int i = 0;
    while (L2[i] != NULL) {
        ajouter(L2[i], resultat);
        i++;
    }
    return resultat;
}

// 8)-- Fonction pour vérifier si deux langages sont joints (en tenant compte de la fonction disjoint)
int joints(langage L1, langage L2) {
    return !disjoints(L1, L2);
}

// Version 2 : Sans utiliser la fonction disjoints
int joints_sans_disjoints(langage L1, langage L2) {
    int i = 0;
    while (L1[i] != NULL) {
        if (appartient(L1[i], L2)) {
            return 1; // les langages ne sont pas disjoints
        }
        i++;
    }
    return 0; // les langages sont disjoints
}

// 9)-- Fonction pour modifier un mot d'un langage
void modifie(mot m, langage l) {
    int i = 0;

    // Recherche de la position du mot dans le langage
    while (l[i] != NULL) {
        if (strcmp(m, l[i]) == 0) {
            // Trouvé le mot, demander à l'utilisateur d'entrer un nouveau mot
            printf("Nouveau mot pour %s : ", m);
            scanf("%s", l[i]); // On suppose que l[i] est assez grand pour contenir le nouveau mot
            return; // Mot modifié avec succès
        }
        i++;
    }

    // Si le mot n'est pas trouvé dans le langage
    printf("Le mot %s n'est pas trouvé dans le langage.\n", m);
}



Si vous avez trouvé cet exercice corrige en Langage C de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 652027193| Réaliser Par Joël_Yk

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam