Pages : 1
#1 Le 18/02/2015, à 06:10
- temps
[résolu] Tri en C++
Bonjour,
J'ai un tableau de 8 valeurs que je dois additionner ou soustraire, la sélection se fait à l'aide d'un octet.
J’envisage la solution d'un switch de 256 cas mais je pense qu'il doit y avoir une manière plus légère pour effectuer ce tri.
switch (octetdetri) {
case 0 :
a = x + valeur[0];
b = x + valeur[1];
...
break;
case 1 :
a = x - valeur[0];
b = x + valeur[1];
...
break;
....
...
case 255 :
a = x - valeur[0];
b = x - valeur[1];
...
break;
}
Cordialement
Dernière modification par temps (Le 18/02/2015, à 14:54)
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 18/02/2015, à 06:23
- temps
Re : [résolu] Tri en C++
bonjour,
en écrivant le poste je pensais en exemple à l’opérateur modulo 2
octetdetri % 2
Faire un modulo de la valeur selon la réponse la première valeur est dans telle position
Diviser par deux puis refaire un modulo pour avoir la position de la deuxième valeur
... répéter pour les 8 cas
Cordialement
Dernière modification par temps (Le 18/02/2015, à 06:25)
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
#3 Le 18/02/2015, à 07:11
- pingouinux
Re : [résolu] Tri en C++
Bonjour,
Le bit n° n (à partir de la droite, en commençant à 0) est positionné si
octetdetri & (1<<n) != 0
Ajouté :
Si tu veux que le résultat soit 0 ou 1
(octetdetri >> n) & 1
Dernière modification par pingouinux (Le 18/02/2015, à 07:17)
Hors ligne
#4 Le 18/02/2015, à 07:31
- temps
Re : [résolu] Tri en C++
Bonjour,
Merci pour la réponse.
j'en étais encore à la structure conditionnelle
a = ((octetdetri %2==0 == 1) ? x+valeur[0] : x-valeur[0]);
Le concept de lire les bit dans l'octet est bien meilleur, même si au premier regard j'imagine qu'il manque une boucle de for dans le code donné.
Il va falloir que que j'apprenne car je veux savoir la position, le code donné permet de la créer non pas de la lire (je crois à vérifier).
Donc j'imagine le code commence par
for(int n = 8; n>0; n--)
{
ou est n ?
a[n] = ((positionbitn==0 == 1) ? x+valeur[n] : x-valeur[n]);
}
Cordialement
Dernière modification par temps (Le 18/02/2015, à 07:51)
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
#5 Le 18/02/2015, à 08:32
- ssdg
Re : [résolu] Tri en C++
Il y a l'option de faire un & aussi (je ne me souvient plus de l'opérateur), mais pour l'exemple disons que c'est "&" et qu'il existe un opérateur "^" pour puissance (je crois qu'en C c'est une fonction)
for(int n = 0; n<8; n++)
{
a[n] = ((x & 2^n) ? x+valeur[n] : x-valeur[n]);
}
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#6 Le 18/02/2015, à 08:59
- pingouinux
Re : [résolu] Tri en C++
et qu'il existe un opérateur "^" pour puissance
^ est l'opérateur ou exclusif.
Hors ligne
#7 Le 18/02/2015, à 09:10
- ssdg
Re : [résolu] Tri en C++
Du coup, tu peux sans doute donner le nom de la fonction qui me manque?
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#8 Le 18/02/2015, à 09:17
- pingouinux
Re : [résolu] Tri en C++
& est l'opérateur ET
L'équivalent de ce que tu voulais faire est
x & (1<<n)
mais je n'ai pas compris ce que temps cherche à faire exactement.
Hors ligne
#9 Le 18/02/2015, à 11:32
- ssdg
Re : [résolu] Tri en C++
En fait, il a un octet (donc 8 booléens), un tableau de 8 valeurs et un nombre.
Il veut obtenir un second tableau de 8 valeurs à en dériver.
Pour chaque "position", il faut valeur d'origine + valeur du tableau ou valeur d'origine - valeur du tableau en fonction du booleen correspondant dans l'octet.
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#10 Le 18/02/2015, à 13:01
- pingouinux
Re : [résolu] Tri en C++
Dans ce cas, ce serait :
a[n] = ( (octetdetri >> n) & 1 ? x-valeur[n] : x+valeur[n] );
ou bien
a[n] = x + (1-2*((octetdetri >> n) & 1)) * valeur[n];
x ne dépend-il pas de n ?
Hors ligne
#11 Le 18/02/2015, à 14:53
- temps
Re : [résolu] Tri en C++
Merci pour les réponses,
je poste en résolu.
pour le détail, x ne dépend pas de n.
En fait x est une valeur flottante qui dépend d'autres facteurs, mais l'effet obtenu est ce qui va se produire autour de x. L'objectif est de piloter l’emplacement des 8 octets à l'aide d'un seul octet. Les cas possibles des 8 octets se trouvant dans une structure.
En moins compliqué peut-être, le but est de faire varier une structure prédéfinie de cas possibles autour d'une valeur fixe en utilisant qu'un seul octet tout les 8 octets de la structure.
Cordialement
Dernière modification par temps (Le 18/02/2015, à 14:56)
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
Pages : 1