ardnaxela69
Messages postés2Date d'inscriptionmercredi 25 janvier 2006StatutMembreDernière intervention 7 mai 2006
-
7 mai 2006 à 15:21
ardnaxela69
Messages postés2Date d'inscriptionmercredi 25 janvier 2006StatutMembreDernière intervention 7 mai 2006
-
7 mai 2006 à 18:16
Bonjour,
Je dois réaliser un projet de simulation de files d'attentes en C et j'ai de gros soucis avec les pointeurs.
Comment doit-on déclarer des tableaux de pointeurs ? Et comment accède-t-on à ses éléments ?
/*DECLARATION DE LA CELLULE DE TYPE POINTEUR POUR POUVOIR CREER LA LISTE CHAINEE CLIENTS*/
typedef struct cellClients {
int date;
struct cellClients *suiv;
} Clients;
/*DECLARATION DE LA CELLULE DE TYPE POINTEUR POUR POUVOIR CREER LA LISTE CHAINEE ECHEANCIER*/
typedef struct cellEcheancier {
char type;
int date;
int num;
struct cellEcheancier *suiv;
} Echeancier;
/*DECLARATION DES FONCTIONS UTILISES DANS LE PROGRAMME*/
int mini (int *tab, int taille);
void init (int **ttete, int **tqueue, int taille);
void NeauClient(int imin, int d, int **ttete, int **ttqueue, int **t, char **typ);
void NeauEcheancier(int imin, int d, Echeancier **tet, char typ, int *t);
void SupprClient(int imin, int **ttete, int **t);
void SupprEcheancier(Echeancier **tete);
/*PROGRAMME PRINCIPAL*/
main() {
/*déclaration des variables*/
int d;
int imin;
int tt;
char type;
Echeancier *tete=NULL;
int *tabtete[N];
int *tabqueue[N];
int tabtaille[N];
d=0;
type='A';
NeauEcheancier(imin,d,&tete,type,tabtaille);
while ((d<DMAX) && (tete!=NULL)){
if (strcmp(tete->type,'A')==0) {
NeauClient(imin,d,&tabtete,&tabqueue,tabtaille,type);
NeauEcheancier(imin,d,&tete,type,tabtaille);
}
else {
SupprClient(imin,&tabtete,&tabtaille);
if (tabtete[0]!=NULL){
type='F';
tt=TT_MIN+(int)((float)rand()*(TT_MAX-TT_MIN+1)/(RAND_MAX+1));
d=d+tt;
NeauEcheancier(imin,d,&tete,type,tabtaille);
{
{
d=tete->date;
SupprEcheancier(&tete);
}
}
/*FONCTION QUI CHERCHE LA FILE D'ATTENTE DE PLUS PETITE TAILLE*/
int mini (int *tab, int taille) {
int min, i, imin ;
min=tab[0];
imin=0;
for (i=1;i<taille;i++){
if (tab[i]<min){
min=tab[i];
imin=i;
}
}
return(imin);
}
/*FONCTION QUI INITIALISE LES TABLEAUX DE QUEUES ET DE TETES A NULL*/
void init (int **ttete, int **tqueue, int taille) {
int i;
for (i=0;i<taille;i++){
*ttete[i]=NULL;
*tqueue[i]=NULL;
}
}
/*FONCTION QUI AJOUTE UN NOUVEAU CLIENT A LA FIN DE LA FILE*/
void NeauClient(int imin, int d, int **ttete, int **ttqueue, int **t, char **typ){
Clients *nouveau;
int tt, ta;
nouveau=(Clients*)malloc(sizeof(Clients));
nouveau->date=d;
nouveau->suiv=NULL;
mini(t,N);
if (*ttete[imin]==NULL){
*ttete[imin]=nouveau;
*ttqueue[imin]=nouveau;
*typ='F';
tt=TT_MIN+(int)((float)rand()*(TT_MAX-TT_MIN+1)/(RAND_MAX+1));
d=d+tt;
}
else {
*tqueue[imin]->suiv=nouveau;
*tqueue[imin]=nouveau;
*typ='A';
ta=TA_MIN+(int)((float)rand()*(TA_MAX-TA_MIN+1)/(RAND_MAX+1));
d=d+ta;
}
*t[imin]=*t[imin]+1;
}
/*FONCTION QUI AJOUTE UN NOUVEL EVENEMENT DANS L'ECHEANCIER*/
void NeauEcheancier(int imin, int d, Echeancier **tet, char typ, int *t){
Echeancier *nouveau, *cour, *tmp;
mini(t,N);
nouveau=(Echeancier*)malloc(sizeof(Echeancier));
strcpy(nouveau->type,typ);
nouveau->date=d;
nouveau->num=imin;
nouveau->suiv=NULL;
if (tet==NULL){
*tet=nouveau;
}
else {
while (cour!=NULL){
tmp=cour;
cour=tmp->suiv;
}
tmp->suiv=nouveau;
}
}
/*FONCTION QUI SUPPRIME UN CLIENT DANS LA FILE*/
void SupprClient(int imin, int **ttete, int **t){
Clients *cour;
mini(t,N);
cour=*ttete[imin]->suiv;
free(*ttete[imin]);
*ttete[imin]=cour;
*t[imin]=*t[imin]-1;
}
/*FONCTION QUI L'EVENEMENT DE L'ECHEANCIER*/
void SupprEcheancier(Echeancier **tete){
Echeancier *cour;
cour=*tete->suiv;
free(*tete);
*tete=cour;
}
ardnaxela69
Messages postés2Date d'inscriptionmercredi 25 janvier 2006StatutMembreDernière intervention 7 mai 2006 7 mai 2006 à 18:16
Oui j'écris le programme en C (le C++ n'est pas encore au programme, et heureusement c'est déjà assez compliqué comme ça !)
Je vais reagerder sur les sites que vous m'avez conseillé
Merci