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 :

call a C function from another function !


Sujet :

C

  1. #1
    Membre confirm�
    Homme Profil pro
    chercheur
    Inscrit en
    F�vrier 2011
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : chercheur
    Secteur : Services � domicile

    Informations forums :
    Inscription : F�vrier 2011
    Messages : 78
    Par d�faut call a C function from another function !
    Bonjour � Tous,

    J'aimerais savoir si vous pouvez m'aider � faire un appel � une fonction qui permet de retourner une liste de clients al�atoirement.

    Fonction 1:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    void  affect_client_to_days(JOURS *days, donnee *data, usine1 *usine, client *cust, int TotDemCust)
    {
        int j=0;
        int t;
        int jr;
        int dem;
        int it=0;
        int nbr_c=1;
        srand(time(NULL));
        int nombre_aleatoire = 0;
     
        for (jr=1; jr<=data->nbr_periodes; jr++)
            {                 
                       days[jr].TotDemCust = 0;
                       days[jr].nbr_clients= 0;
                       while (((usine->dem_jour[jr]+usine->stock[jr-1]) > TotDemCust) && (it < data->nbr_clients))
                       {
                             nombre_aleatoire = rand()%data->nbr_clients+1;
                             j=nombre_aleatoire;
                             if((cust[j].Nbvisites < cust[j].frequence)&& (days[jr].cust[j]==0)) 
                                      {
                                              days[jr].nbr_clients++;
                                              cust[j].Nbvisites++;
                                              days[jr].cust[j]=1;
                                              days[jr].listcust[days[jr].nbr_clients]=j;
                                              days[jr].TotDemCust+=cust[j].demande;
                                              printf("affecter le client numero %d a la periode %d\n",nombre_aleatoire, jr);
                                      }
     
                       it++;
                       }
                       it=0;
                            if(usine->dem_jour[jr] > days[jr].TotDemCust)
                                      {
                                              j=1;
                                              while ((j <= data->nbr_clients) || (usine->dem_jour[jr] > days[jr].TotDemCust))
                                              {
                                                  if((cust[j].Nbvisites < cust[j].frequence)&& (days[jr].cust[j]==0))
                                                  {
                                                      days[jr].nbr_clients++;
                                                      cust[j].Nbvisites++;
                                                      days[jr].cust[j]=1;
                                                      days[jr].listcust[days[jr].nbr_clients]=j;
                                                      days[jr].TotDemCust+=cust[j].demande;
                                                  }
                                                  j++;
                                              }
                                       }
             }
             usine->stock[jr]=usine->stock[jr-1]+days[jr].TotDemCust-usine->dem_jour[jr];
             it=0;
    }
    J'ai besoin maintenant d'utiliser cette liste de clients dans une autre fonction qui permet de les classer par ordre d�croissant en fonction de leur demande (sachant que les quantit�s de demandes se trouvent dans un fichier texte.

    Fonction 2 :

    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
    void rechercher_max_quantite(donnee *data, client *cust)
    {                     
        int j = 1;
        int i;
        double max;
        int quantite, num_client;
        for (i=1; i<=data->nbr_depots; i++) 
        {
            max = cust[i].demande;
    		for (j = data->nbr_depots; j <= data->nbr_clients + data->nbr_depots; j++)
    		{
                if (cust[i].demande < max)
                {
                   max = cust[i].demande;
                   quantite = i;
                   num_client = j - data->nbr_depots;
                }
            }
        }
            if((j - data->nbr_depots - 1) == data->nbr_clients)
                 printf("Le client %d a la quantite suivante %d\n", num_client, max);
    }
    Je ne sais pas c'est quoi la syntaxe qui permet de faire appel d'une fonction et l'utiliser dans une autre fonction.

    Merci pour vos remarques et vos r�ponses.
    Cdls.

  2. #2
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Par d�faut
    Un appel de fonction en C est tr�s simple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int fctA(int a, intb){
        //dosomestuff
        return val;
    }
     
    void fctB(){
        int nb1=0;
        int nb2=0;
        int RetourDeFonctionA = fctA(nb1,nb2);
    }
    Tu appelles ta fonction avec son nom, et en param�tre des valeurs que tu veux passer. Si la fonction a un retour, tu peux l'affecter quelque part.

    Edit : De ce que je vois, aucune de tes deux fonctions n'ont de valeur de retour, j'imagine donc que tu passes ta liste en pointeur, et qu'elle est modifi�e comme cela

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    1 104
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 1 104
    Par d�faut
    Le premier �l�ment d'un tableau a l'indice 0, pas 1.

  4. #4
    Expert confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par d�faut
    et donc il faut faire les boucles comme :


  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Par d�faut
    Bonjour,
    ton code c'est un peu une usine a gaz !

    Je me permet une remarque...>
    ne doit en general n'etre appeler qu'une seul fois dans ton programme, et je doute que tu appel cette fonction (affect_client_to_days()) qu'une seule fois

    EDIT:
    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
    for (jr=1; jr<=data->nbr_periodes; jr++) //<<<<<<< jr = 1; !!!
            {                 
                       days[jr].TotDemCust = 0; // <<<<
                       days[jr].nbr_clients= 0; //<<<< days[1] = 0; days[0] = ?;
                       while (((usine->dem_jour[jr]+usine->stock[jr-1]) > TotDemCust) && (it < data->nbr_clients))
                       {
                             nombre_aleatoire = rand()%data->nbr_clients+1;
                             j=nombre_aleatoire;
                             if((cust[j].Nbvisites < cust[j].frequence)&& (days[jr].cust[j]==0)) 
                                      {
                                              days[jr].nbr_clients++; //<<< days[0] = ? + 1;
                                              cust[j].Nbvisites++;
                                              days[jr].cust[j]=1;
                                              days[jr].listcust[days[jr].nbr_clients]=j;
                                              days[jr].TotDemCust+=cust[j].demande; // <<< days[0] += (du_caca_la_encore)
                                              printf("affecter le client numero %d a la periode %d\n",nombre_aleatoire, jr);
                                      }
     
                       it++;
                       }
                       it=0;
                            if(usine->dem_jour[jr] > days[jr].TotDemCust) //<<< la encore tu pari sur la chance pour l'index 0
                                      {
    //...
    Comme le pr�cise jeroman l'index de tes tableaux commence a 0. ton code est boiteux ici, tu risque de ne pas avoir le comportement attendu pour le premier tour.

  6. #6
    Membre confirm�
    Homme Profil pro
    chercheur
    Inscrit en
    F�vrier 2011
    Messages
    78
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : chercheur
    Secteur : Services � domicile

    Informations forums :
    Inscription : F�vrier 2011
    Messages : 78
    Par d�faut
    Bonjour,

    Mon code marche tr�s bien et sans aucune lacune ! je suis ravi de voir vos remarques mais j'ai post� ma question sur la fa�on comment je pourrai utiliser une fonction qui retourne une liste de clients et les trier dans une autre fonction en fonction de leur demandes c'est tout.

    Cdls.

  7. #7
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Par d�faut
    Mon code marche tr�s bien et sans aucune lacune ! je suis ravi de voir vos remarques mais j'ai post� ma question sur la fa�on comment je pourrai utiliser une fonction qui retourne une liste de clients et les trier dans une autre fonction en fonction de leur demandes c'est tout.
    Le premier �l�ment d'un tableau a l'indice 0, pas 1.
    Si tu �cris/lis des cases 1 a n+1 d'un tableau, ton code peut marcher "sans lacunes aucunes". Mais la derniere case de ton tableau n'est pas "r�f�renc�e" comme faisant partie de ton tableau. Donc tu t'exposes a ce que cette case soit modifi�e a ton insu sans que tu ne le sache.

    Je me permet une remarque...>
    srand(time(NULL));
    ne doit en general n'etre appeler qu'une seul fois dans ton programme, et je doute que tu appel cette fonction (affect_client_to_days()) qu'une seule fois
    L� encore, ca n'est pas une "erreur" a proprement parler qui ferait planter ton code, mais je t'invite a lire ce sujet, qui explique pourquoi il ne faut pas appeler srand plusieurs fois.
    http://www.developpez.net/forums/d11...nombre-dappel/

    Quand a ta question, le premier post y r�pond

  8. #8
    Expert confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par Student_Master Voir le message
    Mon code marche tr�s bien et sans aucune lacune !
    C'est un pur hasard d� � ce que tu as d'autre en m�moire � ce moment, mais les remarques ci-dessus indiquent que ton code NE MARCHE PAS...




    Citation Envoy� par Student_Master Voir le message
    mais j'ai post� ma question sur la fa�on comment je pourrai utiliser une fonction qui retourne une liste de clients

    client **

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. call lua overrided function from c++
    Par biyoudidou dans le forum C++
    R�ponses: 11
    Dernier message: 30/01/2012, 18h55

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