1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
int main()
{
//Déclaration des variables
//blabla
//DEBUT DU PROGRAMME
while (continuer==1)
{
//Allocation mémoire pour le premier dictionnaire
pdictionnaire = (TDictionnaire)malloc(sizeof(Dictionnaire));
//initialisation des pointeurs
pdictionnaire -> nextModele = NULL;
pdictionnaire_prec = NULL;
//Allocation mémoire de la tête de ligne pour la base de données (séquences d´ADN lues à partir d´un fichier source)
tete_ligne = (TLigne)malloc(sizeof(Ligne));
//Initialisation des pointeurs
tete_ligne -> nextLig = NULL;
tete_ligne -> tab = NULL;
nb_seq = mise_en_memoire_fichier ( tete_ligne); //on récupère le nombre de séquences à traiter
if ( nb_seq > 1 ) //il faut au moins deux séquences pour pouvoir les comparer
{
valeur_1_seq_quorum = 100. / nb_seq; //calcul de la part jouée par chaque séquence au niveau du quorum
afficher_les_sequences_du_fichier( tete_ligne );
//Saisies par l´utilisateur
//blabla
//
pdictionnaire_prec = NULL; //on ne peut pas remonter avant le dictionnaire initial (de taille 0)
compteur = 0;
creer_dictionnaire_initial ( tete_ligne, pdictionnaire, k, nb_seq);
tete_pstructthread = NULL; //initialisation de la liste chaînée pour les threads (voir dans la partie concernée)
if ( taille_max > 0 ) //Recherche d´un motif commun d´au moins une caractère
{
tete_pstructthread = thread_structure_initialisation_noyau( tete_pstructthread, nb_thread, k, quorum, valeur_1_seq_quorum, tete_ligne, nb_seq);
}
while ( pdictionnaire -> taille < taille_max && compteur != 1 ) //tant que l´on a pas atteint la taille maximale du dictionnaire et que
{
compteur = 1;
//on regarde si on a des occurrences dans le dictionnaire originel
//cela demande une vérification énorme lorsque l'on supprime les mots dans le dico pour répondre au quorum
if ( pdictionnaire -> nextModele != NULL ) //le dictionnaire contient au moins un modèle
{
compteur = 0; //compteur ne vaudra 0 que s´il reste des modèles à traiter et 1 dans le cas contraire
if ( pdictionnaire_prec != NULL) //la taille du dictionnaire est supérieure à 0
{
supprimer_dictionnaire(pdictionnaire_prec); //suppression de l'ancien dictionnaire de taille n-1
//pensez à supprimer le dictionnaire précédent et l'autre dictionnaire à la fin de la boucle, et du coup enregistrer la/les bonnes réponses
}
printf("Longueur du dictionnaire en cours. %hd\n", pdictionnaire -> taille +1 ); //Permet de suivre l´avancée du programme pour des calculs complexes
pdictionnaire_prec = pdictionnaire; //actualisation du dictionnaire précédent
pdictionnaire=(TDictionnaire) malloc (sizeof (Dictionnaire)); //allocation mémoire du nouveau dictionnaire
traitement_creation_motifs_appel_thread (pdictionnaire_prec, pdictionnaire, tete_ligne, tete_pstructthread);//création motifs dans le dictionnaire
}
}
//Mécanisme de secours si pas extension du modèle jusqu'à la taille demandée
if ( pdictionnaire -> nextModele != NULL ) //Si le dictionnaire actuel contient au moins un modèle, alors
{
if ( pdictionnaire_prec != NULL) //Si l´utilisateur n´a pas demandé un dictionnaire de taille 0, alors
{
supprimer_dictionnaire(pdictionnaire_prec); //suppression du dictionnaire précédent
}
}
else
{
//le dictionnaire actuel ne contient aucun modèle, on a donc pas pu étendre le dictionnaire à la taille souhaitée
supprimer_dictionnaire(pdictionnaire); //on supprime alors le dictionnaire vide...
pdictionnaire = pdictionnaire_prec; //...et on revient au dictionnaire précédent, qui constitue le plus grand dictionnaire possible et donc la meilleure solution
}
//Demande si sauvegarde dans un fichier
printf("\nVoulez-vous sauvegarder les résultats obtenus dans un fichier (resultat.txt)? \n");
printf("Tapez 1 pour oui \n");
printf("Tapez 0 pour non \n");
scanf("%d", &choix_enregistrer );
//Affichage des résultats obtenus
afficher_enregistrer_dictionnaire ( pdictionnaire, taille_max, k, tete_ligne, choix_enregistrer );
supprimer_dictionnaire(pdictionnaire);//Suppression du dictionnaire pour libérer l´espace mémoire alloué
if ( tete_pstructthread != NULL)
{
thread_structure_noyau_suppression( tete_pstructthread );
}
}
else
{
//blabla
}
supprimer_bdd (tete_ligne);
printf("Voulez-vous charger un autre fichier? \n");
printf("Tapez 1 pour oui \n");
printf("Tapez 0 pour non \n");
scanf("%d", &continuer );
if ( continuer == 0 ) //sortie du programme
{
printf("\nMerci d'avoir utilisé notre programme... Et à bientôt!!!\n");
}
}
return 0;
} |
Partager