Bonjour,
Je suis actuellement sur cette exo dans les cours et tutoriels pour apprendre le C ,mon programme fonctionne très bien(il passe les tests),sauf pour l'allocation où il me dit que la mémoire pour l'allocation est dépassé.
Je ne vois vraiment pas comment je peut améliorer mon programme,donc j'ai besoin de votre aide^^.
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct pile
{
    struct pile * element_prec;
    struct pile * element_suiv;
    int date;
}pile;
 
typedef struct liste
{
    pile * dernier_elem;
    pile * premier_elem;
}liste;
 
void ajouter(liste * l,int date)
{
    pile * new_elem = malloc(sizeof(pile));
    new_elem->element_prec=l->dernier_elem;
    new_elem->date=date;
    new_elem->element_suiv=NULL;
    if (l->premier_elem==NULL)
        l->premier_elem=new_elem;
    else
        l->dernier_elem->element_suiv=new_elem;
    l->dernier_elem=new_elem;
}
 
int enleve(liste *l)
{
    if(l->premier_elem!=NULL)
    {
        int date = l->premier_elem->date;
        pile * p = l->premier_elem->element_suiv;
        free(l->premier_elem);
        l->premier_elem=p;
        if(l->premier_elem!=NULL)
        l->premier_elem->element_prec=NULL;
        return date;
    }
    else
    {
        return 0;
    }
}
 
void init_list(liste * l)
{
    l->premier_elem=NULL;
    l->dernier_elem=NULL;
}
 
int main(void)
{
	int nb_operation;
	int nb_distributeur;
	int n_distributeur;
	int q_produit;
	int date;
	int i,a;
	liste * distributeur=NULL;
 
 
	scanf("%d",&nb_distributeur);
	distributeur=malloc(nb_distributeur*sizeof(liste));
 
	scanf("%d",&nb_operation);
	for(i=0;i<nb_distributeur;i++)
	{
	    init_list(&distributeur[i]);
	}
	for(i=0;i<nb_operation;i++)
	{
	    scanf("%d %d %d",&n_distributeur,&q_produit,&date);
	    if(q_produit>0)
	    {
	        for(a=0;a<q_produit;a++)
	        {
	            ajouter(&distributeur[n_distributeur-1],date);
	        }
	    }
	    if(q_produit<0)
	    {
	        for(a=q_produit;a<0;a++)
	        {
	            enleve(&distributeur[n_distributeur-1]);
	        }
	    }
	}
 
	for(i=0;i<nb_distributeur;i++)
	{
	    int min=enleve(&distributeur[i]);
	    while(distributeur[i].premier_elem!=NULL)
	    {
	        int nb_actuel = enleve(&distributeur[i]);
	        /*printf("Enleve %d = %d\n",i,nb_actuel);*/
	        if(min>nb_actuel)
               {
                min=nb_actuel;
               }
	    }
	    printf("%d\n",min);
	}
 
	free(distributeur);
	return 0;
}