Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1261 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Question de logique mathématique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Question de logique mathématique

n°853323
Ethan_cart​er
Posté le 18-09-2004 à 20:31:18  profilanswer
 

Bonjour;
 
Je viens de créer un programme de mailling-list (privé), en perl, qui permet d'envoyer un message aux membres de mon site (et uniquement aux membres). Ce programme est exécuté dans le répertoire /cgi-bin/ d'un serveur Unix.
 
Ce programme permet d'exclure de l'envoi certains membres, car une question ou un sujet peut ne pas concerner tout le monde.  :o  
 
Dans le message envoyé, il existe un lien pour répondre. Je souhaiterais que ce lien contienne un paramètre permettant d'identifier les membres concernés par l'envoi et ceux qui en sont exclus.
 
Ainsi, les cases concernant les membres exclus de l'envoi original seront automlatiquement décochés quand on cliquera sur "répondre".
 
J'ai pensé à un système, mais mon experience en programmation informatique est encore un peu réduite et je ne parviens pas à finaliser mon idée. :D  
 
Sachant que chaque membre est identifié par un numéro (membre 1, membre 2, membre 3 etc...), je peux attribuer une valeur croissante multipliée par 2 pour chaques membres.
 
Exemple :
 
membre 1 -> valeur 1
membre 2 -> valeur 2
membre 3 -> valeur 4
membre 4 -> valeur 8
membre 5 -> valeur 16
etc...
 
Il suffirait d'additionner les valeurs des membres concernés.
Si un message concerne le membre 1, 3 et 5, alors on fait 1 + 4 + 16, et on obtient 21.
 
Il suffirait d'ajouter dans le paramètre du lien (dans le message envoyé) le nombre 21.
/cgi-bin/repondre.cgi?membres=21 (par exemple)
 
Le problème, et vous l'avez vite compris, c'est que je n'arrive pas à trouver la logique qui me permettrais d'aller dans le sens inverse.
 
A partir de 21, comment revenir à membre1+membre3+membre5 ?
Vous avez une idée ? Je suis sûr que c'est trés simple, mais là je dois dire qu'aprés des heures de test, je jette l'éponge..
 
Merci


Message édité par Ethan_carter le 18-09-2004 à 20:33:12
mood
Publicité
Posté le 18-09-2004 à 20:31:18  profilanswer
 

n°853338
gilou
Modérateur
Modzilla
Posté le 18-09-2004 à 21:44:24  profilanswer
 

Ethan_carter a écrit :

Bonjour;
 
Je viens de créer un programme de mailling-list (privé), en perl, qui permet d'envoyer un message aux membres de mon site (et uniquement aux membres). Ce programme est exécuté dans le répertoire /cgi-bin/ d'un serveur Unix.
 
Ce programme permet d'exclure de l'envoi certains membres, car une question ou un sujet peut ne pas concerner tout le monde.  :o  
 
Dans le message envoyé, il existe un lien pour répondre. Je souhaiterais que ce lien contienne un paramètre permettant d'identifier les membres concernés par l'envoi et ceux qui en sont exclus.
 
Ainsi, les cases concernant les membres exclus de l'envoi original seront automlatiquement décochés quand on cliquera sur "répondre".
 
J'ai pensé à un système, mais mon experience en programmation informatique est encore un peu réduite et je ne parviens pas à finaliser mon idée. :D  
 
Sachant que chaque membre est identifié par un numéro (membre 1, membre 2, membre 3 etc...), je peux attribuer une valeur croissante multipliée par 2 pour chaques membres.
 
Exemple :
 
membre 1 -> valeur 1
membre 2 -> valeur 2
membre 3 -> valeur 4
membre 4 -> valeur 8
membre 5 -> valeur 16
etc...
 
Il suffirait d'additionner les valeurs des membres concernés.
Si un message concerne le membre 1, 3 et 5, alors on fait 1 + 4 + 16, et on obtient 21.
 
Il suffirait d'ajouter dans le paramètre du lien (dans le message envoyé) le nombre 21.
/cgi-bin/repondre.cgi?membres=21 (par exemple)
 
Le problème, et vous l'avez vite compris, c'est que je n'arrive pas à trouver la logique qui me permettrais d'aller dans le sens inverse.
 
A partir de 21, comment revenir à membre1+membre3+membre5 ?
Vous avez une idée ? Je suis sûr que c'est trés simple, mais là je dois dire qu'aprés des heures de test, je jette l'éponge..
 
Merci


> A partir de 21, comment revenir à membre1+membre3+membre5 ?  
tu effectues des divisions successives par 2...
 
Ca serait pas plus simple d'avoir une table avec des entrées
No de message - liste de diffusion restreinte (avec eventuellement une indirection entre deux, si tu veux pas avoir trop de repetitione de memes listes de diffusion restreinte)
(et si pas de numero dans ta table, alors diffusion generale)
et de recuperer le numero du message lors d'une reponse?
A+,


Message édité par gilou le 18-09-2004 à 21:47:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°853371
Ethan_cart​er
Posté le 19-09-2004 à 00:30:39  profilanswer
 

Oui, en effet, je pourrais faire ça aussi...Merci pour l'astuce... Toutefois, par curiosité, peux-tu STP m'expliquer ce que tu entends par division successive par 2 ? En effet, 21/2 = 10.5 , je ne vois pas ce que ça apporte ?
 
a+

n°853389
matafan
Posté le 19-09-2004 à 04:37:25  profilanswer
 

Ce qu'il veut dire c'est que pour savoir le membre n est concerné par le message dont le « nombre » est N, tu peux faire (N>>(n-1) & 1).

n°853439
ceyquem
E falso sequitur quodlibet
Posté le 19-09-2004 à 11:57:29  profilanswer
 

tu pars de a plus petite puissance de 2 inférieure ou égale à ton nombre (21), tu en tires 2^4 d'où le membre numéro 5 et le reste 5, ensuite tu réitères :
 
21 => 16 + 5 => 2^4 + 5 => n°5+1
05 => 04 + 1 => 2^2 + 1 => n°3+1
01 => 01 + 0 => 2^0 + 0 => n°0+1 STOP
 
voili

n°854073
macgawel
Posté le 20-09-2004 à 13:57:58  profilanswer
 

Euh ... Question stupide, sous Perl il n'y a pas une fonction qui passe du décimal en binaire ?
Nan, parce que (21)10 = (00010101)bin.
Et tu sais que tu dois envoyer aux membres 1, 3 et 5 (là où tu as des 1)

n°861001
seccas
Posté le 30-09-2004 à 14:30:35  profilanswer
 

Citation :

Euh ... Question stupide, sous Perl il n'y a pas une fonction qui passe du décimal en binaire ?


Je suis pas sur mais je crois que les fonctions pack/unpack sont destinées à ça. (http://www.perldoc.com/perl5.6.1/pod/func/pack.html)


Message édité par seccas le 30-09-2004 à 14:31:52

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Question de logique mathématique

 

Sujets relatifs
Script perl cgi [Resolu]Question sur les iframes
[C++] Librairie mathématiqueQuestion sur code de ma page
Question sur les iframes !![Perl] Passage de variable d'un script a un autre
[Perl] Je cherche une alternative à crypt()Question bête en SQL !!
Access : question sur un SOMDOM2 p'tites questions CSS et 1 question sur W3C ??
Plus de sujets relatifs à : [Perl] Question de logique mathématique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR