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