prendre les plus haut d'une courbe

prendre les plus haut d'une courbe - C++ - Programmation

Marsh Posté le 08-02-2011 à 19:58:02    

Bonjour,  
 
J'aurais besoin de creer un executable me permettant de déterminer les 4 plus haut d'une courbe svp.
 
Pour ca je mesure P valeur, que je place chacune dans une variable ( x1,x2,x3,...,xP).
Ensuite il faut que je compare chaque valeur entre elles, et c'est là ou ca me pose pb :
 

Code :
  1. for ( int o=0; o<100; o++)
  2.         { 
  3.  
  4.          int "x"+o;      //pour initialiser les variables x1,x2 etc
  5.                  
  6.         }
  7. // placer les 100 valeures mesurées dans des variable x(1,2,3, etc...) :
  8.    for ( int f=0; f<P; f++) {
  9.  
  10.  
  11.  
  12.                      x=valeure mesurée au temps f;
  13.                      "x"+f=x;
  14.                  
  15.  
  16.  
  17.    }
  18.  
  19.    // comparaison des 100 valeures entres elles :
  20.    for ( int a=0; a<P; a++ ) {
  21.  
  22.  
  23.                for ( int j=0; j<P ; j++) {
  24.                    
  25.                    
  26.                    
  27.                            if ( x(a) < x(j) ) {
  28.                    
  29.                    
  30.                }   
  31.  
  32.    }


 
J'ai donc 2 questions :  
 
dans le premier paragraphe, comment initialiser les var x1, x2, x3,.., xP  via une boucle ( la syntaxe int "x"+o; est fausse )
 
ensuite, je bloque quand il s'agit de comparer les valeurs entre elles, je commence par comparé x1 avec x2, x3, x4 ... mais après il faudrai que je stock le résultats de chaque comparaison dans une autre variable, pour la recomparer après.
 
QQun aurait une idée de comment faire svp?
 
Merci d'avance! Bonne soirée

Reply

Marsh Posté le 08-02-2011 à 19:58:02   

Reply

Marsh Posté le 08-02-2011 à 20:30:48    

bonsoir,
tu aurais peut être pu continuer sur ton sujet initial: http://forum.hardware.fr/hfr/Progr [...] 2396_1.htm en modifiant le titre éventuellement pour indiquer que tu le fais en c++.
Donc pour le premier point, tu ne vas pas déclarer p variables, mais un tableau dynamique de  p valeur.
Ensuite pour la détection des sommets, tu ne vas pas comparer tous tes nombres entre eux (le résultat serait faux d'ailleurs je pense!) mais pour chaque nombre, tu vas le comparer à son précédent et à son suivant: en effet un sommet a une plus grande valeur que son précédent et son suivant:
donc Xi est sommet si Xi-1 < Xi > Xi+1. (attention : peut-être faut il vérifier que la courbe redescend suffisamment entre deux sommets, en fonction des résultat que tu souhaites avoir!)
Quand tu vérifies ca, tu peux enregistrer Xi comme étant un sommet. Si tu ne gardes que les 4 plus grands sommets tu vas enregistrer le résultat dans un tableau Sommet[] de 4 entrées (le premier initialiser a max (X0, XP), le deuxième a min (X0, Xp) - ca permet de faire une boucle de 1 a P-1 -, les autres à zéro) que tu vas trier à chaque ajout. Bien évidement tu ne vas ajouter un sommet que s'il est plus grand que le plus petit des sommets déjà enregistré(effaçant ainsi la plus petite valeur).
Normalement, en un passage tu as tes 4 plus grandes valeurs.


Message édité par breizhbugs le 08-02-2011 à 21:27:17

---------------
Seul Google le sait...
Reply

Marsh Posté le 13-02-2011 à 13:04:10    

salut,  
 
merci de ta réponse, en effet je n'avais pas penser à l'astuce du sommet comme plus grand que Xi-1 et Xi+1.
 
Ta méthode est en théorie ce qu'il me faut, mais n'ayant aucune base en programmation je sens que je vais lutter avec les tableaux dynamiques ( je sais même pas ce que c'est ... ).
 
Du cout je vais partir sur un script qui me prend tout les sommets au dessus d'une certaine valeur ( et non pas que les X plus hauts ), ca suffira amplement.
 
Par contre je ne sais toujours pas comment avec une boucle mettre du X1, X2,X3 ...
 

Code :
  1. for ( int a=0; a<100; a++)
  2. { x(a)=valeur mesurée au temps a }


 
Connais tu la syntaxe appropriée stp?
 
 
Merci pour ton aide en tout cas!
 
 
 

Reply

Marsh Posté le 13-02-2011 à 13:59:52    

Ben il faudrait déjà savoir ou se trouve tes données (un fichier je suppose)
 
en c++
pour faire un tableau en statique:
 

Code :
  1. int valeur[1000];


 
en dynamique:
 

Code :
  1. int taille = 0;
  2. cin >> taille; // lecture au clavier de la taille
  3. int *valeur = new int[taille];


 
(enfin pour être sûr : c'est bien les 4 points correspondant à des sommets que tu veux et pas les 4 points les plus haut de ta courbe?)


Message édité par breizhbugs le 13-02-2011 à 14:00:53

---------------
Seul Google le sait...
Reply

Marsh Posté le 13-02-2011 à 17:52:32    

ah ok, thk pour l'info du tableau.
 
En théorie il m'aurais fallut les 4 plus hauts sommets de la courbe.
 
Mais finalement ce sera mieux de prendre tout les sommets au dessus d'une certaine ligne.
 
Par contre je n'arrive pas avec une boucle à initialiser des variables.
Sais tu comment faire stp pour qu'il m'instaure x1,x2,x3,x4...xn avec n = 1000 par exemple?
 
J'ai tenter :

Code :
  1. 1. for ( int a=0; a<100; a++)
  2.    2. { x(a)=valeur mesurée au temps a }


 
mais c'est pas la bonne syntaxe.
 
 
Merci d'avance

Reply

Marsh Posté le 13-02-2011 à 19:58:45    

Du genre:

Code :
  1. int taille = 0;
  2. cin >> taille; // lecture au clavier de la taille
  3. int *valeur = new int[taille];
  4. for ( int a=0; a<taille; a++)
  5. {
  6.     valeur[a]=valeur mesurée au temps a ; // "valeur mesurée au temps a" me gêne, a est ici un entier allant de 0 à taille par pas de 1!  
  7. }


Message édité par breizhbugs le 13-02-2011 à 20:01:16

---------------
Seul Google le sait...
Reply

Marsh Posté le 14-02-2011 à 21:27:00    

ok thk, mais je ne pige pas:
 
Je code avec un dérivé du C++, le mql4.
Les fonctions cin, int *valeur, new int et valeur[a] posent soucis.
Est-ce a cause de librairies a importées?
 
 
Il n'y a donc pas de méthode "simple" pour initialiser des variables Xn ?
 
Un équivalent de :

Code :
  1. int a=100;
  2. string Xa="X"+a;


 
Ici on a bien Xa=X100.
 
Il me faudrait la même chose mais pour la variable, et non pour le texte de la variable.
 
merci d'avance

Reply

Marsh Posté le 15-02-2011 à 00:20:08    

je ne connais pas mql4, mais il n'est pas possible d'initilialiser des noms de variable avec d'autre variables en C++.
 
Soit tu passes par des tableaux, cf le post de breizhbugs; soit le nombre de variable est gerable, et tu declares toutes celles dont tu as besoin a la main.

Reply

Marsh Posté le 15-02-2011 à 17:29:01    

Le mieux est que tu regardes la doc de ton langage pour voir quelles sont les instructions/fonctionnalités supportées (les pointeurs, les tableaux?...)
Sinon, dans l'absolu tu as besoin de 3 variables: X(a-2), X(a-1) et X(a) : dans ce cas, tu étudies si X(a-1) est un sommet... (compter quatre autres variables de plus pour sauvegarder les 4 plus haut sommets)
Tout mettre dans un tableau est une commodité, pas une nécessité.
Mais après comme je te dis, si ce n'est pas du c++, il faut que tu consultes la doc du langage!


Message édité par breizhbugs le 15-02-2011 à 17:34:21

---------------
Seul Google le sait...
Reply

Marsh Posté le 15-02-2011 à 19:29:05    

C'est bon, avec les tableaux j'ai réussi à faire ce que je souhaitais!
 
Merci pour les conseils ;)

Reply

Sujets relatifs:

Leave a Replay

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