salut chers amis

j'ai un problème dans la fonction battre_paquet(pcarte p) qui qui crée à partir du paquet p contenant 52 cartes , un nouveau paquet pb (paquet battu) résultat . on extrait aléatoirement une carte du paquet p pour l’insérer en fin de pb jusqu’à ce que p soit vide , utiliser le fonction rand() de génération de nombre aléatoire .

voila code source:


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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
typedef struct element
{
    int couleur;
    int valeur;
    struct element *suivant;
} carte;
 
typedef carte* pcarte;
 
pcarte init()
{
    pcarte p;
    p=(carte*)malloc(sizeof(carte));
 
    printf("**INSERTION**\n\n");
    printf("les couleurs: 1 -> 4\n");
    printf("les valeurs: 1 -> 13\n\n");
    do {
          printf("Donner la couleur: ");
          scanf("%d",&p->couleur); }while(p->couleur<1 || p->couleur>4);
    do {
          printf("Donner la valeur: ");
          scanf("%d",&p->valeur); }while(p->valeur<1 || p->valeur>13);
 
    p->suivant=NULL;
    return p;
}
 
void inserer(pcarte p)
{
   char c;
   pcarte tmp,nouv;
   tmp=p;
 
   while(printf("\nAjouter un element? (O/N): "),fflush(stdin),scanf("%c",&c),c=='o')
   {
       nouv=(carte*)malloc(sizeof(carte));
       do {
          printf("Donner la couleur: ");
          scanf("%d",&nouv->couleur); }while(nouv->couleur<1 || nouv->couleur>4);
       do {
          printf("Donner la valeur: ");
          scanf("%d",&nouv->valeur); }while(nouv->valeur<1 || nouv->valeur>13);
 
       tmp->suivant=nouv;
       nouv->suivant=NULL;
       tmp=tmp->suivant;
   }
}
 
void inserer_fin(pcarte p, int c, int v)
{
    pcarte tmp,nouv;
    tmp=p;
    nouv=(carte*)malloc(sizeof(carte));
 
    nouv->couleur=c;
    nouv->valeur=v;
    nouv->suivant=NULL;
 
    while(tmp->suivant!=NULL)
    {
        tmp=tmp->suivant;
    }
    tmp->suivant=nouv;
}
 
void lister_carte(pcarte p)
{
    pcarte tmp;
    tmp=p;
    printf("\n\n**LA LISTE**\n");
    while(tmp)
    {
        printf("%d\t%d\n",tmp->couleur,tmp->valeur);
        tmp=tmp->suivant;
    }
}
 
pcarte extraire(pcarte p, int i)
{
    int count;
    pcarte tmp=p;
 
    for (count=1;count<i;count++)
    {
        tmp = tmp->suivant;
    }
    return tmp;
}
 
pcarte battre_paquet(pcarte p)
{
    pcarte pb=NULL,tmp;
    int i;
 
    srand(time(NULL));
    for(i=1;i<=52;i++)
    {
      tmp=extraire(p,rand()%53);
      inserer_fin(&pb,tmp->couleur,tmp->valeur);
      free(tmp);
    }
    return pb;
}
 
int main()
{
    pcarte p,temp,test;
    p=init();
    lister_carte(p);
    inserer(p);
    lister_carte(p);
    inserer_fin(p,1,1);
    lister_carte(p);
    temp=extraire(p,3);
    printf("\nla couleur est: %d",temp->couleur);
    printf("\nla valeur est: %d",temp->valeur);
    test=battre_paquet(p);
    lister_carte(test);
 
    return 0;
}