IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

prob fonction simple initialisation tableau


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut prob fonction simple initialisation tableau
    bonsoir je voudrais faire une fonction qui initialise un tableau a deux dimensions a 0.Le corps de la fonction est juste(dur de se tromper)mais quand j essaie de faire une fonction et la reutiliser dans un main() j ai un probleme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include <stdio.h>
    #include <stdlib.h>
    #define NB_ELEM 10
     
     
    int init_tab(int tab[ NB_ELEM ][ NB_ELEM ])
    {
     
         int i,j;
         for(i=0;i<2;i++)
         {
                         for (j=0;i<2;j++)
                         {
                          tab[i][j]=0;
                          }
         }
     
    }
     
    main()
    {
        int tab[ NB_ELEM ][ NB_ELEM ];
        tab=init_tab( tab[NB_ELEM][ NB_ELEM ]); 
     
     
     
     
    }
    voici la reponse du compilateur:

    C:\Documents and Settings\Administrateur\Mes documents\tab.cpp In function `int main()':

    23 C:\Documents and Settings\Administrateur\Mes documents\tab.cpp invalid conversion from `int' to `int (*)[10]'

    23 C:\Documents and Settings\Administrateur\Mes documents\tab.cpp initializing argument 1 of `int init_tab(int (*)[10])'

    23 C:\Documents and Settings\Administrateur\Mes documents\tab.cpp incompatible types in assignment of `int' to `int[10][10]'
    est ce que vous pouvez m aidez ça sdoit etre simple ?

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par sneb5757
    bonsoir je voudrais faire une fonction qui initialise un tableau a deux dimensions a 0.Le corps de la fonction est juste(dur de se tromper)mais quand j essaie de faire une fonction et la reutiliser dans un main() j ai un probleme.
    Il faut fournir a init_tab le tableau, pas un element du tableau. L'appel dans le main est donc :


  3. #3
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Ta fonction init_tab ne retourne pas de int, non plus... donc fais attention, car le valeur de retour est n'importe quoi dans ce cas !

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Par défaut
    Dans le second for c'est 'j<2' et pas i, sinon tu obtiens une boucle infinie.

    Et pourquoi 2 et pas MAX_ELEM ?

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    parce que j ai fait des modif et j ai oublié de corriger les element mais j avais vu j ai corrigé.je donne quel type de sorti alors ?

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    c est bon j ai mis un void et j ai corrigé mes fautes.

    Me sens tres con la

  7. #7
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Je ne saurais te conseiller que très vivement de placer un "return;" dans ta fonction retournant void, de façon à rendre clair et visible l'endroit où la fonction s'arrête ; ça t'évitera de nombreux problèmes par la suite.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Je ne saurais te conseiller que très vivement de placer un "return;" dans ta fonction retournant void, de façon à rendre clair et visible l'endroit où la fonction s'arrête ; ça t'évitera de nombreux problèmes par la suite.
    Euh, pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void init_tab (int tab[][NB_ELEM])
    {
       size_t i;
       for (i = 0; i < NB_ELEM; i++)
       {
          size_t j;
          for (j = 0; i < NB_ELEM; j++)
          {
             tab[i][j] = 0;
          }
       }
    }
    Elle s'arrête à la fin tout à fait normalement, pourquoi faire un return ?

  9. #9
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Je préfère toujours utiliser un return pour deux raisons :

    1- lisibilité : on voit tout de suite où le programme termine
    2- éviter les bugs de codage : si le programme a besoin de s'arrêter avant la fin dans une des deux branches de if(){...}else{...} mais pas dans l'autre, c'est une bonne habitude d'utiliser le return... de plus, si on utilise des goto (qui sont parfois très pratiques), il est nécessaire d'adopter une bonne hygiène.

    Ici, je suis d'accord : tout va bien dans le code qu'il a écrit.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Je préfère toujours utiliser un return pour deux raisons :

    1- lisibilité : on voit tout de suite où le programme termine
    Une seule sortie par fonction. C'est ça "La Regle de Lisibilité".
    2- éviter les bugs de codage : si le programme a besoin de s'arrêter avant la fin dans une des deux branches de if(){...}else{...} mais pas dans l'autre, c'est une bonne habitude d'utiliser le return... de plus, si on utilise des goto (qui sont parfois très pratiques), il est nécessaire d'adopter une bonne hygiène.
    PIPO. Voir la règle précédente.

  11. #11
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Pourquoi une seule sortie par fonction ?

    Si tu t'efforces de respecter ta règle, tu te retrouveras à devoir faire des choses qui sont source de bug ultérieurement.

    Par exemple, comment transformer ce schéma-ci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    if(/* ... */)
    {
        /* ... */
     
        if(/* ... */)
        {
            /* ... */
     
            return X;
        }
        else
        {
            /* ... */
        }
    }
    else
    {
        return Y;
    }
     
    /* ... */
     
    return Z;

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Dans ce cas, moi je définis une variable retour initialisée avec une valeur par défaut.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Et si X et Y peuvent prendre n'importe quelle valeur, y compris la valeur par défaut, tu fais quoi ?

  14. #14
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    retour = Z;
     
    if(/* ... */)
    {
        /* ... */
     
        if(/* ... */)
        {
            /* ... */
     
            retour = X;
        }
        else
        {
            /* ... */
        }
    }
    else
    {
        retour = Y;
    }
     
    /* ... */
     
    return retour;
    Je ne vois pas trop ce que tu veux dire.
    Celà dépend evidemment de ce qui est fait dans le dernier /*.....*/, mais on peut supposer que tu ne modifies pas de variables globales ou de tableaux ou autres passés en paramètres...
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  15. #15
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Pourquoi une seule sortie par fonction ?
    Parce que c'est plus simple à coder, à débugger, à maintenir, à lire et que le code écrit est plus cohérent.

    Et puis c'est une des règles canoniques de la Programmation Structurée, qui est ma Religion. Et la religion, c'est sérieux ! Après avoir connu les errances du BASIC, la découverte du Pascal m'a enfin révélé La Vérité.
    Si tu t'efforces de respecter ta règle, tu te retrouveras à devoir faire des choses qui sont source de bug ultérieurement.
    Ben non, justement, et c'est ça qui est bien. (Libération de ressources cohérente, notamment, moins de répétition de code...)
    Par exemple, comment transformer ce schéma-ci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    {
       /* valeur par defaut */
       int ret = Z;
       if ( /* ... */ )
       {
          /* ... */
     
          if ( /* ... */ )
          {
             /* ... */
     
             ret = X;
          }
          else
          {
             /* ... */
          }
       }
       else
       {
          ret = Y;
       }
     
       /* ... */
     
       return ret;
    }

  16. #16
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Je me suis mal exprimé : si ni X, ni Y et ni Z sont des constantes, ton schéma ne marche plus ! En clair, si le calcul de Z se poursuit en fin d'algorithme, il faudrait faire comment ?

  17. #17
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Je me suis mal exprimé : si ni X, ni Y et ni Z sont des constantes, ton schéma ne marche plus ! En clair, si le calcul de Z se poursuit en fin d'algorithme, il faudrait faire comment ?
    Là, j'ai du mal à voir où tu veux en venir? Le schéma proposé par Emmanuel me semble correct, d'ailleurs le style de code que j'utilise dans ce genre de situation, et c'est bien plus lisible de n'autoriser qu'un seul point de sortie à la fonction.

    Mujigkalement

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  18. #18
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Je me suis mal exprimé : si ni X, ni Y et ni Z sont des constantes, ton schéma ne marche plus ! En clair, si le calcul de Z se poursuit en fin d'algorithme, il faudrait faire comment ?
    Tu pourrais donner un exemple C de ce que tu envisages ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. Initialiser tableau en fonction d'un char*
    Par Arnaud F. dans le forum Débuter
    Réponses: 2
    Dernier message: 20/03/2009, 18h13
  2. fonction qui initialise a blanc zone de texte
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/11/2003, 16h36
  3. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33
  4. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20
  5. Fonction de type tableau
    Par Charles f dans le forum Langage
    Réponses: 5
    Dernier message: 04/08/2002, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo