[C/C++] Passage et réception de paramètre avec une fonction

Passage et réception de paramètre avec une fonction [C/C++] - Programmation

Marsh Posté le 05-03-2001 à 12:06:37    

Salut
J'ai besoin de programmer en C++ une fonction ayant comme paramètre des tableau d'entier de taille définie et me retournant comme paramètre 3 tableaux d'entier à 2 dimensions ayant une taille non définie (?? x 2)
Vous feriez cela comment, pour que cela simple rapide et efficace? Je pensais à un passage d'adresse, mais c'est un peu la merde. Alors? Merci de me répondre rapidement, je suis un peu bloqué.
@+

Reply

Marsh Posté le 05-03-2001 à 12:06:37   

Reply

Marsh Posté le 05-03-2001 à 12:21:27    

Ben le mieux est que tu utilises une fonction en temps que procédure pour cela. Une fonction ne renvoie qu'une seule valeur.
 
La question est : connais tu la taille des tableaux ou pas dans la fonction ? sinon il faut ajouter un autre paramètre. Combien de tableaux en entrée ?
 
void func(type tab1, type tab2, type tab3, type& tabres1, type& tabres2, type& tabres3) ;
 
QQchose comme ça, dans le code tu alloues les tableaux resultats et tu fais les affectations avec les paramètres tabresX.

Reply

Marsh Posté le 05-03-2001 à 12:22:29    

Salut,
 
Plusieurs choses. En C++ :
- tu peux pas retourner de tableau en C++ (hein, c'est pas possible ??)
- les fonctions ne retourne toujours qu'un seul resultat
 
Une possibilite :
- tu cree les 3 tableaux avant d'appeler ta fonction et tu les passes en parametre dans ta fonction en utilisant les references (heu...on va dire references = pointeurs pour simplifier)
 
- Concernant les tableaux non definie...Qu'est ce que tu appelle non definie ? a quel moment le seront-ils ? parle tu de liste?
L'option des vecteurs est elle envisageable ?


---------------
Si t'es pas net, reste a la buvette
Reply

Marsh Posté le 05-03-2001 à 17:17:00    

Si tu fais du ++, pourquoi ne pas faire de l'objet ?
Aprés tout c'est la grande force du ++, non ?

Reply

Marsh Posté le 05-03-2001 à 20:01:29    

utiliser les objets semble la meilleur solution sinon tu peux faire des tableaux de tableaux(cad des pointeurs de pointeurs).
Comme ça t'as qu'un param en entrée (avec éventuellement les tailles) et t'as pas de pb en sortie.


---------------
http://www.cheata.net le site qui vous donne la banane!
Reply

Marsh Posté le 05-03-2001 à 20:05:21    

Je vous rappelle qu'en C++ (héritant en cela de C), les tableaux sont assimilés à des pointeurs. Donc pour faire retourner un tableau de tableaux d'entiers, il suffit que la fonction retourne un int** et on peut retourner le tableau sans aucun problème.

Reply

Marsh Posté le 08-03-2001 à 08:45:42    

Merci à tous. La solution était évidemment de passer un pointeur sur le premier élement du tableau et, si le tableau à plusieurs dimension, de passer un pointeur sur une structure.
@+

Reply

Marsh Posté le 08-03-2001 à 12:35:29    

Et si tu ne veux pas utiliser de structure pour tes tab. à 2 dimensions(Matrices) tu peux t'inspirer de ce cette fonction qui te permet de créer une matrice, matrice qui est ici en fait un pointeur sur 1 tableau de pointeurs. En créant ta matrice ainsi, tu peux la passer en paramêtres à une fonction sans déclaration globales déconseillées.      
 
int ** allocMatrice(int nbLig, int nbCol)
{
int ** mat;
int * val;
int i;
mat = (int **) malloc(nbLig*sizeof(int *));
if (!mat) return ( (int**)NULL );
val = (int *) malloc(nbLig*nbCol*sizeof(int));
if (!val) return ( (int**)NULL );
for (i=0; i<nbLig; i++)
mat[i] = val + i*nbCol;
return (mat);
}

Reply

Marsh Posté le 08-03-2001 à 12:44:15    

Beuaah pour ma part je trouve ça affreux de faire comme ça.


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 08-03-2001 à 17:32:19    

Toxin explique toi d'avantage  
 
Affreux ça ne me dit pas grand chose ?

Reply

Marsh Posté le 08-03-2001 à 17:32:19   

Reply

Marsh Posté le 08-03-2001 à 17:54:04    

Le C++, c'est fait pour faire aussi de l'objet.  
 
Il est tout à fait possible à une fonction de renvoyer un tableau du moment que la classe conteneur du tableau possède un constructeur de copie.


---------------
Pipiru piru piru pipiru pi
Reply

Marsh Posté le 09-03-2001 à 09:15:44    

explique toi nomad...

Reply

Marsh Posté le 09-03-2001 à 10:36:38    

Ce que je ferais (et ça n'engage que moi) c'est de faire un malloc pour le nombre de lignes puis un malloc par ligne.
 
Si ta matrice a une taille i lignes j colonnes, ça fait donc i+1 malloc.


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed