Partage
  • Partager sur Facebook
  • Partager sur Twitter

prob: Tableau & argument

    27 juin 2007 à 23:49:02

    bonjour a tous,

    J'ai un petit souci avec une fonction que j'ai crée et qui travaille sur un tableau. J'aimerais en faite renvoyer en argument ce tableau puisque ma fonction est appellée par une autre, je voulais donc savoir si cela était possible et si oui comment proceder je vous donne mon code:
    #include <math.h>
    #include "sourceprojet.h"


    void Calcul_R1_R2_passehaut(double Q)
    {
     unsigned char E24[24]={10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91};
     unsigned long GammeR[4]={100,1000,10000,100000};
     unsigned long R1=0,R2=0;
     unsigned char i,j,m,g,k,l=0,r=0;
     long int p=1;
     double Qtest,test;
     
     unsigned char delta=5;
     
     float R[500][3]={0};
     float n=0;
     
     for(i=0;i<24;i++)
     {
             for(j=0;j<4;j++)
             {
                     R1=E24[i]*GammeR[j];
                    
                     if(R1>10000000) j=4;
                    
                     else
                     {
                             for(m=0;m<24;m++)
                             {
                                     for(g=0;g<4;g++)
                                     {
                                             R2=E24[m]*GammeR[g];
                                            
                                             if(R2>10000000) g=4;
                                            
                                             else
                                             {
                                               Qtest=(1./3)*sqrt((double)R1/R2);
                                              
                                               test=100*sqrt(pow((Q-Qtest)/Q,2));
                                              
                                               if(test < delta)
                                               {
                                                    R[r][0]=R1;
                                                    R[r][1]=R2;
                                                    R[r][2]=test;
                                                    r++;
                                               }
                                                      
                                               if(r >=1000)
                                               {
                                                       i=24;
                                                       j=4;
                                                       m=24;
                                                       g=4;
                                               }
                                                    
                                                    
                                                    
                                                    
                                             }
                                            
                                            
                                            
                                     }
                                    
                                    
                                    
                                    
                             }
                            
                            
                            
                            
                            
                     }
                            
                    
                    
             }
            
            
            
            
     }
     
    p=r-2;
     
    while (p)
    {
            if(l>(r-2))
            {
                    if(p==(l-1))
                    {
                    p=0;
                    l=0;
                    }
                   
                    else
                    {       
                    l=0;
                    p=r-2;
                    }
                   
            }
           

                   
                    if(R[l][2]>R[l+1][2])
                    {
                            n=R[l+1][0];
                            R[l+1][0]=R[l][0];
                            R[l][0]=n;
           
                            n=R[l+1][1];
                            R[l+1][1]=R[l][1];
                            R[l][1]=n;
           
                            n=R[l+1][2];
                            R[l+1][2]=R[l][2];
                            R[l][2]=n;
                   
                            p--;
                    }
           

            l++;
           
           
    }
           
    }


    j'aimerais retourner ici le tableau R[500][3] resultat des couples de resistances trouvées.

    Je voulais savoir aussi si il existait en c une maniere propre de renvoyer plusieur argument pour une fonction.

    merci d'avance.

    Bonne soirée.
    • Partager sur Facebook
    • Partager sur Twitter
      28 juin 2007 à 0:18:03

      Citation : christoof


      j'aimerais retourner ici le tableau R[500][3] resultat des couples de resistances trouvées.



      #include <math.h>
      #include <stdio.h>
      #include <assert.h>

      struct result
      {
         double r1;
         double r2;
      };

      void Calcul_R1_R2_passehaut (double Q, double R[500][3], size_t nb_lin,
                                   size_t nb_col)
      {
         unsigned char E24[24] =
            { 10, 11, 12, 13, 15, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 43, 47,
            51, 56, 62, 68, 75, 82, 91
         };
         unsigned long GammeR[4] = { 100, 1000, 10000, 100000 };
         unsigned long R1 = 0, R2 = 0;
         unsigned int i, j, m, g, l = 0, r = 0;
         long int p = 1;
         double Qtest, test;

         unsigned char delta = 5;

         float n = 0;

         for (i = 0; i < 24; i++)
         {
            for (j = 0; j < 4; j++)
            {
               R1 = E24[i] * GammeR[j];

               if (R1 > 10000000)
                  j = 4;

               else
               {
                  for (m = 0; m < 24; m++)
                  {
                     for (g = 0; g < 4; g++)
                     {
                        R2 = E24[m] * GammeR[g];

                        if (R2 > 10000000)
                           g = 4;

                        else
                        {
                           Qtest = (1. / 3) * sqrt ((double) R1 / R2);

                           test = 100 * sqrt (pow ((Q - Qtest) / Q, 2));

                           if (test < delta)
                           {
                              assert (r < nb_lin);

                              R[r][0] = R1;
                              R[r][1] = R2;
                              R[r][2] = test;
                              r++;
                           }

                           if (r >= 1000)
                           {
                              i = 24;
                              j = 4;
                              m = 24;
                              g = 4;
                           }

                        }

                     }

                  }

               }

            }

         }

         p = r - 2;

         while (p)
         {
            if (l > (r - 2))
            {
               if (p == (l - 1))
               {
                  p = 0;
                  l = 0;
               }

               else
               {
                  l = 0;
                  p = r - 2;
               }

            }

            if (R[l][2] > R[l + 1][2])
            {
               n = R[l + 1][0];
               R[l + 1][0] = R[l][0];
               R[l][0] = n;

               n = R[l + 1][1];
               R[l + 1][1] = R[l][1];
               R[l][1] = n;

               n = R[l + 1][2];
               R[l + 1][2] = R[l][2];
               R[l][2] = n;

               p--;
            }

            l++;

         }
      }

      int main (void)
      {
         double R[500][3] = { {0} };

         Calcul_R1_R2_passehaut (5, R, 500, 3);

         size_t i;
         for (i = 0; i < 100; i++)
         {
            size_t j;
            for (j = 0; j < 3; j++)
            {
               printf ("%g ", R[i][j]);
            }
            printf ("\n");
         }

         return 0;
      }

      Citation : Pas de titre

      Je voulais savoir aussi si il existait en c une maniere propre de renvoyer plusieur argument pour une fonction.


      Avec une structure dont l'adresse est passée en paramètre.

      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        28 juin 2007 à 13:55:43

        ok, merci à toi.

        Bonne journée.
        • Partager sur Facebook
        • Partager sur Twitter

        prob: Tableau & argument

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown