Bonjour. Je dois réaliser un programme qui trie un tableau de char avec 3 threads, plus un thread qui affiche l'état d'avancement du tri. Je comprends pas bien comment faire pour que les threads trie chacun une partie du tableau. Merci pour vos réponses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <pthread.h> #include <stdio.h> #include <time.h> #include <signal.h> #include <semaphore.h> #include <unistd.h> //#include <Generateur.h> #define M 100000000 #define M1 10000 #define B 31415821 #define C 55 #define C_1 C-1 #define D 23 static int alea[C]; static int j=0; int mult(int p, int q) { int p1, p0, q1, q0; p1 = p/M1; p0 = p%M1; q1 = 1/M1; q0 = q%M1; return (((p0*q1+p1*q0)%M1)*M1+p0*q0)%M; } void init_alea(int germe) { alea[0] = germe; j = 0; while (j<C_1) { j++; alea[j] = (mult(B,alea[alea[j-1]])+1)%M; } } int alea_int(int plage){ int res; j=(j+1)%C; alea[j]=(alea[(j+D)%C]+alea[(j+C_1)%C])%M; res = ((alea[j]/M1)*plage)/M1; return res; } #define MAX 10 #define TRUE 1 #define FALSE 0 typedef struct { int id_th; pthread_t p_th; }pth_descr; sem_t mutex, synchro; int tab_sc[29]; int tab_Sem[29]; void init (){ int i; for (i=0;i<=30;i++){ tab_sc[i]=1; if ((i>9)&&(i<11)){ tab_sc[i]=2; } if((i>19)&&(i<21)){ tab_sc[i]=2; } } } int main(void) { int test; init(); printf("%i", &tab_sc[5]); //init_alea(97); //test=alea_int(97); return 0; } void tri_a_bulle(int t[], int const n) { int j = 0; /* Variable de boucle */ int tmp = 0; /* Variable de stockage temporaire */ /* BoolÈen marquant l'arrÍt du tri si le tableau est ordonnÈ */ int en_desordre = TRUE; /* Boucle de rÈpÈtition du tri et le test qui arrÍte le tri dËs que le tableau est ordonnÈ(en_desordre=FALSE) */ while(en_desordre) { /* Supposons le tableau ordonnÈ */ en_desordre = FALSE; /* VÈrification des ÈlÈments des places j et j+1 */ for(j = 0 ; j < n- 1 ; j++) { /* Si les 2 ÈlÈments sont mal triÈs */ if(t[j] > t[j+1]) { /* Inversion des 2 ÈlÈments */ tmp = t[j+1]; t[j+1] = t[j]; t[j] = tmp; /* Le tableau n'est toujours pas triÈ */ en_desordre = TRUE; } } } }
Partager