Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Marc Boyer
Le 26-09-2005, Bajou a écrit :
Bonjour, j'ai écris ce code, et j'ai eu une erreur, je sais pas quelle est la raison! Merci pour votre aide.
//Déclaration: void croisement(int*,int); int gene[100][100] int taille_popu ;
//appel de la fonction croisement croisement(gene,taille_popu);
La variable 'gene' est une matrice 100x100 d'entiers, soit en fait un tableau de 100 tableaux de 100 entiers. La variable croisement attend un tableau d'entiers. Un tableau d'eniers et un tableau de tableaux d'entiers sont des choses différentes.
Marc Boyere -- À vélo, prendre une rue à contre-sens est moins dangeureux que prendre un boulevard dans le sens légal. À qui la faute ?
Le 26-09-2005, Bajou <bajou123@yahoo.fr> a écrit :
Bonjour,
j'ai écris ce code, et j'ai eu une erreur, je sais pas quelle est la
raison!
Merci pour votre aide.
//Déclaration:
void croisement(int*,int);
int gene[100][100]
int taille_popu ;
//appel de la fonction croisement
croisement(gene,taille_popu);
La variable 'gene' est une matrice 100x100 d'entiers,
soit en fait un tableau de 100 tableaux de 100 entiers.
La variable croisement attend un tableau d'entiers.
Un tableau d'eniers et un tableau de tableaux d'entiers
sont des choses différentes.
Marc Boyere
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?
Bonjour, j'ai écris ce code, et j'ai eu une erreur, je sais pas quelle est la raison! Merci pour votre aide.
//Déclaration: void croisement(int*,int); int gene[100][100] int taille_popu ;
//appel de la fonction croisement croisement(gene,taille_popu);
La variable 'gene' est une matrice 100x100 d'entiers, soit en fait un tableau de 100 tableaux de 100 entiers. La variable croisement attend un tableau d'entiers. Un tableau d'eniers et un tableau de tableaux d'entiers sont des choses différentes.
Marc Boyere -- À vélo, prendre une rue à contre-sens est moins dangeureux que prendre un boulevard dans le sens légal. À qui la faute ?
Bajou
Ce qui est sure que un tableau d'eniers et un tableau de tableaux d'entiers sont des choses différentes. A ce que je comprends c'est que la déclaration de la fonction croisement: void croisement(int*,int); est fausse!??? Est ce que je dois faire comme ca?: void croisement(int**,int);
Merci
Ce qui est sure que un tableau d'eniers et un tableau de tableaux
d'entiers
sont des choses différentes. A ce que je comprends c'est que la
déclaration de la fonction croisement:
void croisement(int*,int); est fausse!???
Est ce que je dois faire comme ca?:
void croisement(int**,int);
Ce qui est sure que un tableau d'eniers et un tableau de tableaux d'entiers sont des choses différentes. A ce que je comprends c'est que la déclaration de la fonction croisement: void croisement(int*,int); est fausse!??? Est ce que je dois faire comme ca?: void croisement(int**,int);
Merci
kanze
Bajou wrote:
Ce qui est sure que un tableau d'eniers et un tableau de tableaux d'entiers sont des choses différentes. A ce que je comprends c'est que la déclaration de la fonction croisement: void croisement(int*,int); est fausse!??? Est ce que je dois faire comme ca?: void croisement(int**,int);
Le mieux ne serait-il pas d'écrire littéralement ce que tu attends : croisement( int [100][100], int ) ; Ce n'est pas effectivement ce que tu vas avoir, parce que le langage à des règles spéciales pour ce cas-ci, mais ça doit marcher. (Ce que la déclaration ci-dessus déclare exactement, c'est : croisement( int (*)[100], int ) ; Mais à mon avis, la première écriture exprime plus clairement l'idée que tu veux un tableau, et non l'adresse d'un élément seul.)
Alternativement, on peut passer des tableaux par référence : croisement( int (&)[100][100], int ) ; Ça pose un peu le problème, en révanche, que ce n'est pas trop naturel de les traiter comme ça s'ils sont alloués dynamiquement, parce que le type complet est déjà perdu en sortie de new. C-à-d :
int matriceLocale[ 100 ][ 100 ] ; croisement( matriceLocale ) ; // Bon int (*matriceDynamique)[ 100 ] = new int[ 100 ][ 100 ] ; croisement( ??? ) ;
Note qu'avec la première solution, il faut que la deuxième dimension soit une constante ; on peut écrire : croisement( int [][ 100 ], int ) ; mais non : croisement( int [][], int ) ; ni : croisement( int (*)[], int ) ; Et avec la deuxième solution, il faut que les deux dimensions soient constantes.
Tout compte fait, je crois que la meilleur solution, c'est d'écrire une classe Matrice, qui se base sur std::vector ou sur std::valarray. Les tableaux à la C ne marchent pas très bien.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Bajou wrote:
Ce qui est sure que un tableau d'eniers et un tableau de
tableaux d'entiers sont des choses différentes. A ce que je
comprends c'est que la déclaration de la fonction croisement:
void croisement(int*,int); est fausse!???
Est ce que je dois faire comme ca?:
void croisement(int**,int);
Le mieux ne serait-il pas d'écrire littéralement ce que tu
attends :
croisement( int [100][100], int ) ;
Ce n'est pas effectivement ce que tu vas avoir, parce que le
langage à des règles spéciales pour ce cas-ci, mais ça doit
marcher. (Ce que la déclaration ci-dessus déclare exactement,
c'est :
croisement( int (*)[100], int ) ;
Mais à mon avis, la première écriture exprime plus clairement
l'idée que tu veux un tableau, et non l'adresse d'un élément
seul.)
Alternativement, on peut passer des tableaux par référence :
croisement( int (&)[100][100], int ) ;
Ça pose un peu le problème, en révanche, que ce n'est pas trop
naturel de les traiter comme ça s'ils sont alloués
dynamiquement, parce que le type complet est déjà perdu en
sortie de new. C-à-d :
int matriceLocale[ 100 ][ 100 ] ;
croisement( matriceLocale ) ; // Bon
int (*matriceDynamique)[ 100 ] = new int[ 100 ][ 100 ] ;
croisement( ??? ) ;
Note qu'avec la première solution, il faut que la deuxième
dimension soit une constante ; on peut écrire :
croisement( int [][ 100 ], int ) ;
mais non :
croisement( int [][], int ) ;
ni :
croisement( int (*)[], int ) ;
Et avec la deuxième solution, il faut que les deux dimensions
soient constantes.
Tout compte fait, je crois que la meilleur solution, c'est
d'écrire une classe Matrice, qui se base sur std::vector ou sur
std::valarray. Les tableaux à la C ne marchent pas très bien.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Ce qui est sure que un tableau d'eniers et un tableau de tableaux d'entiers sont des choses différentes. A ce que je comprends c'est que la déclaration de la fonction croisement: void croisement(int*,int); est fausse!??? Est ce que je dois faire comme ca?: void croisement(int**,int);
Le mieux ne serait-il pas d'écrire littéralement ce que tu attends : croisement( int [100][100], int ) ; Ce n'est pas effectivement ce que tu vas avoir, parce que le langage à des règles spéciales pour ce cas-ci, mais ça doit marcher. (Ce que la déclaration ci-dessus déclare exactement, c'est : croisement( int (*)[100], int ) ; Mais à mon avis, la première écriture exprime plus clairement l'idée que tu veux un tableau, et non l'adresse d'un élément seul.)
Alternativement, on peut passer des tableaux par référence : croisement( int (&)[100][100], int ) ; Ça pose un peu le problème, en révanche, que ce n'est pas trop naturel de les traiter comme ça s'ils sont alloués dynamiquement, parce que le type complet est déjà perdu en sortie de new. C-à-d :
int matriceLocale[ 100 ][ 100 ] ; croisement( matriceLocale ) ; // Bon int (*matriceDynamique)[ 100 ] = new int[ 100 ][ 100 ] ; croisement( ??? ) ;
Note qu'avec la première solution, il faut que la deuxième dimension soit une constante ; on peut écrire : croisement( int [][ 100 ], int ) ; mais non : croisement( int [][], int ) ; ni : croisement( int (*)[], int ) ; Et avec la deuxième solution, il faut que les deux dimensions soient constantes.
Tout compte fait, je crois que la meilleur solution, c'est d'écrire une classe Matrice, qui se base sur std::vector ou sur std::valarray. Les tableaux à la C ne marchent pas très bien.
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34