begin process at 2012 02 10 20:09:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > UN TABLEAU MULTIDIMENTIONNEL COMME PARAMETRE DE FONCTION EN C++

UN TABLEAU MULTIDIMENTIONNEL COMME PARAMETRE DE FONCTION EN C++


 Information sur la source

Note :
Aucune note
Catégorie :Tutoriaux Classé sous :tableau multidimensionnel, fonctions tableaux, tableaux références Niveau :Débutant Date de création :04/08/2008 Date de mise à jour :04/08/2008 15:34:19 Vu :4 844

Auteur : Mcjo

Ecrire un message privé
Site perso
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Ce tutoriel est destiner à montrer les différentes façons de transmettre un tableau multidimensionnel à une fonction en c/c++...
Attention, les tableaux, et ce quelque soit la méthode d'appel, sont toujours transmis par référence (adresse mémoire) donc directement accessible et modifiable par la fonction...
Je vous laisse découvrir les différentes façon (la troisième étant la plus élégante)

Inspirée de Le Langage C++ par Bjarne Stroutrup

Source

  • //============================================================================
  • // Name : test.cpp
  • // Author :
  • // Version :
  • // Copyright : Your copyright notice
  • // Description : Hello World in C++, Ansi-style
  • //============================================================================
  • #include <iostream>
  • #include <string>
  • using namespace std;
  • void jepresumedetout(string m[3][5])
  • {
  • for (int i = 0; i < 3; i++)
  • {
  • for (int j = 0; j < 5; j++)
  • {
  • cout << m[i][j] << '\t';
  • }
  • cout << "\n";
  • };
  • }
  • void jepresumedescolonnes(string m[][5], int x)
  • {
  • for (int i = 0; i < x; i++)
  • {
  • for (int j = 0; j < 5; j++)
  • {
  • cout << m[i][j] << '\t';
  • }
  • cout << "\n";
  • };
  • }
  • /**
  • * void jenecompilepas(string m[][], int x, int y)
  • {
  • for (int i = 0; i < x; i++)
  • {
  • for (int j = 0; j < 5; j++)
  • {
  • cout << m[i][j] << '\t';
  • }
  • cout << "\n";
  • };
  • }
  • *
  • */
  • void jenepresumederien(string* m, int x, int y)
  • {
  • for (int i = 0; i < x; i++)
  • {
  • for (int j = 0; j < y; j++)
  • {
  • cout << m[i * y + j] << '\t';
  • }
  • cout << "\n";
  • };
  • }
  • int main()
  • {
  • string mtab[3][5] = { { "a", "b", "c", "d", "e" }, { "f", "g", "h", "i", "j" }, { "k", "l", "m", "n", "o" } };
  • cout << "!!!Je présume de tout!!!" << endl; // prints !!!Hello World!!!
  • jepresumedetout(mtab);
  • cout << "!!!Je présumes colonnes!!!" << endl; // prints !!!Hello World!!!
  • jepresumedescolonnes(mtab,3);
  • cout << "!!!Je ne présume de rien!!!" << endl; // prints !!!Hello World!!!
  • jenepresumederien(&mtab[0][0], 3, 5);
  • return 0;
  • }
//============================================================================
// Name        : test.cpp
// Author      :
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================


#include <iostream>
#include <string>
using namespace std;

void jepresumedetout(string m[3][5])
{
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << m[i][j] << '\t';
        }
        cout << "\n";
    };
}

void jepresumedescolonnes(string m[][5], int x)
{
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << m[i][j] << '\t';
        }
        cout << "\n";
    };
}

/**
 * void jenecompilepas(string m[][], int x, int y)
{
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << m[i][j] << '\t';
        }
        cout << "\n";
    };
}
 * 
 */

void jenepresumederien(string* m, int x, int y)
{
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < y; j++)
        {
            cout << m[i * y + j] << '\t';
        }
        cout << "\n";
    };
}

int main()
{
    string mtab[3][5] = { { "a", "b", "c", "d", "e" }, { "f", "g", "h", "i", "j" }, { "k", "l", "m", "n", "o" } };
    cout << "!!!Je présume de tout!!!" << endl; // prints !!!Hello World!!!
    jepresumedetout(mtab);
    cout << "!!!Je présumes colonnes!!!" << endl; // prints !!!Hello World!!!
    jepresumedescolonnes(mtab,3);
    cout << "!!!Je ne présume de rien!!!" << endl; // prints !!!Hello World!!!
    jenepresumederien(&mtab[0][0], 3, 5);
    return 0;
}

 Conclusion

Voilà j'espère aidé quelques débutants


 Historique

04 août 2008 15:24:32 :
Titre peux explicite
04 août 2008 15:34:19 :
...

 Sources du même auteur

Source avec Zip UN MORPION QUI A LA CLASSE

 Sources de la même categorie

LISTER FICHIERS ET RÉPERTOIRES (MULTIPLATEFORME) par christophedlr
UTILISATION DES TYPELIST EN C++ par wyden
Source avec Zip Source avec une capture QCSSCOMPRESSOR par alphaone
AFFICHAGE D'UN TRIANGLE ISOCELE par nabche
Source avec Zip GESTION D'UNE BIBLOTHEQUE par leclerro19

Commentaires et avis

Commentaire de juju12 le 04/08/2008 18:56:12

"Attention, les tableaux, et ce quelque soit la méthode d'appel, sont toujours transmis par référence (adresse mémoire) donc directement accessible et modifiable par la fonction..."

dans le cas de tes exemples oui, mais si on veut empêcher toute modification :
void jenepresumederien(const string* m, int x, int y){...}

Peut-être éviter d'utiliser le terme 'référence' dans ce cas, risque de confusion avec les références du C++. D'accord au final ça revient au même mais dans le cadre des références on manipule (du point de vue utilisateur) l'objet et pas un pointeur.

Commentaire de Mcjo le 04/08/2008 19:32:37

En effet, cette affirmation est très juste, mais il faudra aussi ajouter que le fait de rajouter 'const' empêche l'affectation de nouvelle valeur à mon tableau, il est accéssible en lecture uniquement...
Ici il faut surtout que les débutants fassent la distinction entre la porté des variables :
- le fait de modifier la valeur d'un paramètre d'une fonction sans que cela ne change sa valeur pour la suite de l'exécution du programme (portée locale).
- le fait transmettre un pointeur de constant (! différent des pointeurs  constants ), interdisant ainsi la modification de la variable....

Commentaire de Mcjo le 04/08/2008 19:33:44

désolé :
pointeur de constante, une petite faute de frappe :)

Commentaire de juju12 le 05/08/2008 15:39:03

"si on veut empêcher tout modification" == "accessible en lecture uniquement"
non?

attention à la signification de 'portée' : il s'agit du domaine où l'on peut utiliser une variable, qu'elle soit ou non modifiable n'y change rien.

Sur ce, bonne continuation.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 0,312 sec (3)

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