Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/01/2013, à 17:54

temps

[résolu] identification de position en langage c

Bonjour,
J'analyse des courbes de différentes formes en langage C.
Je cherche la solution la plus simple pour identifier quand la courbe arrive à 10%
en exemple :

1 3 4 8 22 30 31

Cette courbe contient 7 valeurs et varie de 1 à 31donc de 30.
10% de trente c'est 3, c'est donc au troisième point "4" que j’atteins 10%.

Je donne les valeur max et min par comparaison après lecture du fichier

int Mise_en_memoire [500];
int difference;
int min;
int max;
int repere;
int position;
int place;
difference = max - min;
repere = 0.1 * difference;
repere = min + repere;



for (position = 0; repere < Mise_en_memoire [position]; position++) 
{
place = position;
}

Est-ce que quelqu'un à une idée ?
Cordialement

Dernière modification par temps (Le 26/01/2013, à 19:37)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#2 Le 26/01/2013, à 19:20

pingouinux

Re : [résolu] identification de position en langage c

Bonjour,
S'il y a peu de valeurs dans le tableau, on peut à la rigueur les examiner une à une.
Sinon, il est préférable de procéder par dichotomie :
- Comparer repere à la valeur du milieu du tableau
- S'il est plus petit, on le compare ensuite à la valeur du milieu de la première moitié du tableau
- Sinon, on le compare à la valeur du milieu de la seconde moitié du tableau
- Et ainsi de suite. On s'arrête quand on trouve la bonne valeur, ou quand les indices de 2 itérations consécutives diffèrent de 1 (encadrement de la valeur).

Hors ligne

#3 Le 26/01/2013, à 19:27

temps

Re : [résolu] identification de position en langage c

Bonjour,
Merci pour la réponse, le problème est que la taille du tableau est aléatoire, on ne sait jamais combien d'éléments il va contenir à l'avance.
C'est en lisant les points de la courbe que le tableau se remplit.
Je poste en résolu, car en faisant des recherches, je viens de m’apercevoir que j'avais posé la même question, il y a un an ici http://forum.ubuntu-fr.org/viewtopic.php?pid=7896291 sur le forum et qu'elle avait été résolu.
J'ai repris des anciens travaux, mais je n'ai plus les anciens fichiers et je vois que j'hésite toujours au même endroit.
La réponse :

for (ola = 0 ; ola1 < tab[ola] ; ola++) ;

Cordialement

Dernière modification par temps (Le 02/02/2013, à 01:55)


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#4 Le 26/01/2013, à 19:36

pingouinux

Re : [résolu] identification de position en langage c

Cette méthode convient à des petits tableaux, ou si la performance n'est pas cruciale.
Par exemple, avec un tableau de taille 1000000, ta méthode va nécessiter en moyenne 500000 comparaisons. La méthode par dichotomie n'en nécessite que 20.

Hors ligne

#5 Le 26/01/2013, à 20:02

temps

Re : [résolu] identification de position en langage c

Merci pour la précision, mais dans l'utilisation, je ne vais jamais rencontrer de grandes valeurs.
La plupart des courbes que je vais rencontrer sont entre 6 et 60 valeurs parfois plus, mais l'application n'a pas de contrainte dans le temps.
Le problème, c'est la grande quantité de courbes à traiter, aussi une fois que l'application sera fonctionnelle, je reviendrai ici de manière à améliorer.
Pour l'instant, je vais essayer de faire en sorte que ces lignes se marient bien avec les 500 autres lignes de code, ensuite d'envoyer l'application sur mon serveur d'application en ligne.
Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#6 Le 27/01/2013, à 09:51

temps

Re : [résolu] identification de position en langage c

Et voila cela donne en l'intégrant dans le code

if ( imprime == 2 )/*indique la sortie sens 2 donc j entre en sens 1*/
{
if (force < (nbdepoints1 -10))/*verifie que j ai atteinds le pic*/
{
amplitude = (int)tamponcomparateur;
amplitudemax = amplitude;
/*début analyse jo*/

int difference;
/*la valeur maximal est amplitude puisque j'arrive a la fin d'un front montant*/
int repere;
int position;
int place;
difference = (amplitudemax - amplitudemin)/2;
repere = difference + (0.63212 * difference);


for (position = 0; repere < Mise_en_memoire1 [position]; position++) 
{
place = position;
}

jo = ((place +1 - (nbdepoints1/2)) * 100)/nbdepoints1;
/*fin de l'analyse jo**/

char binnb1;
char binnb2;
int pts1;
pts1 = nbdepoints1 * 0.00390625;
int pts2;
pts2 = nbdepoints1 - (256*pts1);
binnb1 = tab[pts2];
binnb2 = tab[pts1];
char binamp;
int binamp1;
int binamp2;
char binamp3;
binamp1 = amplitude * 0.00390625;
binamp = tab[binamp1];
binamp2 = amplitude - (256*binamp1);
binamp3 = tab[binamp2];
char binjo;
binjo = tab[jo];

fwrite(&binamp3, sizeof(char), 1, joris);
fwrite(&binamp, sizeof(char), 1, joris);
fwrite(&binnb1, sizeof(char), 1, joris);
fwrite(&binnb2, sizeof(char), 1, joris);
fwrite(&binjo, sizeof(char), 1, joris);

ombrem = 1;
amplitudeh = amplitude;
nbdepoints1 = 1;
pourtableau = 0;
imprime = 1; /* j envoie la main a la descente*/
}

Les formes des courbes sont comme des S, nous identifions le volume du S, avec "jo" et selon le volume, nous allons avoir des effets différents, un peu comme des vagues. Selon la forme de la vague, elle va arracher les cotes, ou déposer, ou attirer, ou pousser ... Ce qui donne l'effet est identifié à l'aide de ce calcul de position.
Cordialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne

#7 Le 27/01/2013, à 17:31

temps

Re : [résolu] identification de position en langage c

Bonjour,
J'ai fini d'intégrer le code d'identification de position, il va falloir que je teste car je suis pas sure de l'avoir bien fait.
J'ai mis les code en ligne, c'est ici :

http://www.letime.net/abadie_jo/modelis … iseur.html

et ça fonctionne avec
http://www.letime.net/abadie_jo/modelise/lecteur.html
et
http://www.letime.net/abadie_jo/synthetiseur.html

Codialement


Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net

Hors ligne