un petit ex en c++

un petit ex en c++ - C++ - Programmation

Marsh Posté le 22-10-2005 à 11:34:09    

Je dois faire un execrice en c++ pour bientot mais j'ai un peu de mal a obtenir ce qu'on me demande.
http://www.ulb.ac.be/di/info-f-101 [...] rojet2.pdf
Ceci est le lien de l'ennoncé de l'ex.
J'ai essayé de faire l'ex tout seul mais malheureusement j'obtiens pas ce qu'on me demande!!.
 
    * #include <iostream>
    * #include <math.h>
    *
    * using namespace std;
    *
    * const double eps = 1.0e-5;
    *
    * const double pi= 4*(atan (1.0));
    *      
    * double asin(double x, double eps)
    * {
    *     double terme=x, asinus=0;
    *     if(x==1)
    *      
    *         asinus= pi/2;
    *      
    *     else if(x==-1)
    *      
    *         asinus= -(pi/2);
    *      
    *     else
    *     {
    *         for(int i=1; abs(terme) >= eps; ++i)
    *         {
    *             terme *= (double(((2*i)-1)*(( 2*i )-1 ) / ( 2*i )*(( 2*i )+1))*x*x);
    *             asinus += terme;
    *         }
    *          
    *     }
    *     return asinus;
    * }
    *
    * void affichage(double nb, double car)
    * {
    *     for(int i=1; i<=nb; ++i)
    *
    *         cout<< car;
    * }
    *
    * void plot_sin(int nb_per, int largeur, int hauteur)
    * {
    *     double Y, X;
    *     double hautarc = (hauteur/2)-1;
    *
    *     cout<< "^" << endl;
    *
    *     for(double i=hautarc; i >= -hautarc; --i)
    *     {
    *         Y = asin (i,eps);
    *         X = Y * (10/pi);
    *         cout<< '|';
    *
    *         for(double i=0; i < X; ++i)
    *         {
    *             cout<< ' ';
    *         }
    *         cout<< 'X' << endl;
    *     }    
    * }
    *
    *      
    * int main()
    * {
    *     int  nb_per, largeur, hauteur;
    *     cin>> nb_per >> largeur >> hauteur;
    *         plot_sin(nb_per, largeur, hauteur);
    * }
 
 
Voila ce que je fais mais j'obtiens pas le graph demandé.
Si qqun peut me corriger ce serait tres sypma.
Merci d'avance.

Reply

Marsh Posté le 22-10-2005 à 11:34:09   

Reply

Marsh Posté le 22-10-2005 à 11:36:47    

balise code :o


Message édité par Joel F le 22-10-2005 à 11:37:11
Reply

Marsh Posté le 22-10-2005 à 17:26:54    

Dsl mais je comprend pas.:(

Reply

Marsh Posté le 22-10-2005 à 17:39:42    

Le monsieur te demande de mettre ton code dans des balises [ cpp ] ton code ici [ /cpp ] :
 

Code :
  1. void afficheConseil(void)
  2. {
  3.    cout << "Faut utiliser les balises pour le code !" << endl ;
  4. }


 
(comme expliqué dans les règles du forum :o )

Reply

Marsh Posté le 22-10-2005 à 17:49:09    

A ok.Je m'excuse.

Code :
  1. #include <iostream>
  2.      #include <math.h>
  3.    
  4.      using namespace std;
  5.    
  6.      const double eps = 1.0e-5;
  7.    
  8.      const double pi= 4*(atan (1.0));
  9.          
  10.      double asin(double x, double eps)
  11.      {
  12.          double terme=x, asinus=0;
  13.          if(x==1)
  14.          
  15.              asinus= pi/2;
  16.          
  17.          else if(x==-1)
  18.          
  19.              asinus= -(pi/2);
  20.          
  21.          else
  22.          {
  23.              for(int i=1; abs(terme) >= eps; ++i)
  24.              {
  25.                  terme *= (double(((2*i)-1)*(( 2*i )-1 ) / ( 2*i )*(( 2*i )+1))*x*x);
  26.                  asinus += terme;
  27.              }
  28.              
  29.          }
  30.          return asinus;
  31.      }
  32.    
  33.      void affichage(double nb, double car)
  34.      {
  35.          for(int i=1; i<=nb; ++i)
  36.    
  37.              cout<< car;
  38.      }
  39.    
  40.      void plot_sin(int nb_per, int largeur, int hauteur)
  41.      {
  42.          double Y, X;
  43.          double hautarc = (hauteur/2)-1;
  44.    
  45.           cout<< "^" << endl;
  46.    
  47.          for(double i=hautarc; i >= -hautarc; --i)
  48.          {
  49.              Y = asin (i,eps);
  50.              X = Y * (10/pi);
  51.              cout<< '|';
  52.    
  53.              for(double i=0; i < X; ++i)
  54.              {
  55.                  cout<< ' ';
  56.              }
  57.              cout<< 'X' << endl;
  58.          }   
  59.      }
  60.    
  61.          
  62.      int main()
  63.      {
  64.          int  nb_per, largeur, hauteur;
  65.          cin>> nb_per >> largeur >> hauteur;
  66.              plot_sin(nb_per, largeur, hauteur);
  67.      }

Reply

Marsh Posté le 22-10-2005 à 19:59:49    

L'erreur vient sans aucun doute de ta partie plot_sin: Y=asin(i,eps) car ton i prend des valeurs comme hautarc qui ne sont pas dans [-1,1]. Fais donc un second rapport de proportionnalité j/2 = i/hauteur et ton j sera ce que l'asin devra calculer. Je ne vois pas l'utilité de la nouvelle variable hautarc.
Quant à l'autre rapport de proportionnalité, X = Y * (largeur/pi).
 
La valeur de l'eps que tu as a pris me parait un peu petite, 0.01 suffirait je pense.
 
Et n'oublie pas de tenir en compte nb_per: repet la seconde boucle for nb_per fois.


Message édité par Bali-balo le 22-10-2005 à 20:00:33
Reply

Marsh Posté le 22-10-2005 à 20:15:47    

C'est vraiment tres sympa de me répondre mais comme je débute en C++ et je suis vraiment très nul j'ai pas vraiment bien compris :(:(
(Je sais j'en fait un peu trop et j'ai honte)

Reply

Marsh Posté le 22-10-2005 à 20:22:48    

T'inquiète pas, j'ai jamais fait de C. Ou presque. Mais la difficultée n'est pas dans le langage parce qu'on ne te demande rien de technique, elle est dans la mise en équations.
T'as compris ton X=Y*(10/pi) ou tu l'as copié sur quelqu'un? (c'est un rapport de proportionnalité X/10=Y/pi)
 
C'est un devoir info de deug mias ça?

Reply

Marsh Posté le 23-10-2005 à 11:51:10    

C'est ca en fait , ta fait mouche.
En fait je n'ait fait que suivre qques exercices qu'on a fait en classe.
Mais je vais être franc avec toi j'y pige rien a cet execrcice je l'ai même copier sur un "copain" qui ma assuré que ca marche et que c'est le bon exercice et tralala et trilili, tu vois le truc, il ma eu quoi, il voulais être le seul qui a fait un exercice qui tient la route.Lui il a doublé et ce que nous on fait c'est facile pour lui et il se permet de se foutre un peu de nous les nouveau.
C'est pour cela que je suis enervé et je veut absolument faire cette exercice.Tu comprends?

Reply

Marsh Posté le 23-10-2005 à 14:05:51    

Mais non c'est le bon code, il y a juste une ou deux grosse erreur.
Compile le code en remplaçant le plot_sin par celui-ci:
 
void plot_sin(int nb_per, int largeur, int hauteur)  
     {  
         double Y, X;  
         double j=2*i/hauteur;
          cout<< "^" << endl;  
     
         for(double i=hauteur; i >= -hautarc; --i)  
         {  
             Y = asin (j,eps);  
             X = Y * (10/pi);  
             cout<< '|';  
     
             for(double i=0; i < X; ++i)  
             {  
                 cout<< ' ';  
             }  
             cout<< 'X' << endl;  
         }      
     }  
 
Et change const double eps = 1.0e-5 à 0.01.
Puis dis ça s'améliore un peu. Ensuite il manquera plus qu'un ou deux détails.

Reply

Marsh Posté le 23-10-2005 à 14:05:51   

Reply

Marsh Posté le 23-10-2005 à 19:21:40    

Merci mec t'es trop sympa.Ils sont rares les gens comme toi.
Je vais essayer ca et je te dis quoi.
Encore merci ;)

Reply

Marsh Posté le 24-10-2005 à 11:02:41    

En fait j'ai fait l'exercice mais ca fait que calculer la valeur de arcsin.
Ca n'afiche pas le graphe c'est ca le truc.
Je vais te mettre ce que j'ai fait.

Code :
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. const double eps = 0.01;
  5. const double pi= 4*(atan (1.0));
  6. double asin(double x, double eps)
  7. {
  8. double terme=x, asinus=0;
  9. if(x==1)
  10.  asinus= pi/2;
  11. else if(x==-1)
  12.  asinus= -(pi/2);
  13. else
  14. {
  15.  for(int i=1; abs(terme) >= eps; ++i)
  16.  {
  17.   terme *= (double( ((2*i)-1)*(( 2*i )-1 ) / ( 2*i )*(( 2*i )+1))*x*x );
  18.   asinus += terme;
  19.  }
  20. }
  21. return asinus;
  22. }
  23. void affichage(double nb, double car)
  24. {
  25. for(int i=1; i<=nb; ++i)
  26.  cout<< car;
  27. }
  28. void plot_sin(int nb_per, int largeur, int hauteur) 
  29.      { 
  30.          double Y, X; 
  31.          double j=2*largeur/hauteur;
  32.           cout<< "^" << endl; 
  33.    
  34.          for(double i=hauteur; i >= -hauteur; --i) 
  35.          { 
  36.              Y = asin (j,eps); 
  37.              X = Y * (10/pi); 
  38.              cout<< '|'; 
  39.    
  40.              for(double i=0; i < X; ++i) 
  41.              { 
  42.                  cout<< ' '; 
  43.              } 
  44.              cout<< 'X' << endl; 
  45.          }     
  46.      } 
  47. int main ()
  48. {
  49. double X,Y;
  50.         plot_sin(2,40,16);
  51. }


 
Je viens de la changer et j'obtiens que des x en verticale


Message édité par boob05 le 24-10-2005 à 13:17:33
Reply

Marsh Posté le 24-10-2005 à 14:41:10    

Ca ne calculait pas du tout arcsin.
Celui-ci oui par contre, avec le tracé d'une sinusoide un peu fouillie:
 

Code :
  1. #include <iostream>
  2. #include <math.h>
  3.    
  4. using namespace std;
  5. const double eps = 0.1;
  6. const double pi= 4*(atan (1.0));
  7. double abso(double val)
  8. {
  9. if (val<0) return -val;
  10. return val;
  11. }
  12. double asin(double x, double epsi)
  13. {
  14. double terme=x, asinus=x, suite=0;
  15. if(x==1)
  16.  return asinus= pi/2;
  17. if(x==-1)
  18.  return asinus= -pi/2;
  19. for(int i=2; abso(terme)>=eps; i++)
  20. {
  21.  suite=1+2*(i-1);
  22.  terme*=x*x*(suite-2) / ( suite*(suite-1) );
  23.  asinus+=terme;
  24. }
  25. return asinus;
  26. }
  27. void plot_sin(int nb_per, int largeur, int hauteur)
  28. {
  29. double X1;
  30. double hautarc = hauteur/2;
  31. cout<< "^" << endl;
  32. for(double i=hautarc; i >= 0; i--)
  33. {
  34.  X1 = asin (i*2/hauteur,eps)*largeur/(2*pi);
  35.  cout << '|';
  36.  for(double i=0; i < X1; i++)
  37.  {
  38.   cout<< ' ';
  39.  }
  40.  cout<< 'X';
  41.  for(double j=0; j < 2*(largeur/4-X1); j++)
  42.  {
  43.   cout<< ' ';
  44.  }
  45.  cout<< 'X' << endl;
  46. }
  47. for(double j=0; j >= -hautarc; j--)
  48. {
  49.  X1 = asin (j*2/hauteur,eps)*largeur/(2*pi);
  50.  cout << '|';
  51.  for (double k=0; k<largeur/2; k++) cout << ' ';
  52.  for(double i=0; i < -X1; i++)
  53.  {
  54.   cout<< ' ';
  55.  }
  56.  cout<< 'X';
  57.  for(double j=0; j < 2*(largeur/4+X1); j++)
  58.  {
  59.   cout<< ' ';
  60.  }
  61.  cout<< 'X' << endl;
  62. }
  63. }
  64. int main()
  65. {
  66. plot_sin(1, 20, 16);
  67. }

Reply

Marsh Posté le 24-10-2005 à 16:14:21    

Merci ca m'aide bcp ton exercice mais juste un truc qui cloche, le graphe n'est pas juste.En fait j'obtien ceci en compilant:
^
|     XX
|    X    X
|   X     X
|   X      X
|  X       X
|  X        X
| X         X
| X          X
|X          X
|          X          X
|           X          X
|           X         X
|            X        X
|            X       X
|             X      X
|             X     X
|              X    X
|               XX

Reply

Marsh Posté le 24-10-2005 à 16:49:35    

En fait l'erreur est dans la declaration des periodes.
Car il ya q'une seule periode c'est ca le truc.Meme si j'en met plusieurs ca me donne tjrs une comme cette exemeple-ci:
^
|          XX
|       X        X
|      X          X
|     X            X
|    X              X
|   X                X
|  X                 X
| X                   X
+---------------------------------------->
|X                    X
|                    X                    X
|                     X                   X
|                      X                 X
|                       X                X
|                        X              X
|                         X            X
|                          X          X
|                           X        X
|                              XX
 
 
Ca c'est si je mets 2 periodes, 40 hauteur et 16 largeur

Reply

Marsh Posté le 24-10-2005 à 16:50:14    

+---------------------------------------->
 
J'ai rajouté ceci car c'etait pas dedans

Reply

Marsh Posté le 24-10-2005 à 17:07:21    

C'est un détail.
Celui-ci trace une sinusoide moins fouillie (prend le cas 1 / 20 / 16) :
 

Code :
  1. #include <stdafx.h>
  2. #include <iostream>
  3. #include <math.h>
  4.    
  5. using namespace std;
  6. const double eps = 0.1;
  7. const double pi= 4*(atan (1.0));
  8. double abso(double val)
  9. {
  10. if (val<0) return -val;
  11. return val;
  12. }
  13. double asin(double x, double epsi)
  14. {
  15. double terme=x, asinus=x, suite=0;
  16. if(x==1)
  17.  return asinus= pi/2;
  18. if(x==-1)
  19.  return asinus= -pi/2;
  20. for(int i=2; abso(terme)>=eps; i++)
  21. {
  22.  suite=1+2*(i-1);
  23.  terme*=x*x*(suite-2) / ( suite*(suite-1) );
  24.  asinus+=terme;
  25. }
  26. return asinus;
  27. }
  28. void plot_sin(int nb_per, int largeur, int hauteur)
  29. {
  30. double X1;
  31. double hautarc = hauteur/2;
  32. cout<< "^" << endl;
  33. for(double i=hautarc; i >= 0; i--)
  34. {
  35.  X1 = asin (i*2/hauteur,eps)*largeur/(2*pi);
  36.  cout << '|';
  37.  for(double i=0; i < X1; i++)
  38.  {
  39.   cout<< ' ';
  40.  }
  41.  cout<< 'X';
  42.  for(double j=1; j <= 2*(largeur/4-X1) - 1; j++)
  43.  {
  44.   cout<< ' ';
  45.  }
  46.  cout<< 'X' << endl;
  47. }
  48. for (int k=0; k<nb_per*largeur; k++) cout<<'-';
  49. cout << endl;
  50. for(double j=1; j >= -hautarc; j--)
  51. {
  52.  X1 = asin (j*2/hauteur,eps)*largeur/(2*pi);
  53.  cout << '|';
  54.  for (double k=0; k<largeur/2; k++) cout << ' ';
  55.  for(double i=0; i < -X1; i++)
  56.  {
  57.   cout<< ' ';
  58.  }
  59.  cout<< 'X';
  60.  for(double j=1; j <= 2*(largeur/4+X1) - 1; j++)
  61.  {
  62.   cout<< ' ';
  63.  }
  64.  cout<< 'X' << endl;
  65. }
  66. }
  67. int main()
  68. {
  69. cout << "Nombre de periodes / Largeur totalle / Longueur crete a crete: " << endl;
  70. int  nb_per, largeur, hauteur;
  71. cin>> nb_per >> largeur >> hauteur;
  72. plot_sin(nb_per,largeur/nb_per,hauteur);
  73. }

Reply

Marsh Posté le 24-10-2005 à 19:19:14    

Excuse moi de te derranger a nouveau mais j'obtiens tjrs pas le graphe.
Mais c'est vrai que cette fonction est vraiment bien.Merci ;)

Reply

Marsh Posté le 24-10-2005 à 19:35:54    

Oui oui il y aurait toujours le nombre de périodes à prendre en compte mais c'est pas à moi de le faire (bcp trop chiant comme truc!). Et il y a une petite dyssimétrie dans chaque de-mipériode à corriger. A part ça c'est le bon tracé.

Reply

Marsh Posté le 24-10-2005 à 19:47:56    

Ouais je sais c'est pour ca que je vous demande de l'aide mais merci quand meme c'était deja une grande aide ce que ta fait jusqu'à présent.
Merci et bientot pour un prochain exercice peut etre lol!!

Reply

Marsh Posté le 25-10-2005 à 16:17:42    

Salut les gars.Je sais que j'en fais un peu trop mais j'ai besoin de votre aide encore une derniere fois car j'arrive vraiment pas a terminer l'exercice.
J'ai avancé un peu mais je bloque tjrs ( je sais je suis nul  :pfff: )
Voila le code:

Code :
  1. #include <iostream> 
  2. #include <math.h> 
  3.          
  4. using namespace std; 
  5. const double eps = 0.1; 
  6. const double pi= 4*(atan (1.0)); 
  7.    
  8. double abso(double val)
  9. {
  10.      if (val<0) return -val;
  11.          return val;
  12. }
  13.    
  14. double asin(double x, double epsi) 
  15.       double terme=x, asinus=x, suite=0;
  16.       if(x==1) 
  17.          return asinus= pi/2; 
  18.       if(x==-1) 
  19.          return asinus= -pi/2; 
  20.       for(int i=2; abso(terme)>=eps; i++)
  21.       { 
  22.            suite=1+2*(i-1);
  23.            terme*=x*x*(suite-2) / ( suite*(suite-1) );
  24.            asinus+=terme;
  25.       } 
  26.          return asinus; 
  27.    
  28. void plot_sin(int nb_per, int largeur, int hauteur) 
  29.      double X1;
  30.      int X1_entier; 
  31.      double hautarc = hauteur/2; 
  32.      cout<< "^" << endl; 
  33.      cout << largeur << " " << nb_per << " " << largeur/(nb_per*2)<< endl;
  34.   for(double i=hautarc; i >= 0; i--) 
  35.   { 
  36.           X1 = asin (i*2/hauteur,eps)*largeur/((2*pi*nb_per));
  37.           cout << '|';
  38.        X1_entier = (int) X1;
  39.           //cout << X1 << " " << X1_entier <<endl;
  40.    for(int periode=0; periode < nb_per; periode++)
  41.     {   
  42. for(int j=0; j < X1_entier; j++) 
  43.              { 
  44.                  cout<< ' ';
  45.              } 
  46.              cout<< 'X';
  47.      for(int j=0; j <= 2*((largeur/(4*nb_per)-X1_entier) - 1); j++) 
  48.      {
  49.           cout<< ' ';
  50.      }
  51.           cout<< 'X';
  52.    
  53.      for(int j=0; j < X1_entier; j++) 
  54.      { 
  55.            cout<< ' ';
  56.      }
  57.    
  58.      for(int j=0; j < (largeur/(nb_per*2)); j++) cout << " ";
  59.     }
  60.       cout << endl;
  61.    }
  62.       cout<< '+';
  63.       for (int k=0; k<largeur; k++) cout<<'-';
  64.         cout << '>' << endl;
  65.    
  66.         for(double j=0; j > -hautarc; j--) 
  67.          { 
  68.              X1 = asin (j*2/hauteur,eps)*largeur/(2*pi*nb_per);
  69.              cout << '|';
  70.              for (double k=0; k<largeur/(2*nb_per); k++) cout << ' ';
  71.              for(double i=0; i < -X1; i++) 
  72.              { 
  73.                  cout<< ' ';
  74.              } 
  75.              cout<< 'X'; 
  76.              for(double j=0; j <= 2*(largeur/(4*nb_per)+X1) - 1; j++) 
  77.              { 
  78.                  cout<< ' ';
  79.              } 
  80.              cout<< 'X' << endl;
  81.    
  82.          }
  83. }
  84.    
  85. int main() 
  86. {
  87.          cout << "Nombre de periodes / Largeur totalle / Longueur crete a crete: " << endl;
  88.          int  nb_per, largeur, hauteur; 
  89.          cin>> nb_per >> largeur >> hauteur; 
  90.          plot_sin(nb_per,largeur,hauteur);
  91. }


 
Svp aidez moi j'en ai besoin pour demain.

Reply

Marsh Posté le 07-11-2005 à 17:29:05    

Salut c'est encore moi.
J'ai encore besoin de votre aide pour un autre exercice.
Il s'agit de cette fois d'un caclul matriciel.
Voici l'enoncé:http://www.ulb.ac.be/di/info-f-101/Projets/05-06/projet3.pdf
 
Je voulais aussi vous remercier pour votre aide concernant l'exercice d'avant.
Grave a vous j'ai pu le reussir.Merci bcp.
Je vais vous mettre le solution pour ceux qui les interesse:
Voici le site de la soluce avec d'autres exercices:http://www.ulb.ac.be/di/info-f-101/
Voila ben encore merci et j'espere que vous allez encore m'aider. ;)

Reply

Marsh Posté le 07-11-2005 à 18:50:43    

boob05 a écrit :

Salut c'est encore moi.
J'ai encore besoin de votre aide pour un autre exercice.
Il s'agit de cette fois d'un caclul matriciel.
Voici l'enoncé:http://www.ulb.ac.be/di/info-f-101/Projets/05-06/projet3.pdf
 
Je voulais aussi vous remercier pour votre aide concernant l'exercice d'avant.
Grave a vous j'ai pu le reussir.Merci bcp.
Je vais vous mettre le solution pour ceux qui les interesse:
Voici le site de la soluce avec d'autres exercices:http://www.ulb.ac.be/di/info-f-101/
Voila ben encore merci et j'espere que vous allez encore m'aider. ;)


 
lis les règles, si tu ne t'es pas investi un minimum, personne ne devrai te répondre ...
La, tu balance l'énoncé du sujet en lien, démerdez vous. Personnellement,je prend ça comme une insulte, et je ne dois pas etre le seul.
Fais ce programme, et en cas de blocage, tu demandes.

Reply

Marsh Posté le 07-11-2005 à 20:20:19    

Je n'insulte personne la désolé mais comment veut-tu que je m'investisse
quand je ne sais meme pas me débrouiller pour mes propres exercices.
J'ai pourtant essayé mais je n'y arrive pas et en plus je vous demande pas de me résoudre l'exercice vite fait commca.Si tu veut pas m'aider tant pis je t'y oblige pas.Mais sache que je me permetrais jamais de me foutre de vous ca il faut que vous le sachiez!!!Mais ca me rend vraiment triste ce que tu me dis la mais bon.

Reply

Marsh Posté le 07-11-2005 à 20:27:39    

Dans ce cas-là, il te faut acheter un bouquin ou lire les tutoriaux sur le net en supplément à tes cours.
 
++fab a raison, on peut intervenir sur des points de problème précis, mais on ne résoud pas les exercices...

Reply

Marsh Posté le 07-11-2005 à 20:29:07    

ok merci quand même

Reply

Marsh Posté le 07-11-2005 à 20:55:31    

boob05 a écrit :

Je n'insulte personne la désolé mais comment veut-tu que je m'investisse
quand je ne sais meme pas me débrouiller pour mes propres exercices.
J'ai pourtant essayé mais je n'y arrive pas et en plus je vous demande pas de me résoudre l'exercice vite fait commca.Si tu veut pas m'aider tant pis je t'y oblige pas.Mais sache que je me permetrais jamais de me foutre de vous ca il faut que vous le sachiez!!!Mais ca me rend vraiment triste ce que tu me dis la mais bon.


 
bon, on a tous débuté un jour. Et vu que j'étais particulièrement mauvais à mes débuts, je suis pret à comprendre ta détresse. Quel est le sujet ? qu'est-ce que tu as commencé à écrire ?  
 
PS: mettre le sujet en lien ou copier-coller tel quel, c'est vraiment mal vu. Si tu ne le savais pas, maintenant tu le sais.

Reply

Marsh Posté le 07-11-2005 à 21:08:19    

Écrivez une fonction sousMatriceCarreeLaPlusDense(int A[TAILLE][TAILLE],int n), où :
– A est une matrice carrée positive,
– n représente sa taille,
– TAILLE est une constante donnant la taille maximale possible pour A.
 
qui doit trouver et afficher la sous-matrice carrée la plus dense.
 
Définitions :
– une sous-matrice de A est l’ensemble des éléments contenus entre un coin supérieur gauche A[i][ j] et
un coin inférieur droit A[k][l] avec i <= k et j <= l,
– la densité d’une matrice est la somme de ses éléments divisée par sa taille.
 
Exemple Soit la matrice :
 
A= | 4 6 10 |
     |2 4 5   |
     |2 3 1   |
Après application de la fonction sur A, s’affiche à l’écran :
 
Sous-matrice la plus dense:
6 10
4 5
Densite:
12.5
 
car la somme fait : 6+10+4+5 = 25 et la dimension est 2. Dans le cas où plusieurs sous-matrices ont la
même densité, c’est la première trouvée qui doit être affichée.
 
Voila l'énnoncé.
Ben le fait est que je ne vois pas comment commencer
 
PS:quand tu dis que t'étais mauvais à tes début, pourrait tu me dire comment ta fait pour y remédier.

Reply

Marsh Posté le 07-11-2005 à 21:47:03    

boob05 a écrit :

Ben le fait est que je ne vois pas comment commencer


 
Ton problème est plutot d'ordre algorithmique, dans ce cas le bon forum est plutot la partie algo, mais bon passons.
Et bien, tu décomposes ton problème :
parcourir ta matrice A, à partir de chaque élément (A[i][j]), en extraire toutes les sous matrices, et pour chaque sous matrice, calculer sa "densité".
tu stocke la sous matrice ayant la densité maximum dans un coin, et tu l'écrase par une autre sous matrice lorsque celle-ci a une densité *strictement* supérieure.
Le choix de faire ça avec des matrices C-staile, ça va te faire chier.
Et le paramètre n, je ne l'ai pas compris :|
 
Si ta matrice peut prendre des coefs négatifs, les sous matrices extraites vont jusqu'à la matrice (1,1).
 

boob05 a écrit :


PS:quand tu dis que t'étais mauvais à tes début, pourrait tu me dire comment ta fait pour y remédier.


je ne suis pas sur d'y avoir remédier :) un jour, ça m'a intéressé, mais ça n'a pas été immédiat.


Message édité par ++fab le 07-11-2005 à 22:46:27
Reply

Marsh Posté le 08-11-2005 à 13:33:33    

Je laisse tomber, je comprends rien :(

Reply

Marsh Posté le 09-11-2005 à 11:59:29    

Salut.En fait j'ai essayé de faire qqchose mais j'arrive pas loin :(
Voila ce que j'ai deja fait:

Code :
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. // declaration de constantes globales
  5. const int TAILLE = 100;
  6. // Fonction Calcul de densité
  7. double calc_dens(double V[TAILLE][TAILLE])
  8. {
  9. double densite = 0;
  10. for (int i = 0; i < TAILLE; i++)
  11.  for (int j = 0; j < TAILLE; j++)
  12.   densite += V[i][j];
  13. return densite;
  14. }
  15. void sousMatriceCarreeLaPlusDense( int A[TAILLE][TAILLE], int n)
  16. {
  17. }
  18. // Fonction Main
  19. int main()
  20. {
  21. int Taille;
  22. cin>>Taille;
  23. sousMatriceCarreelaPlusDense(A[TAILLE][TAILLE], Taille);
  24. }


 
Je sais que c'est rien mais croyez moi j'ai vraiment essayé

Reply

Marsh Posté le 09-11-2005 à 19:42:28    

pour le calcul de la densité, tu peux peut être faire comme ceci.
Attention, ça reste à des années lumières de la bonne façon de torcher ce problème ( ie à coup de slice, accumulate , valarray ou ublas::matrix<>, ... )
 

Code :
  1. #include <iostream>
  2. #include <cassert>
  3. unsigned const TAILLE = 10;
  4. double calc_dens( double const* v, int n )
  5. {
  6.      double densite = 0;
  7.      for( int i = 0; i < n; ++i )
  8.          for( int j = 0; j < n; ++j )
  9.              densite += v[i * n + j];
  10.      return densite / n;
  11. }
  12. int main()
  13. {
  14.     int taille;
  15.     std::cin >> taille;
  16.     assert( taille < TAILLE ); 
  17.     double v[TAILLE][TAILLE] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
  18.     std::cout << calc_dens( &v[0][0], taille ) << '\n';
  19. }


 
reste à faire une fonction pour extraire les sous matrices ...
Si j'ai bien compris, les sous matrices ont taille lignes, taille colonnes.

Reply

Marsh Posté le 09-11-2005 à 20:37:35    

Ouais je pense que c'est ca.Moi aussi j'ai essayé mais je bloque.Déjà ça c'est un miracle

Reply

Marsh Posté le 10-11-2005 à 14:38:09    

En fait je crois pas qu'on puisse utiliser le include cassert et les std::.
Apart ca je crois que le but de l'execice est de trouver la sou matrice la plus dense.

Reply

Marsh Posté le 10-11-2005 à 19:35:30    

boob05 a écrit :

En fait je crois pas qu'on puisse utiliser le include cassert et les std::.


Ah ?
 

Citation :

Apart ca je crois que le but de l'execice est de trouver la sou matrice la plus dense.


tu crois ?

Reply

Marsh Posté le 10-11-2005 à 19:56:30    

Bon ok c'est bon tu veut pas m'aider c'est une chose mais t'es pas obligé de te foutre de moi ok?

Reply

Marsh Posté le 10-11-2005 à 20:08:55    

10€ et un mars aussi .... y a deja un bout de soluce là faut pas pousser non plus, on va pas te le faire ton exo :o

Reply

Marsh Posté le 10-11-2005 à 20:14:16    

Hey boob05 je coirs que tu abuses la, ++fab te donne deja pas mal de pistes, on dirait que tu veux juste que quelqu'un fasse le probleme a ta place. C'est un forum d'entraide, on va pas passer tes exams a ta place... Si tu comprends rien aux math et/ou en info va a ta BU et prends des bouquins. C'est pas tres complique, il faut juste s'y mettre, avec un peu de volonté et d'investissement personnel tu vas y arriver.

Reply

Marsh Posté le 17-11-2005 à 20:16:14    

boob05 a écrit :

Je n'insulte personne la désolé mais comment veut-tu que je m'investisse
quand je ne sais meme pas me débrouiller pour mes propres exercices.
J'ai pourtant essayé mais je n'y arrive pas et en plus je vous demande pas de me résoudre l'exercice vite fait commca.Si tu veut pas m'aider tant pis je t'y oblige pas.Mais sache que je me permetrais jamais de me foutre de vous ca il faut que vous le sachiez!!!Mais ca me rend vraiment triste ce que tu me dis la mais bon.


:o alors c'est dur l'ULB mon coco :o  
allez bleu rdv à la St-V :o

Reply

Marsh Posté le 17-11-2005 à 20:46:06    

ehben a écrit :

:o alors c'est dur l'ULB mon coco :o  
allez bleu rdv à la St-V :o


 
T'es a l'ulb aussi.
Pour la St-V laisse tomber il faut que je ratrappe mon retard!
 
Ps: "bleu" hihi

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed