begin process at 2012 05 28 09:10:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

argument d'une fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

argument d'une fonction

jeudi 4 mai 2006 à 16:50:36 | argument d'une fonction

tomalille

bonjour,

j'ai une question qui va vous sembler très bête mais bon...J'ai besoin de faire une fonction ayant un tableau multidimentionnel en paramètre. Qqn pourrait-il m'aider? J'ai fait:
void fonction(const int origine,const int nbNoeuds, const int distance[][]);
Merci beaucoup
Thomas

jeudi 4 mai 2006 à 17:01:42 | Re : argument d'une fonction

ymca2003

seule la première dimension peut être inconnue, les autres doivent êtres spécifiées...
void fonction(const int distance[][6]);

autre solution :

void fonction(const int* distance, int dim1, int dim2)
{
// case [x][y]
  int val = *(distance+dim2*y+x);
}
=> ce code montre pourquoi le compilo avait besoin de dim2 pour générer du code mais pas dim1


appel :
int tab[5][6];
fonction(&tab[0][0], 5, 6);
jeudi 4 mai 2006 à 17:43:46 | Re : argument d'une fonction

tomalille

Merci pour ta réponse. Je l'ai essayé et j'ai encore un petit problème. Je te mets une partie de mon code:
bool bellmanFord(int origine, int nbNoeuds, float **distance)
        {
            int i,u,v;
            float d[nbNoeuds];
            int pi[nbNoeuds];
            ARETE a;
            vector<ARETE>::const_iterator itr = aretes.begin();
              vector<ARETE>::const_iterator fin = aretes.end();
                    /*Initialisation*/
            for(i=0;i<nbNoeuds;i++)
            {
                d[i] = INT_MAX;
                pi[i] = nbNoeuds + 1;
            }
           
            d[origine] = 0;

            for(i=0;i<nbNoeuds - 1 ; i++)
            {
                while(itr != fin)
                {
                    a = *itr;
                    if(d[a.destination] > d[a.origine] + distance[a.origine][a.destination])
                    {
                        d[a.destination] = d[a.origine] + distance[a.origine][a.destination];
                        pi[a.destination] = a.origine;
                    }
                    itr ++;
                }
            }
           
            itr = aretes.begin();
            while(itr!=fin)
            {
                a = *itr;
                if(d[a.destination] > d[a.origine] + distance[a.origine][a.destination])
                    return false;
                itr ++;
            }
           
            return true;
        };

Appelle de la fonction:
if(g.bellmanFord( 0 , 5 , &distance[0][0]))
        cout << "TRUE";
    else
        cout << "FALSE";

erreur sous KDE
main.cpp:776: error: no matching function for call to 'Graphe::bellmanFord(int, int, float*)'
Graphes.h:83: note: candidates are: bool Graphe::bellmanFord(int, int, float**)

jeudi 4 mai 2006 à 18:09:25 | Re : argument d'une fonction

ymca2003

distance est un pointeur simple (le multi-dimension est en fait une zone continue de lignes d'ou la nécessité de savoir la taille d'une ligne)
jeudi 4 mai 2006 à 18:16:50 | Re : argument d'une fonction

tomalille

merci,
lorsque je change la specification comme ceci:
bool bellmanFord(int origine, int nbNoeuds, float *distance, int borneRoutage);
j`ai les erreurs suivantes:
Graphes.h: In member function 'bool Graphe::bellmanFord(int, int, float*, int)':
Graphes.h:105: error: invalid types 'float[int]' for array subscript
Graphes.h:107: error: invalid types 'float[int]' for array subscript
Graphes.h:118: error: invalid types 'float[int]' for array subscript

Merci beaucoup pour ton aide
Thomas
jeudi 4 mai 2006 à 19:16:28 | Re : argument d'une fonction

ymca2003

peux-tu mettre le code des lignes erronées ?
jeudi 4 mai 2006 à 19:40:18 | Re : argument d'une fonction

tomalille

105: if(d[a.destination] > d[a.origine] + distance[a.origine][a.destination])
107: d[a.destination] = d[a.origine] + distance[a.origine][a.destination];
118:if(d[a.destination] > d[a.origine] + distance[a.origine][a.destination])
776 (du main):if(g.bellmanFord( 0 , 5 , &distance[0][0],borneRoutage))

Graphes.h:105: error: invalid types 'int[int]' for array subscript
Graphes.h:107: error: invalid types 'int[int]' for array subscript
Graphes.h:118: error: invalid types 'int[int]' for array subscript
main.cpp: In function 'void heuristique()':
main.cpp:776: error: no matching function for call to 'Graphe::bellmanFord(int, int, float*, int&)'
Graphes.h:83: note: candidates are: bool Graphe::bellmanFord(int, int, int*, int)
make: *** [main.o] Error 1

code:
bool bellmanFord(int origine, int nbNoeuds, int *distance, int borneRoutage)
        {
            int i,u,v;
            float d[nbNoeuds];
            int pi[nbNoeuds];
            ARETE a;
            vector<ARETE>::const_iterator itr = aretes.begin();
              vector<ARETE>::const_iterator fin = aretes.end();
                    /*Initialisation*/
            for(i=0;i<nbNoeuds;i++)
            {
                d[i] = INT_MAX;
                pi[i] = nbNoeuds + 1;
            }
           
            d[origine] = 0;

            for(i=0;i<nbNoeuds - 1 ; i++)
            {
                while(itr != fin)
                {
                    a = *itr;
                    if(d[a.destination] > d[a.origine] + distance[a.origine][a.destination])
                    {
                        d[a.destination] = d[a.origine] + distance[a.origine][a.destination];
                        pi[a.destination] = a.origine;
                    }
                    itr ++;
                }
            }
           
            itr = aretes.begin();
            while(itr!=fin)
            {
                a = *itr;
                if(d[a.destination] > d[a.origine] + distance[a.origine][a.destination])
                    return false;
                itr ++;
            }
           
            return true;
        };

Appelle de la fonction:
float distance[nbNoeuds][nbNoeuds];
...
if(g.bellmanFord( 0 , 5 , &distance[0][0],borneRoutage))
        cout << "TRUE";
    else
        cout << "FALSE";

Merci
vendredi 5 mai 2006 à 11:08:56 | Re : argument d'une fonction

ymca2003

Mais là tu n'as rien changer de ce que j'ai dit plus haut.

La fonction bellmanFord doit avoir le format suivant :
bellmanFord(int origine, int nbNoeuds, floayt* distance, int dim1, dim2, int borneRoutage)

distance[x][y] à remplacer par :
*(distance+y*dim2+x)

appeler comme suit :
float distance[nbNoeuds][nbNoeuds];
bellmanFord( 0 , 5 , &distance[0][0],  nbNoeuds, nbNoeuds, borneRoutage)

Etant donné que nbNoeuds semble être une variable globale (ou un define), tu peux skipper le passage en param et utiliser la var globale :
bellmanFord(int origine, int nbNoeuds, floayt* distance, int borneRoutage)
*(distance+y*nbNoeuds+x)
bellmanFord( 0 , 5 , &distance[0][0],  borneRoutage)
vendredi 5 mai 2006 à 11:22:22 | Re : argument d'une fonction

ymca2003

désolé je me suis trompé dans les indices des 2 dimensions :

distance[x][y] à remplacer par :
*(distance+x*dim2+y)


Cette discussion est classée dans : fonction, int, const, argument


Répondre à ce message

Sujets en rapport avec ce message

ProB avec la fonction int remove (const char*) [ par Avalon10101 ] _-=AvAloN=-_Jai un petit prob avec cette fonction :Je cré mon prog il na aucune erreur é il est donc pré à etre exécuter pour suprimer un fichier test fonction qsort [ par rems38 ] bonjour,pouvez vous me dire ce que fais ds les grandes lignes:  int i; for(i=0;iglodata.NtypTh;i++)  ISortedThCost[i]=i;  qsort((void*)&ISortedThCost, Fonction chr(int c); en C++ [ par DakM ] Bonsoir,je voudrais savoir quelle est la fonction chr() de php ou de mirc, en C++(si elle existe)merci d'avance I'm a killing <FONT color=#ff000 [C] Méthode (Fonction, procédure) interne, locale [ par nitrique ] Bonjour @ tous,J'aimerais faire un fonction locale (c'est à dire: Dans ma fonction)Mais ça pête.int SaisiePasse(char matricule[lMaxCode]) {    char to Variable de type char [ par wolfcyber ] bonjour, J'aimerais savoir l'equivalent en C++ de la fonction "Mid(int nStart,int nCount)" de la classe CString, pour une variable de type char. Cet problème dans une fonction de comptage [ par the diouk ] voici le problème, je finalise l'application en lançant le programme essentiel : void comptage (int,int,int)mais du coup ça déconne : des fenêtre refu Uttilisation la fonction d'une DLL [ par aDebhian ] Pour ce faire, j'ai lu msdn, codes-sources et j'en suis arrivé à ceci: [FONCTION DLL] extern "C" __declspec(dllexport) int tests(int test) {     retu (__cdecl *) => kesako? [ par Oeil_de_taupe ] Bonjour tout le monde, J'ai créé deux classes qui représentent un protocole pour envoyer des données entre deux PC. Lors de l'appele de leur construc Probleme de pointeur (enfin je pense) dans l'utilisation d'une fonction [ par neutrix ] Salut.. Help  Je souhaite créer un main et une fonction. Tout cela me servira ensuite en info industriel pour un microcontroleur. Le main s'occupera


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,186 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales