begin process at 2012 05 27 01:42:35
  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 :5 114

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

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 : 0,874 sec (4)

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