Пример #1
0
int main ()
{
    int cas;
    tableau *tab = NULL;
    tab = remplissage_tableau(tab);//remplissage d'un tableau
    affichage_tableau(tab);//affichage
    printf("------Comment voulez-vous procceder pour le tri du tableau ?!------\n"
           "1 - Pour un tri a bulles.\n"
           "2 - Pour un tri par selection.\n"
           "Votre reponse:");
    scanf("%d",&cas);
    switch (cas){
        case 1:   tri_bulleo(tab);//si 1 appliquer le tri a bulle
                  break;
        /*case 2:   tab = tri_incertion(tab);//si 2 appliquer le tri par incertion
                  break;*/
        case 2:   tri_selection(tab);//si 3 appliquer le tri par selection echange
                  break;
        /*case 4: tri_rapide(tab, 0, tab->dernier_elem);
                  break; */
    }
    return 0;
}
Пример #2
0
/*Cette fonction effectue le travail du processus chef.
 * elle prend en paramètre l'opération à effectuer, et le nom du fichier à lire
 * elle renvoie le résultat de l'opération sur tout le fichier */
float chef(void* fonction, char* nom_fichier){
	
			/// Déclarations des variables ///
	/*fd -> fichier, positions_deb -> pour lire les lignes du fichier, total_lignes -> première ligne du fichier,
	 * nb_thread -> nombre de thread que le processus doit créer*/
	int fd, position_deb, total_lignes, nb_thread;
	float nombre; // retour de la fonction lecture avant conversion en total_lignes
	ATTR* thread; //un thread
	float* fichier; //un tableau contenant toutes les valeurs du fichier
	float* retour; //un tableau qui va contenir tous les retour des différents threads
	int i;
	
			/// Initialisations ///
	fd = open(nom_fichier, O_RDONLY); // ouverture du fichier
	if(fd == -1){
		printf("fichier pas ouvert\n");
	}
	position_deb = 0;
	nombre = lecture_ligne(fd, &position_deb);
	if(nombre == 0 || nombre == -1) exit(EXIT_FAILURE); // si si nombre = -1 alors il n'y à rien à lire, le fichier est vide
														// si nombre = 0 alors il n'y a aucune valeur dans le fichier
	total_lignes = (int) nombre;									
	nb_thread = total_lignes/PLAGE; // calcul du nombre de threads par rapport au nombre d'éléments qu'un thread peut traiter
	if(fmod(total_lignes, PLAGE) != 0) nb_thread++; //vérification qu'il ne reste pas des valeurs à traiter, si oui on rajoute un thread
	fichier = malloc(sizeof(float)*total_lignes);
	retour = malloc(sizeof(float)*nb_thread);
	thread = malloc(sizeof(ATTR)*nb_thread);
	
			/// Remplissage du tableau avec les valeurs contenues dans le fichier ///
	remplissage_tableau(fichier, fd, total_lignes, &position_deb);
	
			/// Initialisation et création des threads ///
	init_creation_threads(thread, fichier, nb_thread, total_lignes, fonction);
	
			/// Obtention des réponses ///
	/* Ici on remplit le tableau retour avec les retour des threads */
	for(i=0; i<nb_thread; i++){
		pthread_join(thread[i].th, NULL);
		retour[i] = thread[i].retour;
	}
	
			/// Recherche de la réponse finale ///
	if(nb_thread == 1){ //s'il n'y a qu'un seul thread, on peut renvoyer tout de suite la réponse
		close(fd);
		free(thread);
		free(fichier);
		free(retour);
		return thread[0].retour;
	}
	
	if(fonction == odd){
		float rep = odd_tab(nb_thread, retour);
		close(fd);
		free(thread);
		free(fichier);
		free(retour);
		return rep;
	}
	
	/* S'il y a plusieurs thread, on créer un dernier thread qui va s'occuper d'effectuer une dernière fois
	 * l'opération demandée mais sur l'ensemble des réponses données par les threads, soit sur le tableau retour */
	float rep; //pour le retour de la fonction reponse 
	rep = reponse(retour, fonction, nb_thread);
	close(fd);
	free(thread);
	free(fichier);
	free(retour);
	
	return rep;
}