Bonjour,
Je débute en C. Je veux déclarer un tableau qui se remplie aléatoirement jusqu'à atteindre une demande fixe, dans l'exemple (demande=50)

Ce que je veux faire c'est de mettre une contrainte sur chaque case pour que la valeur affecté aléatoirement doit être entre 0 et un max dans l'exemple (0, (tableau[j].capacite_max).

Voici un code qui tourne chez moi pour un tableau de 4 cases qui correspondent à (4 fournisseurs dans mon problème).

Cependant, lorsque je retire les commentaire dans le main pour mettre une condition sur chaque case ça ne marche pas. Je pense que j'ai fait une erreur lors de l'appelle de la procédure. Merci

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
#include <math.h>
#include <time.h>
#include <stdbool.h>
 
#define nbre_fournisseurs 4
#define demande 50
#define randomize() srand((unsigned)time(NULL))
 
int main()
{
    /*tableau[0].capacite_max = 10;
    tableau[1].capacite_max = 20;
    tableau[2].capacite_max = 30;
    tableau[3].capacite_max = 40;*/
    initialise_population();
}
 
typedef struct fournisseurs fournisseurs;
struct fournisseurs
{
    int capacite_max;
};
 
fournisseurs tableau[nbre_fournisseurs];
 
/*
******************************************
* initialise_population *
* Creates and initialize a population *
******************************************
*/
 
initialise_population()
{
    randomize();
    int myrand(int min, int max)
    {
        return rand()%(min-max+1)+min;
    }
 
    int  j;
    int pos;
    int s=0;
    int tableau[nbre_fournisseurs];
 
    while (s!= demande)
    {
        for ( j = 0 ; j < nbre_fournisseurs ; j++)
            tableau [j] = 0;
        s = 0;
        for ( j = 0 ; j < nbre_fournisseurs ; j++ )
        {
            pos = myrand(0, nbre_fournisseurs);
 
            if (tableau[pos] == 0)
            {
                if ( s == demande )
                    tableau[j] = 0;
                else
                {
                    if ( tableau[j] <=  demande - s )
                    {
                        // tableau[j] = myrand(0, (tableau[j].capacite_max));
                        tableau[j] = myrand(0, 40);
                    }
                    else
                    {
                        tableau[j] = myrand(0, (demande - s));
                    }
                }
 
                s+= tableau[j] ;
            }
        }
    }
 
 
//Affichage de ses valeurs pour vérifier
    for (j = 0 ; j < nbre_fournisseurs ; j++)
    {
        printf("%d\n", tableau[j]);
    }
    {
        printf("\n");
    }
}