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 :

Appeler un tableau d'une fonction sans appeler la fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut Appeler un tableau d'une fonction sans appeler la fonction
    Bonjour à tous,

    Je suis débutant en programmation et là j'ai un problème qui est peut être con mais peut être qu'on pourra m'aider.

    Je suis actuellement en train de coder un jeu qui nécessite parfois un tirage de cartes. J'ai créé une fonction qui permet de remplir un tableau aléatoirement avec des numéros qui seront chacun attribués à une carte. Cette fonction retourne le tableau. J'aimerai pouvoir tirer une carte (donc tirer un numéro dans le tableau précédemment rempli) sauf que je sais qu'on peut appeler une fonction mais je ne sais pas si on peut appeler juste le tableau rempli. Car si j'appelle la fonction ça va re-remplir aléatoirement le tableau, or je veux que le remplissage ne se fasse qu'une fois et pouvoir retourner dans ce tableau quand je veux.

    Désolé si je ne suis pas claire.
    PS: je ne peux pas montrer le code du remplissage de mon tableau parce qu'il est dégueulasse, mais je n'ai pas trouvé d'autres solutions.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    « Appeler le tableau » n'a pas de sens. Qu'est-ce qui t'empêche de passer ce tableau (accompagné d'une information sur sa taille) à une autre fonction qui, elle, effectuera le tirage en fonction de ce qu'il contient ?

    Sinon montre ton code. Dégueu ou pas, c'est toujours préférable à disserter dans le vide.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut
    Voila mon code pour le remplissage du tableau:

    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
    int pile_armes () {
            int i; int k; int h, int p; /*declaration variables*/
            int tab_armes[62];
            for (k = 0, k < 62, k++);    /*boucle pour remplir les 62 cases du tableau*/
            { h = 0;
                if (h == k) ;
                { i = Rand() % 62 + 1;  /* donne un nombre aléatoire entre 1 et 62 pour la première case*/
                    tab_armes[k] = i;
                    else
                    i = 1;                 /* permet d'avoir la condition d'entrée dans while*/
                    while (i != 0) ;
                    { i = Rand() % 62 + 1;
                        while (tab_armes[h] != i || i != 0) ;  /* première condition qui permet d'éviter les doublons et une conditions de sortie*/
                        { if (h < k) ;
                            { p = i;                           /* permet de garder la valeur de i dans p*/
                                h++;                              /* incrémente h pour pouvoir tester toutes les valeurs avant k, voir si aucun doublon*/
                              else
                               i = 0;
                            }
                        }
                    }
                }
            }		
       }
    Je voudrais pouvoir utiliser tab_armes dans une autre fonction.
    Merci pour l'aide.

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    C'est un brouillon en pseudo-code ? Non parce qu'autrement il n'y a rien de bon dans ce morceau de programme. La syntaxe est.. chaotique, l'algorithme sous-jacent bancal et tarabiscoté. Rien de grave, mais il ne faut pas sauter les étapes.

    Relis tranquillement le cours de C et les exercices de base avant de te lancer dans l'écriture de ton propre code. Prends le temps qu'il te faut pour être à l'aise. Ce temps n'est pas perdu, il t'en fera même gagner par la suite.

    Une fois appréhendées les structures logiques de base, il te faudra décomposer la résolution du problème en une séquence de petites tâches qui pourront être réalisées chacune par une fonction dédiée.

    Voici comment tu pourrais procéder :

    1. définis un type spécifique pour représenter le jeu de cartes ;
    2. instancie ce type, autrement dit crée un objet (une variable) de ce type:
      1. alloue cet objet (soit sur la pile, soit sur le tas) ;
      2. initialise cet objet, autrement dit attribue-lui explicitement une valeur, un état initial.
    3. si nécessaire, utilise un algorithme approprié pour battre le jeu de cartes ;
    4. enfin, tire une carte au sein du jeu.

    Et voici à quoi pourrait ressembler une implémentation en C de cet algorithme :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    #define DECK_SIZE 62 // la taille fixe de notre paquet de cartes
     
    struct deck {
        int cards[DECK_SIZE]; // tableau contenant DECK_SIZE cartes
    };
     
    struct deck deck_create() {
        struct deck d; // allocation de notre jeu de carte sur la pile
     
        // initialisation de notre jeu de carte
        for (int i = 0; i < DECK_SIZE; ++i)
            d.cards[i] = i;
     
        return d; // renvoi par copie
    }
     
    void deck_shuffle(struct deck *d) {
        // ...
    }
     
    int deck_draw(const struct deck *d) {
        // ...
    }
     
    // ...
     
    int main(int argc, char *argv[]) {
        // ...
     
        struct deck d = deck_create(); // on crée le jeu de cartes
        deck_shuffle(&d); // on bat les cartes
        int random_card = deck_draw(&d); // on en tire une au hasard
     
        // ...
     
        return 0;
    }

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Le point de départ doit être un code qui a un sens (donc qui compile).
    Ligne 2 : il faut remplacer la virgule par un point-virgule, ou bien utiliser correctement les virgules!
    Ligne 4 : Ça n'est pas du tout la syntaxe pour une boucle for. Remplacer les virgules par des points-virgules et ôter le point-virgule de fin!
    etc ...

    Maintenant si ton problème est de transmettre tab_armes[] hors de ta fonction, habituellement il suffit de faire que ta fonction retourne l'objet attendu; sauf qu'une fonction ne peut pas retourner un tableau!
    L'autre moyen est de passer le tableau par adresse, pour que ta fonction le remplisse et que tu puisse l'utiliser ailleurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int pile_armes ( tab_armes[] ) {
       int i, k, h, p;  /*declaration variables*/
       for ( k = 0 ; k < 62 ; k++ )    /*boucle pour remplir les 62 cases du tableau*/
       {
          ...
       }
    }
    int main() {
       int tab_armes[62];  // definir le tableau
       pile_armes( tab_armes ); // le fonction remplit le tableau
       autre_fonction( tab_armes , 62 ); // les autres fonctions peuvent l'utiliser
    }

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut
    Dalfab et Matt_Houston, je vous remercie pour vos conseils et pour votre aide.

    Ce que j'ai envoyé, c'était un brouillon en pseudo code que j'avais fait sur papier.

    Relis tranquillement le cours de C et les exercices de base avant de te lancer dans l'écriture de ton propre code. Prends le temps qu'il te faut pour être à l'aise. Ce temps n'est pas perdu, il t'en fera même gagner par la suite.
    D'accord, je vais me remettre dans les cours alors.

    Bonne journée à vous.

Discussions similaires

  1. Lancer une fonction sans appel de page
    Par Crokan dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2010, 00h07
  2. Réponses: 3
    Dernier message: 09/02/2009, 16h15
  3. Réponses: 3
    Dernier message: 31/07/2007, 21h18
  4. instancier une variable sans appeller de methode?
    Par debutant_linux dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 05/07/2007, 11h31
  5. Réponses: 11
    Dernier message: 16/10/2005, 20h21

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