Bonjour,

je travaille actuellement sur un projet d'ordonnancement à machine parallèle. Il nous est demandé de transposer un algorithme en langage C. Le problème est que l'algorithme utilise un tableau de dimension m (m étant le nombre de machines utilisé pour l'ordonnancement). Par exemple, s'il y a deux machines, le tableau sera a deux dimensions, dimensions 3 si trois machines, etc ...

J'ai pour l'instant pondu ce code (ne pas faire attention au malloc j'ai mis une valeur au pif pour pas m’embêter) :

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
 
int impossibru (void ** tab,int C,int m)
{
    int i=0;
    if (m==1)
    {
        *tab=0;
        return 0;
    }
    else
    {
        for (i=0;i<C;i++)
        {
            tab[i]=malloc(sizeof(int)*5);
            if (tab[i] == NULL)
            {
                printf("Erreur d'allocation mémoire du tableau");
                exit(-1);
            }
            *tab[i]=impossibru(*tab[i],C,m-1);
        }
    }
}
Comme vous pouvez le voir, j'ai tenté avec la méthode de la récursivité. Tout d'abord, on déclare avec des pointeurs void comme on ne sait pas si se sera un pointeur d'entier ou un pointeur de pointeur.

Si m=1, cas d'arrêt, et on met la valeur dans le tableau. On return 0 pour dire que tout s'est bien passé. Sinon, s'il faut rajouter une nouvelle dimension, on alloue la place mémoire pour le nouveau tableau correspondant à la nouvelle dimension, et on refait appel à la fonction.

J'ai cependant des problèmes dans la gestion du pointeur en paramètre, en particulier avec la dernière ligne
1

Code : Sélectionner tout - Visualiser dans une fenêtre à part
*tab[i]=impossibru(*tab[i],C,m-1);
Cela me met le code d'erreur suivant : invalid use of void expression

Après avoir ressassé plusieurs fois sur mon bout de papier je ne vois pas trop d'où viens ce problème