Pointeurs et tableaux de pointeurs

ardnaxela69 Messages postés 2 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 7 mai 2006 - 7 mai 2006 à 15:21
ardnaxela69 Messages postés 2 Date d'inscription mercredi 25 janvier 2006 Statut Membre Derniè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 ?

Le sujet est à cette adresse : http://eric.univ-lyon2.fr/~jdarmont/docs/l3ids-c-dossier0506.pdf

Et voici ce que j'ai déjà écrit :

#include <stdio.h>
#include <stdlib.h>


#define N 5
#define TT_MIN 1
#define TT_MAX 10
#define TA_MIN 1
#define TA_MAX 10
#define DMAX 20


/*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;
}




Merci de votre aide

4 réponses

nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
7 mai 2006 à 15:51
Utilise des classes de la STL, ça sera plus simple :

Regarde sur google les classes :
- vector
- list
- deque

Avec ça, tu n'auras pas à gérer l'allocation de tes tableaux : tout est géré et optimisé par la STL.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 mai 2006 à 16:16
Mais son truc, c'est du C, donc je suppose que le C++ est interdit.
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
7 mai 2006 à 16:18
Ah oui, je n'avais pas vu... Il y a des sources qui utilisent des listes chaînées sur ce site, fait une recherche.
0
ardnaxela69 Messages postés 2 Date d'inscription mercredi 25 janvier 2006 Statut Membre Derniè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
0
Rejoignez-nous