Page 1 sur 1
Exercice
Publié : 05 juil. 2018, 07:48
par itasoft
slts,
un petit exercice pour se détendre (ou se prendre la tête, LOL)
cliquer dessus pour agrandir
Re: Exercice
Publié : 13 juil. 2018, 15:08
par Flav
Quelle est cette fonction LOG? Jamais vue.
Edit: Et si y'a plusieurs bits à un? :p
Re: Exercice
Publié : 13 juil. 2018, 15:27
par Kallysto
Flav a écrit : ↑13 juil. 2018, 15:08
Edit: Et si y'a plusieurs bits à un? :p
Me suis posée la même question mais j'ai voulu être sympa...
Re: Exercice
Publié : 13 juil. 2018, 15:40
par itasoft
slts,
c'est valable que si ya un seul bit à 1
Re: Exercice
Publié : 02 août 2018, 06:43
par steph68
hello,
Code : Tout sélectionner
IF %MW0 <> 0 THEN
%MW1 := 0;
%MW0 := %MW0 AND NOT %MW0 + 1; (* isolation du premier bit à 1, ce qui est identique à %MW0 AND -%MW0 *)
IF (%MW0 AND 16#AAAA) <> 0 THEN %MW1 := %MW1 + 1; END_IF
IF (%MW0 AND 16#CCCC) <> 0 THEN %MW1 := %MW1 + 2; END_IF
IF (%MW0 AND 16#F0F0) <> 0 THEN %MW1 := %MW1 + 4; END_IF
IF (%MW0 AND 16#FF00) <> 0 THEN %MW1 := %MW1 + 8; END_IF
ELSE
%MW1 := -1;
END_IF
astuce utilisée:
x AND -x isole le bit à 1 le plus faible
pour éviter des problèmes de conversion si %MW0 est déclaré en type WORD : NOT x + 1 est équivalent à -x
@+
Re: Exercice
Publié : 02 août 2018, 08:31
par ProfnovA
Allez, c'est bien parce que c'est les vacances...
Re: Exercice
Publié : 02 août 2018, 10:28
par itasoft
ProfnovA a écrit : ↑02 août 2018, 08:31
Allez, c'est bien parce que c'est les vacances...
bien, pas trouvé de quoi dérive la constante 1.4427 , c'est pas la racine de 2 ?
Re: Exercice
Publié : 02 août 2018, 13:45
par ProfnovA
itasoft a écrit : ↑02 août 2018, 10:28
ProfnovA a écrit : ↑02 août 2018, 08:31
Allez, c'est bien parce que c'est les vacances...
bien, pas trouvé de quoi dérive la constante 1.4427 , c'est pas la racine de 2 ?
Honnêtement, j'ai fait une courbe de tendance excel, c'est pas beau de tricher...
En fait ça correspond à l'expression de départ transformée en ln (base 2).
La constante est 1 / ( ln(10) * log(2) ).
Ca fait réviser un peu ses classiques.
Re: Exercice
Publié : 02 août 2018, 13:52
par itasoft
slts,
exact, c'est la réciproque de la fonction , va falloir que je révise mes bouquins, lol
Re: Exercice
Publié : 02 août 2018, 19:44
par itasoft
@steph68
ta solution fonctionne, mais si il faut écrire des lignes de programme , on peut faire plus court.
%MW1:=-1;
while %MW0 <>0 do
inc(%MW1);
%MW0:=SHR(%MW0,1);
end_while;
pendant qu'on y est, dans le même principe
(* nombre de bits à 1 dans %MW0 *)
%MW1:=0;
while %MW0 <>0 do
%MW1:=%MW1+(%MW0 AND 1);
%MW0:=SHR(%MW0,1);
end_while;
(* nombre de bits à 0 dans %MW0*)
%MW1:=0;
while %MW0 <>0 do
%MW1:=%MW1+(%MW0 And 1 XOR 1);
%MW0:=SHR(%MW0,1);
end_while;